Как удалить фото? не удаляется

Главные вкладки

Аватар пользователя afishi afishi 29 июля 2011 в 23:57

копируется легко, намножили, а вот как удалить фото, если у него адрес мертвый, поломанный, не читаемый?

адрес типа: ярославская РёРєРѕРЅР°_0.preview.jpg и такой _волгоград_новый размер_новый размер.jpg

что делать?

Комментарии

Аватар пользователя antton antton 9 января 2012 в 1:28

Ваша проблема связана не с непонятными файлами (коркозяблы в названии файлов), а с тем что данные файлы созданы от имени сервера. А значит на них установлены права на файлы (атрибуты файлов, CHMOD) "664" - т.е. удалять и изменять файлы может только сервер, вы же можете только смотреть их.

Чтобы удалить файлы необходимо изменить права на доступ к ним. Права можно изменить с помощью FTP-клиента. Например, в программе CuteFTP: щёлкаем правой кнопкой мыши по папке/файлу и выбираем "Свойства/CHMOD" и выставляем "777". А например, в программе Total Commander: щёлкаем по файлу левой кнопкой мыши, выделяя его; в меню выбираем "Файл/Изменить атрибуты..." и выставляем "777".

Сначала необходимо установить права на полный доступ "777" на папку, в которой лежат эти файлы; а затем уже вы сможете изменить права у файлов, лежащих в этой папке.

Если вы не можете изменить права у папки, то переместить указанные вами файлы в какую-нибудь отдельную папку, например, "/sites/all/files/delete". Это можно сделать, например, с помощью программы CuteFTP. Щёлкаем по файлам "Вырезать", а в нужной папке щёлкаем "Вставить".

Дальше применяем php-скрипт. Создайте на сервере файл "chmod.php" со следующим содержимым:

<?php 
 
function chmod_R($path$perm) { 
  
   
$handle opendir($path); 
   while ( 
false !== ($file readdir($handle)) ) { 
     if ( (
$file !== ".") && ($file !== "..") ) { 
       if ( 
is_file($path."/".$file) ) { 
         
chmod($path "/" $file$perm); 
       } 
       else { 
         
chmod($path "/" $file$perm); 
         
chmod_R($path "/" $file$perm); 
       } 
     } 
   } 
   
closedir($handle); 
 } 
  
 
$path $_SERVER["QUERY_STRING"]; 

 if ( 

$path{0} != "/sites/all/files/delete/" ) { 
    
$path $_SERVER["DOCUMENT_ROOT"] . "/sites/all/files/delete" $path
 } 

 

chmod_R($path0777); 
 echo 
$path
?>

Запустите скрипт, указав его положение на сайте в адресной строке браузера. Данный скрипт выставит права на файлы и папки "777" от имени сервера. По завершению операции не забудьте удалить скрипт.

--
P.S. Этот скрипт в своём время помог мне избавиться от подобных фалов, права на которые ну никак не хотели меняться.

Но будьте аккуратны с использованием скрипта и выставлением прав "777" на прочие файлы, которые не собираетесь удалять. Файлы не случайно имеют чёткие разграничения на доступ. Это защищает сервер от взлома. Права "777" - предоставляют возможность делать любые действия с фалами любым пользователям, что небезопасно.

Аватар пользователя afishi afishi 9 января 2012 в 6:07

огромное спасибо!
скопировать это пол дела, а как восстановить, и названия нормальные сделать? есть для этого скрипт?

Аватар пользователя antton antton 9 января 2012 в 13:54

Это уже абсолютной другой вопрос Smile

Чтобы избежать подобных проблем с файлами, используйте модуль [module=transliteration]. Этот модуль конвертирует не латинский текст в кодировку US-ASCII и адаптирует имена файлов. Проще говоря названия закачиваемых файлов при сохранении будут конвертироваться в латинские символы (английский алфавит :-).

ярославская икона.jpg => yaroslavskaya_ikona.jpg
волгоград_новый размер_новый размер.jpg => volgograd_novyy_razmer_novyy_razmer.jpg

--
P.S. Разгадать конкретные названия ваших файлов мне помогла программа Штирлиц 4.0. Запускаем программу, создаем новый документ, вставляем ваши коркозяблы, выбираем перекодировать UTF-8 -> WIN.

Аватар пользователя afishi afishi 9 января 2012 в 20:20

ну такая у меня стоит... но те ошибки прошлого... получается надо поштучно их править? у меня их несколько сот..

Аватар пользователя antton antton 10 января 2012 в 1:16

Я не знаю готового решения, может кто-нибудь ещё подскажет. Попробуйте поискать тут и на drupal.org (например, по словам "rename old files"). Если нет ничего, вариантов два:
1) вручную ручками - перезагружать файлы
2) платить программисту за написание скрипта