使用glob php删除目录中除一个文件类型之外的所有文件类

时间:2012-11-07 14:23:19

标签: php

  

可能重复:
  Does glob() have negation?

我希望删除目录中的所有文件(可以是任意数量的文件扩展名),除了那里的单个index.html。

我正在使用:

$path = "/assets/cache/";

foreach(glob($path ."*.*") as $file) {
    unlink($file);
}

但不能为我的生活怎么说unlink,如果不是.html!

谢谢!

3 个答案:

答案 0 :(得分:4)

在这里试试......

$path = "/assets/cache/";

foreach(glob($path ."*.*") as $file) {
    $pathPart = explode(".",$file);
    $fileEx = $pathPart[count($pathPart)-1];
    if($fileEx != "html" && $fileEx != "htm"){
        unlink($file);
    }
}

答案 1 :(得分:4)

$path = "/assets/cache/";

foreach(glob($path ."*.*") as $file) {
    if(pathinfo($file, PATHINFO_EXTENSION) != 'html') {
        unlink($file);
    }
}

如果你想删除其他html文件(除了“index.html”):

$path = "/assets/cache/";

foreach(glob($path ."*.*") as $file) {
    if(pathinfo($file, PATHINFO_BASENAME) != 'index.html') {
        unlink($file);
    }
}

答案 2 :(得分:1)

php函数glob没有否定,但PHP可以通过array_diff给你两个globs之间的区别:

$all = glob("*.*");
$not = glob("php_errors.log");

var_dump(
    $all, 
    $not, 
    array_diff($all, $not)
);

请参阅演示:http://codepad.org/RBFwPUWm

如果您不想使用数组,我强烈建议您查看PHP目录迭代器。