PHP exif_read_data(): 无法打开文件查询
PHP exif_read_data(): Unable to Open File Query
我正在尝试通过 EXIF DateTime Original 对一组图像文件进行排序,替换用于使用 stat() 按 mtime 对图像进行排序的原始代码。
按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);
...并且图像缩略图显示未排序...不可避免。
任何有关如何解决此问题的指导将不胜感激。
感谢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 ***/
解决了排序问题。 :)
我正在尝试通过 EXIF DateTime Original 对一组图像文件进行排序,替换用于使用 stat() 按 mtime 对图像进行排序的原始代码。
按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);
...并且图像缩略图显示未排序...不可避免。
任何有关如何解决此问题的指导将不胜感激。
感谢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 ***/
解决了排序问题。 :)