31
$prefix = 'something_prefix';
unlink($prefix.'.*');

the code above is not working, but I see some code like this below works just fine

unlink('*.jpg');

why? I am wonder is this going to work?

unlink('*.*');

how to delete the files which they begin with the same string? like this

same123.jpg
sametoo.png
samexxx.gif

they all begins with the string "same" but ends with different extension, how to do this?

I alread have a cheap way to do this, but I wonder if there is any better solution?

castiel
  • 2,675
  • 5
  • 29
  • 38

2 Answers2

67

Try this code:

$mask = 'your_prefix_*.*';
array_map('unlink', glob($mask));

p.s. glob() requires PHP 4.3.0+

Raptor
  • 53,206
  • 45
  • 230
  • 366
  • Hi Shivan, can you please clarify this for me? Does this mean the problem is that `unlink()` accepts a file _name_, rather than a file _pattern_ (and hence `glob()` is required to find all file _names_ based on a _pattern_)? That all makes sense, but then why did the OP's `unlink('*.jpg');` example work OK if patterns are not acceptable to `unlink()`? – Sepster Mar 20 '13 at 01:08
  • 1
    `glob()` will list out all filenames based on the `$mask`. By `array_map()`, the `unlink` function will load once for each filenames listed by `glob()`. – Raptor Mar 20 '13 at 03:13
31

You can use glob for this. Something like this(didn't test it):

foreach (glob("something_prefix*.*") as $filename) {
    unlink($filename);
}
sectus
  • 15,605
  • 5
  • 55
  • 97