Как получить X новейших файлов из каталога в PHP? - PullRequest
6 голосов
/ 19 июня 2009

Приведенный ниже код является частью функции для получения 5 файлов изображений из заданного каталога.

В данный момент 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);
}

Ответы [ 3 ]

13 голосов
/ 19 июня 2009

Если вы хотите сделать это полностью на 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 голосов
/ 21 июня 2012

Если вас действительно интересуют только картинки, вы можете использовать glob () вместо scandir 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 голос
/ 23 августа 2013

Или вы можете создать функцию для последних 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;  
}

Кстати, я использую CI Framework. ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...