查找最新文件';PHP中的名称和修改时间
我使用查找最新文件';PHP中的名称和修改时间,php,glob,filemtime,Php,Glob,Filemtime,我使用glob功能搜索一个控制器,并获得匹配的文件列表。然后通过检查文件的filemtime,我创建了一个映射。然后根据文件日期对地图进行排序。最后我得到了最新的文件名和修改时间。我的代码是这样的。它对小目录很有效,但对大目录很慢。我想知道是否有更快/更聪明的方法 $fileList = array(); // $id = is the argument of this function $files = glob('myfolder'.DS.'someone'.$id.'*.txt'); if
glob
功能搜索一个控制器,并获得匹配的文件列表。然后通过检查文件的filemtime
,我创建了一个映射。然后根据文件日期对地图进行排序。最后我得到了最新的文件名和修改时间。我的代码是这样的。它对小目录很有效,但对大目录很慢。我想知道是否有更快/更聪明的方法
$fileList = array();
// $id = is the argument of this function
$files = glob('myfolder'.DS.'someone'.$id.'*.txt');
if (empty($files)) {
return 0;
}
foreach ($files as $file) {
$fileList[filemtime($file)] = $file;
}
if (sizeof($files) > 1) {
ksort($fileList);
}
$latestFilename = end($fileList);
$fileLastModifDate = filemtime( $latestFilename );
我怀疑你的“映射”实际上是在创建一个哈希表,然后排序并不像人们期望的那样有效,我会尝试以下方法:(这是基本的,你可以想象一下)
//或
//如果你只需要这样的排列,这可能会更好
function file_object_compare ($a,$b)
{
if (filetime($a)> filetime($b)) return -1;
// etc... i.e 0 eual 1 otherwise
}
usort ($files,"file_object_compare");
这个问题()给出了各种可能性(特别是第一条评论中的链接,其中有一些非常聪明的想法)。您可能需要自己对每个文件进行基准测试,以确定哪一个最快。您是否只需要知道最后修改的是哪个文件?如果是,则不需要构建列表并对其进行排序。可能重复:
function file_object_compare ($a,$b)
{
if (filetime($a)> filetime($b)) return -1;
// etc... i.e 0 eual 1 otherwise
}
usort ($files,"file_object_compare");