Сейчас занимаюсь подготовкой к реализации автоматического бекапа на 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).