#php #sql #database #list
#php #sql #База данных #Список
Вопрос:
У меня есть небольшой веб-сайт галереи, но количество изображений в каталоге отличается от количества, учитываемого в базе данных, примерно на 150, поэтому мне было интересно, есть ли способ узнать / перечислить, какие файлы находятся в каталоге, которых «нет» в базе данных (или наоборот).
базовая структура БД:
- Изображения
- ID
- Изображения
имена изображений хранятся в базе данных как «imagename.jpg «
а сами изображения хранятся в каталоге images
Изображения/
Комментарии:
1. Как выглядит таблица базы данных? Как хранятся файлы? Слишком мало информации, чтобы ответить на этот вопрос.
Ответ №1:
Поместите имена файлов с сервера в один массив, а файлы из базы данных в другой. Используйте 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
)
Комментарии:
1. Примечание: Вы можете использовать
$files_server = scandir('/path/to/images/');
для создания массива файлов на сервере.
Ответ №2:
Если это, скорее всего, одноразовая проблема, я бы решил это половинчатым решением, используя сначала небольшой SQL-скрипт:
SELECT filename FROM images;
и попросите клиента базы данных mysql
или psql
или что-то еще сбросить выходные данные в виде обычного текста в файл. (Перенаправление командной оболочки может выполнить эту работу, если вы не можете легко найти команду «дамп в файл» вашего клиента базы данных.)
Тогда я бы получил список каталогов:
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
output, чтобы один из них соответствовал другому. Если в вашем редакторе есть инструмент, подобный vim
‘s ^V
block select, некоторые из этих задач редактирования можно упростить, но иногда простой запуск ls
из другого каталога может помочь добавить правильную структуру каталогов перед каждым именем файла.