在 PHP 中删除超过 2 天的所有文件的正确方法

2022-08-30 09:17:04

只是好奇

        $files = glob(cacheme_directory()."*");
        foreach($files as $file)
        {
            $filemtime=filemtime ($file);
            if (time()-$filemtime>= 172800)
            {
                unlink($file);
            }
        }

我只想确保代码是否正确。谢谢。


答案 1

您应该添加一个is_file() 检查,因为 PHP 通常列出 ...,以及可能驻留在您正在检查的目录中的子目录。

此外,正如这个答案所暗示的那样,您应该用更具表现力的符号替换预先计算的秒数。

<?php
  $files = glob(cacheme_directory()."*");
  $now   = time();

  foreach ($files as $file) {
    if (is_file($file)) {
      if ($now - filemtime($file) >= 60 * 60 * 24 * 2) { // 2 days
        unlink($file);
      }
    }
  }
?>

或者,您也可以使用 ,如此答案所示。在这个简单的例子中,它并没有真正提供任何优势,但它将是OOP方式。DirectoryIterator


答案 2

最简单的方法是使用 DirectoryIterator

<?php
if (file_exists($folderName)) {
    foreach (new DirectoryIterator($folderName) as $fileInfo) {
        if ($fileInfo->isDot()) {
        continue;
        }
        if ($fileInfo->isFile() && time() - $fileInfo->getCTime() >= 2*24*60*60) {
            unlink($fileInfo->getRealPath());
        }
    }
}
?>

推荐