【问题标题】:PHP Delete all files that contain a given stringPHP 删除所有包含给定字符串的文件
【发布时间】:2013-08-19 10:28:56
【问题描述】:

我有一个基本的缓存系统设置,它根据 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 的任何文件

【问题讨论】:

  • 请不要使用简短的开放标签&lt;? ?&gt;,因为如果您移动到默认禁用它的环境,这是一种痛苦
  • @HamZa 感谢您提供的提示,我并没有考虑太多,但是在这里查看我的代码,它都在使用

标签: php regex caching unlink


【解决方案1】:

你可以使用glob:

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

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

【讨论】:

    【解决方案2】:

    作为替代方案,您可以使用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 // 接受答案的方法
    • 地图关闭:0.10490107536316
    • MapNamed: 0.073607206344604 // 我的替代方案

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      • 2012-07-02
      • 2021-07-11
      • 2018-06-28
      相关资源
      最近更新 更多