删除文件夹中的所有文件,但最后一个?

时间:2012-02-02 13:28:13

标签: php file directory delete-file

我正在寻找一个循环文件​​夹的脚本并删除其中的所有文件,但是最后一个,最近的一个(我已将每个文件的名称标记为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]);
    }
}

上面的内容删除了除最后五个之外的任何内容。这是一个很好的方法吗?或者是否有其他方式,更简单或更好?

3 个答案:

答案 0 :(得分:2)

有效。我不相信有更简单的方法。此外,您的解决方案实际上非常简单。

答案 1 :(得分:1)

我认为这是一个很好的解决方案。只需修改循环

但你可以避免在下降模式下循环排序数组,这样你就可以删除所有其余的数组,只保存第一个文件  编辑 排序从最新到

答案 2 :(得分:0)

我知道这已经过时但你也可以这样做

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