我正在寻找一个循环文件夹的脚本并删除其中的所有文件,但是最后一个,最近的一个(我已将每个文件的名称标记为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]);
}
}
上面的内容删除了除最后五个之外的任何内容。这是一个很好的方法吗?或者是否有其他方式,更简单或更好?
答案 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);
}
}