Я хочу перечислить и упорядочить по дате изображения в каталоге (чтобы потом сравнить с базой данных и отобразить те, которых нет в БД).
У меня их несколько тысяч, и для считывания даты filetime () уже требуется несколько секунд, но если я хочу использовать даты EXIF, это еще медленнее.
Вот функции, которые я использую сейчас, как вы думаете, я мог бы ускорить процесс?
`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 ($ изображения); вернуть $ изображения; } `
`функция 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 или около того) самых последних?
Задача ещё не решена.
Других решений пока нет …