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

时间:2013-08-16 22:31:33

标签: php regex caching unlink

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

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

我有一个名为id = 1.html

的缓存文件夹中的文件
female/cache/id=1.html

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

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

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

这样可以正常工作,有时我的网址中还有其他参数。所以目前我的缓存文件夹中有以下文件

    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

删除此文件夹中的任何文件

2 个答案:

答案 0 :(得分:17)

您可以使用glob

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

星号*匹配文件名的所有变体。

答案 1 :(得分:4)

作为替代方案,您可以使用array_map()

使操作更简洁
<?php
array_map('unlink', glob('female/cache/id=1*.html'));
?>

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

请注意,array_map可能比foreach循环慢: Performance of foreach, array_map with lambda and array_map with static function

然而,在PHP 7.x中可能不再是这种情况。我对7.04接受的答案基准的结果是:

  • Foreach:0.096698999404907 //接受回答的方法
  • MapClosure:0.10490107536316
  • MapNamed:0.073607206344604 //我的替代