2009-06-19 5 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さんのスキャンダル:

$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 imはCIフレームワークを使用しています。乾杯!

関連する問題