копируется легко, намножили, а вот как удалить фото, если у него адрес мертвый, поломанный, не читаемый?
адрес типа: ярославская РёРєРѕРЅР°_0.preview.jpg и такой _волгоград_новый размер_новый размер.jpg
что делать?
Комментарии
SSH ? FTP ?
фтп
ну или как на ssh - какая команда? как удалить только поломанные? как их выбрать командой?
Ваша проблема связана не с непонятными файлами (коркозяблы в названии файлов), а с тем что данные файлы созданы от имени сервера. А значит на них установлены права на файлы (атрибуты файлов, CHMOD) "664" - т.е. удалять и изменять файлы может только сервер, вы же можете только смотреть их.
Чтобы удалить файлы необходимо изменить права на доступ к ним. Права можно изменить с помощью FTP-клиента. Например, в программе CuteFTP: щёлкаем правой кнопкой мыши по папке/файлу и выбираем "Свойства/CHMOD" и выставляем "777". А например, в программе Total Commander: щёлкаем по файлу левой кнопкой мыши, выделяя его; в меню выбираем "Файл/Изменить атрибуты..." и выставляем "777".
Сначала необходимо установить права на полный доступ "777" на папку, в которой лежат эти файлы; а затем уже вы сможете изменить права у файлов, лежащих в этой папке.
Если вы не можете изменить права у папки, то переместить указанные вами файлы в какую-нибудь отдельную папку, например, "/sites/all/files/delete". Это можно сделать, например, с помощью программы CuteFTP. Щёлкаем по файлам "Вырезать", а в нужной папке щёлкаем "Вставить".
Дальше применяем php-скрипт. Создайте на сервере файл "chmod.php" со следующим содержимым:
<?php
chmod_R($path, 0777);
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;
}
echo $path;
?>
Запустите скрипт, указав его положение на сайте в адресной строке браузера. Данный скрипт выставит права на файлы и папки "777" от имени сервера. По завершению операции не забудьте удалить скрипт.
--
P.S. Этот скрипт в своём время помог мне избавиться от подобных фалов, права на которые ну никак не хотели меняться.
Но будьте аккуратны с использованием скрипта и выставлением прав "777" на прочие файлы, которые не собираетесь удалять. Файлы не случайно имеют чёткие разграничения на доступ. Это защищает сервер от взлома. Права "777" - предоставляют возможность делать любые действия с фалами любым пользователям, что небезопасно.
огромное спасибо!
скопировать это пол дела, а как восстановить, и названия нормальные сделать? есть для этого скрипт?
Это уже абсолютной другой вопрос
Чтобы избежать подобных проблем с файлами, используйте модуль [module=transliteration]. Этот модуль конвертирует не латинский текст в кодировку US-ASCII и адаптирует имена файлов. Проще говоря названия закачиваемых файлов при сохранении будут конвертироваться в латинские символы (английский алфавит :-).
ярославская икона.jpg => yaroslavskaya_ikona.jpg
волгоград_новый размер_новый размер.jpg => volgograd_novyy_razmer_novyy_razmer.jpg
--
P.S. Разгадать конкретные названия ваших файлов мне помогла программа Штирлиц 4.0. Запускаем программу, создаем новый документ, вставляем ваши коркозяблы, выбираем перекодировать UTF-8 -> WIN.
ну такая у меня стоит... но те ошибки прошлого... получается надо поштучно их править? у меня их несколько сот..
Я не знаю готового решения, может кто-нибудь ещё подскажет. Попробуйте поискать тут и на drupal.org (например, по словам "rename old files"). Если нет ничего, вариантов два:
1) вручную ручками - перезагружать файлы
2) платить программисту за написание скрипта