Удалить все файлы внутри папки, но последние?

Я ищу сценарий, чтобы перебирать папку и удалять все файлы внутри нее, но последние, самые последние (я обозначил имя каждого файла как filename_date('Y')_date('m')_date('d').extension) , не уверены, если это необходимо).

Я нашел этот скрипт здесь в стеке:

 if ($handle = opendir('/path/to/your/folder')) { $files = array(); while (false !== ($file = readdir($handle))) { if (!is_dir($file)) { // You'll want to check the return value here rather than just blindly adding to the array $files[$file] = filemtime($file); } } // Now sort by timestamp (just an integer) from oldest to newest asort($files, SORT_NUMERIC); // Loop over all but the 5 newest files and delete them // Only need the array keys (filenames) since we don't care about timestamps now as the array will be in order $files = array_keys($files); for ($i = 0; $i < (count($files) - 5); $i++) { // You'll probably want to check the return value of this too unlink($files[$i]); } } 

Это выше удаляет все, кроме последних пяти. Это хороший способ сделать это? Или есть другой способ, более простой или лучший?

Related of "Удалить все файлы внутри папки, но последние?"

Это работает. Я не верю, что есть более простой способ сделать это. Кроме того, ваше решение на самом деле довольно простое.

я думаю, это хорошее решение. просто измените цикл

но вы могли бы избежать для сортировки массива циклов в режиме спуска, чтобы вы могли удалить все остальные массивы, сохраняя только первый файл EDIT sort от самого нового до более старого

Я знаю, что это старо, но вы тоже можете это сделать

 $directory = array_diff(scandir(pathere), array('..', '.')); $files = []; foreach ($directory as $key => $file) { $file = pathere.$file; if (file_exists($file)) { $name = end(explode('/', $file)); $timestamp = preg_replace('/[^0-9]/', '', $name); $files[$timestamp] = $file; } } // unset last file unset( $files[max(array_keys($files))] ); // delete old files foreach ($files as $key => $dfiles) { if (file_exists($dfiles)) { unlink($dfiles); } }