Как оптимальнее удалить все файлы, не упоминающиеся в БД?
Есть таблица, в которой находятся ссылки на изображения. Все изображения в одной папке. Есть изображения, на которые нет ссылок в таблице. Как их удалить оптимально?
Решение "в лоб" - создать массив названий изображений из таблицы, потом пройтись по папке перебирая изображения и сравнивая каждое с массивом. Но, думаю, есть более оптимальное решение.
keslo: $handle = opendir($dir);
if ($handle) { // Если удалось открыть директорию, то
while (false !== ($file = readdir($handle))) { // Пока мы можем читать директорию...
if ($file != "." && $file != "..") { // Если файл не равен . и .., выводим файл
if (in_array(end(explode(".",
strtolower($file))),
$allowedExtensions)) {
echo $file;
}
}
}
}
closedir($handle); // не забыть закрыть директорию
Психанул и снес свои ответы козлам, не отмечающим…
Можно решить задачу путем метапрограммирования: при помощи SQL сгенерировать скрипт перемещения файлов в новую папку, потом оставшиеся удалить и вернуть перемещенные обратно.
Самому надо на днях это будет делать. Думаю сделать влоб так как это однократная операция. Может быть порезче получится если составить два списка. В одном имена картинок в папке, в другом имена картинок из базы. Вычесть из первого списка второй - получится список картинок, которые надо удалить
программист, python, django, mysql, git, hg, linux
Написать скрипт, который сканит диру одним концом, а другим - лезет в базу: есть ли там ссылка на изображение? если нет - удаляем файл. Скрипт строчек на 10-20-30.
Алексей: так наверное можно выдернуть один раз из базы все данные по ссылкам и записать их в масиив. Потом дергаем файл и сравниваем с выдернутыми данными из базы. Если нет такого файла, то удаляем его из директории. Извиняюсь за тавтологию.