Php - 删除多个文件夹中超过 7 天的文件

Php - Delete files older than 7 days for multiple folders

我想创建一个 PHP 脚本来从多个 folders/paths 中删除文件。 我管理了一些东西,但我想针对更具体的文件夹调整此代码。

这是代码:

<?php
function deleteOlderFiles($path,$days) {
  if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
      $filelastmodified = filemtime($path . $file);
      if((time() - $filelastmodified) > $days*24*3600)
      {
        if(is_file($path . $file)) {
          unlink($path . $file);
        }
      }
    }
    closedir($handle);
  }
}

$path = 'C:/Users/Legion/AppData/Local/Temp';
$days = 7;
deleteOlderFiles($path,$days);
?>

我想为每条路径添加更多路径和此功能到 运行。 我试图添加多个路径位置,但它没有用,因为它总是采用最后一个 $ 路径变量。 例如:

$path = 'C:/Users/Legion/AppData/Local/Temp';
$path = 'C:/Users/Legion/AppData/Local/Temp/bla';
$path = 'C:/Users/Legion/AppData/Local/Temp/blabla';
$path = 'C:/Users/Legion/AppData/Local/Temp/blalbalba';
$days = 7;
deleteOlderFiles($path,$days);

谢谢你的帮助!

看来你需要一个递归函数,即调用自身的函数。在这种情况下,它会在找到 scan/traverse.

的子目录时调用自身
function delete_files($current_path, $days) {
    $files_in_current_path = scandir($current_path);
    foreach($files_in_current_path as $file) {
        if (!in_array($release_file, [".", ".."])) {
            if (is_dir($current_path . "/" . $file)) {
                // Scan found subdirectory
                delete_files($current_path . "/" . $file, $days);
            } else {
                // Here you add your code for checking date and deletion of the $file
               $filelastmodified = filemtime($current_path . "/" . $file);
               if((time() - $filelastmodified) > $days*24*3600) {
                  if(is_file($current_path . "/" . $file)) {
                      unlink($current_path . "/". $file);
                  }
               }
            } 
        }
    }
}
delete_files("your/startpath/here", 7);

此代码从您指定的起始路径开始。它扫描该目录中的所有文件。如果找到子目录,将重新调用 delete_files,但以该子目录作为开始。

简单的解决方案,在设置参数后调用函数,而不是在将所有可能的参数设置为标量变量后调用函数。

$days = 7;

$path = 'C:/Users/Legion/AppData/Local/Temp';
deleteOlderFiles($path,$days);

$path = 'C:/Users/Legion/AppData/Local/Temp/bla';
deleteOlderFiles($path,$days);

$path = 'C:/Users/Legion/AppData/Local/Temp/blabla';
deleteOlderFiles($path,$days);

$path = 'C:/Users/Legion/AppData/Local/Temp/blalbalba';
deleteOlderFiles($path,$days);

或者,将目录放在数组中,然后从 foreach 循环中调用函数。

$paths = [];
$paths[] = 'C:/Users/Legion/AppData/Local/Temp';
$paths[] = 'C:/Users/Legion/AppData/Local/Temp/bla';
$paths[] = 'C:/Users/Legion/AppData/Local/Temp/blabla';
$paths[] = 'C:/Users/Legion/AppData/Local/Temp/blalbalba';

$days = 7;

foreach ( $paths as $path){
    deleteOlderFiles($path,$days);
}