2009-06-19 81 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框架。乾杯!

相關問題