2009-06-19 127 views
6

以下代码是从给定目录抓取5个图像文件的功能的一部分。如何从PHP中的目录中获取X最新文件?

目前,readdir根据spec按照文件系统存储的顺序返回图像。

我的问题是,我如何修改它以获得最新的5张图片?要么基于last_modified日期或文件名(看起来像0000009-16-5-2009.png,0000012-17-5-2009.png等)。

if ($handle = opendir($absolute_dir)) 
{ 
    $i = 0; 
    $image_array = array(); 

    while (count($image_array) < 5 && (($file = readdir($handle)) !== false)) 
    { 
     if ($file != "." && $file != ".." && $file != ".svn" && $file != 'img') 
     { 
      $image_array[$i]['url'] = $relative_dir . $file; 
      $image_array[$i]['last_modified'] = date ("F d Y H:i:s", filemtime($absolute_dir . '/' . $file)); 
     } 

     $i++; 
    } 
    closedir($handle); 
} 

回答

13

如果你想这样做,完全是在PHP中,你必须找到所有的文件和他们的最后修改时间:

$images = array(); 
foreach (scandir($folder) as $node) { 
    $nodePath = $folder . DIRECTORY_SEPARATOR . $node; 
    if (is_dir($nodePath)) continue; 
    $images[$nodePath] = filemtime($nodePath); 
} 
arsort($images); 
$newest = array_slice($images, 0, 5); 
2

如果你真的只在图片感兴趣,您可以使用glob()代替soulmerge的scandir:

$images = array(); 
foreach (glob("*.{png,jpg,jpeg}", GLOB_BRACE) as $filename) { 
    $images[$filename] = filemtime($filename); 
} 
arsort($images); 
$newest = array_slice($images, 0, 5); 
1

或者您可以为指定文件夹中的最新5个文件创建函数。

private function getlatestfivefiles() { 
    $files = array(); 
    foreach (glob("application/reports/*.*", GLOB_BRACE) as $filename) { 
     $files[$filename] = filemtime($filename); 
    } 
    arsort($files); 

    $newest = array_slice($files, 0, 5); 
    return $newest; 
} 

btw即时通讯使用CI框架。干杯!