Я пытаюсь отсортировать массив файлов изображений по EXIF DateTime Original, заменяя оригинальный код, используемый для сортировки изображений по mtime, используя stat ().
Исходный код, используемый для сортировки файлов изображенийпо mtime выглядит следующим образом:
// display photos in album
$src_folder = $mainFolder.'/'.$_REQUEST['album'];
$src_files = array_diff(scandir($src_folder ), array('..', '.'));
$files = array();
/*** sort by most recent uploaded file ***/
foreach ($src_files as $key=>$img) {
$stat_folders = stat($src_folder .'/'. $img);
$file_time[$key] = $stat_folders['ctime'];
}
array_multisort($file_time, SORT_DESC, $src_files);
/*** end sort ***/
Я протестировал следующий код, который выполняет сортировку массива по мере необходимости:
function getExifDate($filename)
{
$exif_odate = exif_read_data($filename, 0, true);
if($exif_odate === false){
return filemtime($filename);
}
if(isset($exif_odate['EXIF']['DateTimeOriginal'])){
return strtotime($exif_odate['EXIF']['DateTimeOriginal']);
} else {
return filemtime($filename);
}
}
$src_folder = 'folder/';
$src_files = glob($src_folder . '*.jpg');
array_multisort(array_map('getExifDate', $src_files), SORT_NUMERIC, SORT_DESC, $src_files);
Однако, когда я пытаюсь интегрировать новыйметод сортировки с использованием следующего кода:
// display photos in album
$src_folder = $mainFolder.'/'.$_REQUEST['album'];
$src_files = array_diff(scandir($src_folder ), array('..', '.'));
$files = array();
/*** sort files by date photo taken ***/
function getExifDate(){
global $src_folder, $src_files;
$src_images = array();
foreach ($src_files as $img){
$exif_odate = exif_read_data($img, 0, true);
// $exif_odate = exif_read_data($src_folder . $img, "FILE,COMPUTED,ANY_TAG,IFD0,THUMBNAIL,COMMENT,EXIF", true); <-- doesn't work either!
$src_date = strtotime($exif_odate['EXIF']['DateTimeOriginal']);
$src_images[$img] = $src_date;
}
}
array_multisort(array_map('getExifDate', $src_files), SORT_NUMERIC, SORT_DESC, $src_files);
/*** end sort ***/
Когда страница загружена, для каждого из файлов изображений, которые пытались прочитать, генерируется следующее сообщение об ошибке:
Предупреждение: exif_read_data ():Невозможно открыть файл в ...
, ссылаясь на следующую строку кода:
$exif_odate = exif_read_data($img, 0, true);
Изменение этой строки кода на следующее не имеет значения:
$exif_odate = exif_read_data($src_folder . $img, "FILE,COMPUTED,ANY_TAG,IFD0,THUMBNAIL,COMMENT,EXIF", true);
... и миниатюры изображений отображаются несортированными ... неизбежно.
Будем признательны за любые рекомендации относительно решения этой проблемы.