PHP exif_read_data(): невозможно открыть запрос файла

Я пытаюсь отсортировать массив файлов изображений с помощью 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);

... и миниатюры изображений отображаются несортированными ... неизбежно.

Любое руководство относительно того, как решить эту проблему, будет оценено по достоинству.

Действительно ли $src_folder имеет косую черту в конце …? В противном случае вам, конечно, нужно было бы вставить это самостоятельно между именем папки и именем файла.

04FS 14.06.2019 11:28

Спасибо за ваше руководство, 04FS. Очень ценю.

ridgedale 14.06.2019 15:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
1 421
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо 04FS за помощь в решении проблемы:

Просто замените следующий исходный код:

/*** 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 ***/

с участием:

/*** sort files by date photo taken ***/
foreach ($src_files as $key=>$img){       
    $exif_odate = exif_read_data($src_folder . '/' . $img, 0, true);
    $file_time[$key] = strtotime($exif_odate['EXIF']['DateTimeOriginal']);
}
array_multisort($file_time, SORT_NUMERIC, SORT_DESC, $src_files);
/*** end sort ***/

решил проблему с сортировкой. :)

Другие вопросы по теме