6

I have a basic cache system setup which saves a file based on the parameters in the url so that if that page gets viewed again it accesses the static file. eg if my url is

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

I have a file located in a cache folder called id=1.html

female/cache/id=1.html

currently this is cached for a specified amount of time however I want it to always use the cached file unless the page is updated.

So I implemented the below php code.

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

this works fine however, some times there are additional parameters in my url. So currently I have the below files in my cache folder

    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

But when I save my content only female/cache/id=1.html is removed.

How would I go about removing any file in this folder with the id=1

ak85
  • 3,920
  • 16
  • 61
  • 110
  • Please don't use short open tags ` ?>` because it's a **pain** if you moved to an environment where it's disabled by default. – HamZa Aug 16 '13 at 22:43
  • @HamZa thanks for the tip I hadn't thought about it to much but looking at my code here it is all using – ak85 Aug 16 '13 at 22:47

2 Answers2

22

You could use glob:

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

Where the asterisk * matches all the variations of the filename.

leepowers
  • 36,760
  • 23
  • 97
  • 128
5

As an alternative, you can make the operation more concise using array_map():

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

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

Be aware that array_map may be slower than a foreach loop: Performance of foreach, array_map with lambda and array_map with static function

However, this may no longer be the case under PHP 7.x. My results for the accepted answer's benchmark on 7.04:

  • Foreach: 0.096698999404907 // accepted answer's method
  • MapClosure: 0.10490107536316
  • MapNamed: 0.073607206344604 // my alternative
Community
  • 1
  • 1
Shawn Lindstrom
  • 439
  • 11
  • 13