删除所有使用其扩展名的文件



Hi我创建了一个使用扩展名删除所有文件的方法。

这是代码

function RemoveAllFiles($extensions)
{
   foreach($extensions as $extension)
   {
       $files = glob("*.".$extension."");
      foreach($files as $file)
      {
         unlink($file);
      }
    }
 }

我像这个一样打电话

$commonObj =  new CommonUtility();
$extesions = array("zip","xlsx");
$commonObj->RemoveAllFiles($extesions);

如果有两个文件都存在,它工作得很好,否则我会得到这个错误

 Warning: Invalid argument supplied for foreach() in CommonUtilities.class.php on line 356

任何帮助都将不胜感激。

glob可以在出错时返回false;此值不是foreach的有效主题,将导致您提到的警告。

此外,glob也可能返回false,即使当它与任何文件都不匹配时一切都很好:

注:

在某些系统中,无法区分空匹配以及一个错误。

为了保护自己,只需使用过滤掉false值的条件来保护foreach,例如:

 $files = glob("*.".$extension."");
 if (!$files) {
     continue; // do nothing if error or no files match
 }
 foreach($files as $file)
 {
     unlink($file);
 }

虽然答案类似:

function removeAllFiles(array $extensions) {
    foreach(array_filter($extensions) as $extension) {
        $files = glob("*.{$extension}");
        if (is_array($files) {
            foreach($files as $file) {
                unlink($file);
            }
        }
    }
}    

参数上array的类型提示将第一个foreach与同一问题隔离开来。同样地,is_array($files)使第二个绝缘。count($files)不是必需的,因为给定一个空数组,第二个foreach块将被跳过。

array_filter($extensions)将删除"伪"值,包括falsenull"",这可能是为了防止"*."被传递到glob。不过,您可能想省略这一点,,因为我记不起"0"是否会被过滤快速测试显示"0"将被过滤,还有"false"),这将过滤掉"*.0"作为掩码-这是一个完全有效的扩展。

removeAllFiles(["foo"]);                // no problem
removeAllFiles(["foo", "bar"]);         // also no problem
removeAllFiles("foo");                  // problem! has to be an array
removeAllFiles([false, null, ""]);      // no problem, but no action; filtered
removeAllFiles([false, null, "foo"]);   // no problem, only "foo"

尝试以下代码

function RemoveAllFiles($extensions)
{
    foreach($extensions as $extension)
    {
        $files = glob("*.".$extension."");
        usort($files, function($a, $b) { return filemtime($a) - filemtime($b); });
        array_pop($files);
        array_map('unlink', $files);
    }
}
$commonObj =  new CommonUtility();
$extesions = array("zip","xlsx");
$commonObj->RemoveAllFiles($extesions);
if(is_array($files)){
      foreach($files as $file)
      {
         unlink($file);
      }
}

它检查$files是否为数组,否则不执行每个

相关内容

  • 没有找到相关文章

最新更新