Узнайте, какие файлы находятся в каталоге, которые «не» перечислены в базе данных - PullRequest
2 голосов
/ 09 апреля 2011

У меня небольшой веб-сайт галереи, но количество изображений в каталоге отличается от того, которое учитывается в базе данных, примерно на 150, поэтому мне было интересно, есть ли способ узнать / перечислить, какие файлы в каталоге "не являются" "в базе данных (или наоборот).

базовая структура БД:

  • изображения
    • ID
    • изображения

имена изображений хранятся в БД как "imagename.jpg"

, а сами изображения хранятся в каталоге изображений

изображения /

Ответы [ 2 ]

3 голосов
/ 09 апреля 2011

Поместить имена файлов с сервера в один массив и файлы из базы данных в другой.Используйте array_diff () для получения результата.

Пример (PHP):

$files_db = array("car.jpg", "bike.jpg", "plane.jpg", "ship.jpg", "tank.jpg"); 
$files_server = array("car.jpg", "bike.jpg", "ship.jpg", "rocket.jpg"); 

Использование

print_r(array_diff($files_db, $files_server));

Выход

Array
(
    [2] => plane.jpg
    [4] => tank.jpg
)

Или (наоборот)

print_r(array_diff($files_server, $files_db));

Вывод

Array
(
    [3] => rocket.jpg
)
2 голосов
/ 09 апреля 2011

Если это, вероятно, единовременная проблема, я бы решил ее неполным решением, используя сначала маленький SQL-скрипт:

SELECT filename FROM images;

и попросите клиента базы данных mysql или psql или что-либо еще, чтобы вывести вывод в виде простого текста в файл. (Перенаправление оболочки может сделать эту работу, если вы не можете легко найти команду «dump to file» вашего клиента базы данных.)

Тогда я получу список каталогов:

ls /path/to/images/ > ls_files

Сортировать как:

sort db_files > db_files.sorted
sort ls_files > ls_files.sorted

Затем запустите diff(1), чтобы увидеть, на какие файлы ссылаются, где:

diff -u ls_files.sorted db_files.sorted

Строки с префиксом + или - находятся в одной, но не в другой.

Вам может понадобиться отредактировать вывод SQL или вывод ls, чтобы получить один, соответствующий другому. Если в вашем редакторе есть инструмент, подобный блоку выбора vim, ^V, некоторые из этих задач редактирования могут быть упрощены, но иногда просто запуск ls из другого каталога может помочь предопределить правильную структуру каталога перед каждым именем файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...