PHP删除包含给定字符串的所有文件


PHP Delete all files that contain a given string

我有一个基本的缓存系统设置,它根据url中的参数保存一个文件,这样,如果再次查看该页面,它就会访问静态文件。例如,如果我的网址是

http://www.example.com/female/?id=1

我有一个文件位于一个名为id=1.html 的缓存文件夹中

female/cache/id=1.html

目前,它被缓存了一段指定的时间,但我希望它始终使用缓存的文件,除非页面更新。

所以我实现了下面的php代码。

    <?
        unlink('../' . $gender . '/cache/id=' . $_POST['id'] . '.html');
    ?>

这很好用,但是有时在我的url中会有额外的参数。所以目前我在我的缓存文件夹中有以下文件

    female/cache/id=1.html
    female/cache/id=1&type=2.html
    female/cache/id=1&type=3.html
    female/cache/id=1&type=3&extra=4.html

但当我保存我的内容时,只有female/cache/id=1.html会被删除。

我该如何删除这个文件夹中id=1 的任何文件

您可以使用glob:

<?php
foreach (glob("female/cache/id=1*.html") as $filename) {
    unlink($filename);
}
?>

其中星号*与文件名的所有变体相匹配。

作为一种替代方案,您可以使用array_map():使操作更加简洁

<?php
array_map('unlink', glob('female/cache/id=1*.html'));
?>

http://php.net/manual/en/function.array-map.php

请注意,array_map可能比foreach循环慢:foreach、带lambda的array_map和带静态函数的array.map的性能

然而,在PHP7.x下可能不再是这种情况。我在7.04:上对已接受答案的基准测试的结果

  • Foreach:009669899404907//接受答案的方法
  • 地图闭合:0.10490107536316
  • MapNamed:0.073607206344604//我的备选方案