Php. Как вывести список файлов, упорядоченный по дате?


Сейчас занимаюсь подготовкой к реализации автоматического бекапа на Amazon S3 (об этом скоро будет цикл статей) и стала задача мониторить файлы в определенной папке. Причем не просто мониторить, а определять, какой из них является последним добавленным.

Стало быть нужно получить список файлов, с сортировкой по дате добавления. Функция scandir(), к сожалению, решает только проблему получения списка файлов — т.к. она сортирует вывод по имени.

Решение было найдено в интернете и немного «стилизировано» под себя.

function listdir_by_date($path){
        $dir = opendir($path);
        $list = array();
        while($file = readdir($dir)){
            if ($file != '.' && $file != '..' && $file[strlen($file)-1] != '~' ){
                $ctime = filectime( $path . $file ) . ',' . $file;
                $list[$ctime] = $file;
            }
        }
        closedir($dir);
        krsort($list); // используя методы krsort и ksort можем влиять на порядок сортировки
        return $list;
    }

Скормив на входе путь к папке, на выходе мы получим список файлов в ассоциативном массиве. Ключ этого массива — таймштамп изменения файла и само название файла (это сделано для исключения возможности наложения файлов), а значение — название файла.

Таким образом в нулевой позиции результирующего массива Вы получите самый новый или самый старый файл (в зависимости от использования krsort и ksort).

,

Добавить комментарий

Ваш адрес email не будет опубликован.