Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Delete all files that contain a given string

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

like image 582
ak85 Avatar asked Aug 16 '13 22:08

ak85


2 Answers

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.

like image 67
leepowers Avatar answered Oct 08 '22 22:10

leepowers


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
like image 35
Shawn Lindstrom Avatar answered Oct 09 '22 00:10

Shawn Lindstrom