2009-06-19 24 views
6

Đoạn mã dưới đây là một phần của hàm để lấy 5 tệp hình ảnh từ một thư mục nhất định.Làm thế nào để có được các tập tin mới nhất X từ một thư mục trong PHP?

Hiện tại, readdir trả về hình ảnh 'theo thứ tự mà chúng được lưu trữ bởi hệ thống tệp' theo spec.

Câu hỏi của tôi là, làm thế nào tôi có thể sửa đổi nó để có được 5 hình ảnh mới nhất? Hoặc dựa trên ngày last_modified hoặc tên tệp (trông giống như 0000009-16-5-2009.png, 0000012-17-5-2009.png, v.v.).

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); 
} 

Trả lời

13

Nếu bạn muốn làm điều này hoàn toàn trong PHP, bạn phải tìm tất cả các file và thời gian sửa đổi cuối cùng của họ:

$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

Nếu bạn đang thực sự chỉ quan tâm đến hình ảnh bạn có thể sử dụng glob() thay vì soulmerge's 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

Hoặc bạn có thể tạo chức năng cho 5 tệp mới nhất trong thư mục được chỉ định.

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 sử dụng khung CI. chúc mừng!

Các vấn đề liên quan