Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Удаление файлов с сервера

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Alex85
Отправлено: 16 Июня, 2010 - 09:42:17
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Помогите с таким делом: надо удалить файлы (картинки) с сервера! В php еще не силен
Т.е. Есть каталог продукции с картинками, половина картинок уже не используется (порядка 20 тысяц изображений). Имена файлов в md5 (т.е. формируется из имени элемента каталога - $item['image'] = md5(item['caption']))

Как записать в массив эти имена?

$db = new mysqlBase();
$db->query("select caption from catalog1Item");
while ($row=$db->row())
$b = md5($row['caption']).'.jpg';

Потом в директории проверить файлы и тоже в массив?

$dir = "../images/catalog";
$file = scandir($dir);

Сравнить массивы и если в $file нету значения из массива $b - удалить!
Так получится? подскажите какими средствами это можно сделать? или может есть какие то другие варианты?
 
 Top
JustUserR
Отправлено: 16 Июня, 2010 - 12:38:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alex85 пишет:
Сравнить массивы и если в $file нету значения из массива $b - удалить!
Так получится? подскажите какими средствами это можно сделать? или может есть какие то другие варианты?
Примерно так и происходят операиции с выборкой файлов по списку - однако можно не получать список файлов в каталоге с картинками так как вам известны их имена и вы сразу можете их удалить - а если имеются подпапки то можно получить только их список и рекурсивно проверить наличие в них искомых картинок При удалении файлов необходимо чтобы пользователя от имени которого работает PHP-скрипт имел права на удаление этих файлов или был их владельцем - или полным владельцем папки в которой они находятся Как вариант можно использовать CGI-скрипт с общей группой пользователя и правами доступа типа 775 или обеспечивать запуск с эффектвным битом пользователя


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alex85
Отправлено: 16 Июня, 2010 - 13:08:39
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




JustUserR пишет:
можно не получать список файлов в каталоге с картинками так как вам известны их имена и вы сразу можете их удалить


Дело в том, что картинки, которые присутствуют в каталоге необходимо оставить, а те которые не используются удалить!
Скажем есть у нас 25 картинок, из них 10 используются в каталоге и 15 не используются, дак вот необходимо эти 15 и удалить.
Подпапок нет!

Написал вот такое

$dir = opendir("../images/catalog");
chdir ("../images/catalog");
while ( $readdir = readdir($dir) )
{
//unlink($readdir);
echo $readdir.'<br>';
}
echo '<hr><hr>';

$db = new mysqlBase();
$db->query("select caption from catalog1Item");
$arr = array();
while ($row=$db->row()){
$b = (md5($row['caption']).'.jpg');
echo $b.'<br>';
}

Как сравнить? и удалить теперь?
 
 Top
JustUserR
Отправлено: 16 Июня, 2010 - 13:33:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alex85 пишет:
Дело в том, что картинки, которые присутствуют в каталоге необходимо оставить, а те которые не используются удалить!
Скажем есть у нас 25 картинок, из них 10 используются в каталоге и 15 не используются, дак вот необходимо эти 15 и удалить.
Подпапок нет!
Вам нужно уточнить каким критерием является нужность или ненужность картинок - она может определяться временем последнего доступа и изменения и многими другими критериями Если же нужными считаются картинки которые фигурируют в таблице catalog1Item то удаление происходит следующим образом - сначала вы получаете список картинок из БД и потом просматриваете папку и удаляете все те картинки которые на находятся в списке выбранных из БД - такую встроенную проверку можно делать функцией in_array


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alex85
Отправлено: 16 Июня, 2010 - 14:04:06
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




JustUserR пишет:
Вам нужно уточнить каким критерием является нужность или ненужность картинок - она может определяться временем последнего доступа и изменения и многими другими критериями Если же нужными считаются картинки которые фигурируют в таблице catalog1Item то удаление происходит следующим образом - сначала вы получаете список картинок из БД и потом просматриваете папку и удаляете все те картинки которые на находятся в списке выбранных из БД - такую встроенную проверку можно делать функцией in_array


Нужность и ненужность определяется 1 критерием! если имя файла, скажем eb1f4b74c96f8c4d2f4aab94ed1f1ac8 .jpg совпадает с именем элемента каталога, к примеру "монитор" eb1f4b74c96f8c4d2f4aab94ed1f1ac8 - в md5, то оставляем, если уже нет(удален) такой товар - то и файл с сервера удаляем! В базе не фигурируют картинки в принципе! где то метод в модуле описан, чтоб привязать изображение к элементу!

P.S. Проект не мой, достался в наследство, как могу так объясняю, простите, если не понятно что-то
 
 Top
JustUserR
Отправлено: 17 Июня, 2010 - 10:07:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alex85 пишет:
В базе не фигурируют картинки в принципе! где то метод в модуле описан, чтоб привязать изображение к элементу!
Ваша задача понятна то есть вам нужно удалть все изображения - которые больше не используются ни в каких разделах сайта и на которые больше нет ссылок Очевидно что в вашем случае определение идет не прямым просмотром существующий HTML-файлов и шаблонов в поисках ссылки на изображение - а конкретной БД в которой хоть и НЕТ ссылок на текущие изображения но есть какой-то способ связи с ними
То есть конкретно вы делаете выборку из всех таблиц в БД которые как-то связаны с хранимиым содержимим и картинками - напрмер там может храниться некоторый идентификатор - потом вы пропускаете данные идентификатор через ваш метод в модуле который привязывает изображение к элементу - и получаете конкретный URL-адрес картинки - и составляете массив всех картинок $arr которые использовались хотя бы один раз А далее уже просто анализируете содержимое каталога с картинками и удаляете из него все что не лежит в массиве $arr - например проверкой in_array($arr)
Если виртуальный URL-картинки и ее относительный файловый путь оказываются различными - то надо также анализировать директивы .htaccess в поисах соответствующих перенаправляющих alias-ов - но скорее всего вы можете обойтись без этого


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Alex85
Отправлено: 17 Июня, 2010 - 13:24:18
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Спасибо! все получилось! удалил!=)
 
 Top
JustUserR
Отправлено: 18 Июня, 2010 - 11:52:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Alex85 пишет:
Спасибо! все получилось! удалил!=)
Пожалуйста! Кстати если у вас имеется большое число неиспользуемых файлов которое значительно больше используемых - и к тому же эти файла разнесены по различным подкаталогом и их полный перебор занимает много времени и ресурсом - то в таком случае можно скопировать нужные вам файлы по циклу с учетом их дерева вложенности а для всех остальных запустить rm -R /path - и потом вернуть их обратно Такой подход действительно часто применяется при работе с болшим объемами файлов - например в Perl по умолчанию при редактировании файла создается новый файл в который производится копирование с соответствующими изменениями


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB