производительность — проблема скорости PHP при чтении большого количества изображений в формате EXIF

Я хочу перечислить и упорядочить по дате изображения в каталоге (чтобы потом сравнить с базой данных и отобразить те, которых нет в БД).

У меня их несколько тысяч, и для считывания даты filetime () уже требуется несколько секунд, но если я хочу использовать даты EXIF, это еще медленнее.

Вот функции, которые я использую сейчас, как вы думаете, я мог бы ускорить процесс?

  1. Прочитайте файлы в каталоге и попробуйте извлечь дату EXIF ​​из файла, иначе прочитайте filetime ():
`function list_images ($ path)
{
$ images = array ();
foreach (scandir ($ path) как $ node)
{
$ nodePath = $ path. DIRECTORY_SEPARATOR. $ Узел;
if (is_dir ($ nodePath) ИЛИ! preg_match ("£ .jpg | .png | .bmp | .gif £", $ node)) продолжаются;
if (preg_match ('£ .jpg £ i', $ node) И exif ($ nodePath, array ('date')) ['date']! = '')
{
$ images [$ node] = strtotime (exif ($ nodePath, array ('date')) ['date']);
}
еще
{
$ images [$ node] = filemtime ($ nodePath);
}

}
arsort ($ изображения);
вернуть $ изображения;
} `
  1. универсальная (большая) функция exif:
  `функция exif ($ imagePath, $ exif = '')
{
if ($ exif === '') $ exif [] = 'All';
if ((isset ($ imagePath)) и (file_exists ($ imagePath)))
{
// Есть 2 массива, которые содержат информацию, к которой мы стремимся, поэтому проще указать их оба
$ exif_ifd0 = @read_exif_data ($ imagePath, 'IFD0', 0);
$ exif_exif = @read_exif_data ($ imagePath, 'EXIF', 0);
// ... (другие группы exif)
$ notFound = "";
$ return = array ();
// ... (другие данные exif)
// Дата
if (in_array ('date', $ exif) ИЛИ in_array ('All', $ exif))
{
if (@array_key_exists ('DateTimeOriginal', $ exif_exif))
{
$ camDate = $ exif_exif ['DateTimeOriginal'];
}
elseif (@array_key_exists ('DateTime', $ exif_ifd0))
{
$ camDate = $ exif_ifd0 ['DateTime'];
}
еще
{
$ camDate = $ notFound;
}
$ return ['date'] = $ camDate;
}
} `

Проблема (и вопрос!) Связана с производительностью чтения EXIF, но, возможно, можно использовать другой процесс, вместо того, чтобы извлекать даты всех изображений в массиве, вычесть результат базы данных из этого массива, а затем отобразить (20 или около того) самых последних?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector