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

时间:2013-02-14 11:15:46

标签: php file

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

这是代码

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

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

glob可能会因错误而返回false;此值不是foreach的有效主题,会引起您提及的警告。

此外,glob也可能会返回false,即使一切都与任何文件都不匹配也没问题:

  

注意:

     

在某些系统上,无法区分空匹配   和一个错误。

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

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

 foreach($files as $file)
 {
     unlink($file);
 }

答案 1 :(得分:1)

虽然它的回答相似:

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)会删除“falsey”值,包括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" ”作为掩码 - 一个完全有效的扩展名。

{{1}}

答案 2 :(得分:0)

尝试以下代码

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

答案 3 :(得分:0)

if(is_array($files)){
      foreach($files as $file)
      {
         unlink($file);
      }
}

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