Php-删除多个文件夹中早于7天的文件

Php-删除多个文件夹中早于7天的文件,php,automation,path,delete-file,Php,Automation,Path,Delete File,我想创建一个PHP脚本,从多个文件夹/路径中删除文件。 我管理了一些东西,但我想将此代码改编为更具体的文件夹 代码如下: <?php function deleteOlderFiles($path,$days) { if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { $filelastmodified = filemtime($path . $file);

我想创建一个PHP脚本,从多个文件夹/路径中删除文件。 我管理了一些东西,但我想将此代码改编为更具体的文件夹

代码如下:

<?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);
?>

谢谢你的帮助

您似乎需要一个递归函数,即调用自身的函数。在这种情况下,它在找到要扫描/遍历的子目录时调用自己

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

“因为它总是使用最后一个$path变量”-当然,因为您在那里多次覆盖同一个变量。如果这已经让你感到“惊讶”,那么你也许应该先从一个初学者教程开始,解释一些基本知识?那就开始吧,没有必要告诉我们你今天在做什么,但我想你很高兴让我们知道你的计划。你可以把你的路径放入一个数组中,然后循环。要么在函数外部循环,要么在循环内部每次调用一条路径,要么将数组传递给函数,然后在函数内部循环。@CBroe我理解并感谢您的帮助。如果不难向我实际展示我如何做到这一点,请你告诉我好吗?不要使用问候语:对于你的帮助@gowrie,我的目标不是在每个子文件夹中搜索。我的计算机中有一些特定的文件夹,我想运行该功能。这就是为什么我想创建一个数组并在其中添加多个路径,然后每次为每个补丁运行该函数。理论上我知道该做什么,但实际上我不知道该怎么做。非常感谢你的帮助@RiggsFolly。它的工作就像一个魅力!
$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);
}