我想列出并按日期排序目录中的图片(然后与数据库进行比较并显示不在数据库中的图片)。
我有几千个,并且已经花了几秒钟来读取filetime()日期,但如果我想使用EXIF日期,它甚至会更慢。
以下是我现在使用的功能,您认为我可以加快这个过程吗?
`function list_images ($path) { $images = array(); foreach (scandir($path) as $node) { $nodePath = $path . DIRECTORY_SEPARATOR . $node; if (is_dir($nodePath) OR !preg_match("£.jpg|.png|.bmp|.gif£", $node)) continue; if (preg_match('£.jpg£i', $node) AND exif($nodePath, array('date'))['date'] != '') { $images[$node] = strtotime(exif($nodePath, array('date'))['date']); } else { $images[$node] = filemtime($nodePath); } } arsort($images); return $images; }`
`function exif($imagePath, $exif = '') { if ($exif === '') $exif[] = 'All'; if ((isset($imagePath)) and (file_exists($imagePath))) { // There are 2 arrays which contains the information we are after, so it's easier to state them both $exif_ifd0 = @read_exif_data($imagePath ,'IFD0' ,0); $exif_exif = @read_exif_data($imagePath ,'EXIF' ,0); // ... (other exif groups) $notFound = ""; $return = array(); // ... (other exif data) // Date if (in_array('date', $exif) OR 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']; } else { $camDate = $notFound; } $return['date'] = $camDate; } }`
问题(和问题!)是关于EXIF读取性能的,但也许可以使用另一个进程,而不是检索数组中的所有图像日期,从该数组中减去数据库结果,然后显示(20左右)最近的?