2009-06-19 11 views
6

El siguiente código es parte de una función para capturar 5 archivos de imagen de un directorio determinado.¿Cómo obtener los archivos X más nuevos de un directorio en PHP?

Por el momento readdir devuelve las imágenes 'en el orden en que las almacena el sistema de archivos' según el spec.

Mi pregunta es, ¿cómo puedo modificarla para obtener las últimas 5 imágenes? Ya sea basado en la fecha last_modified o el nombre del archivo (que se parece a 0000009-16-5-2009.png, 0000012-17-5-2009.png, etc.).

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

Respuesta

13

Si quieres hacer esto enteramente en PHP, debe encontrar todos los archivos y sus últimos tiempos de modificación:

$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

Si está realmente interesado sólo en imágenes que podrían utilizar glob() en lugar de Escandir de 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

O puede crear la función para los últimos 5 archivos en la carpeta especificada.

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 usando el marco CI. ¡aclamaciones!

Cuestiones relacionadas