删除具有相同前缀的文件

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

上面的代码无法正常工作,但我发现下面类似的代码可以正常运行

unlink('*.jpg');

为什么?我纳闷这个会不会起作用?

unlink('*.*');

如何删除以相同字符串开头的文件?就像这样

same123.jpg
sametoo.png
samexxx.gif

它们都以字符串 "same" 开始,但以不同的扩展名结尾,如何做到这一点?

我已经有了一种简单的方法来完成此操作,但我想知道是否存在更好的解决方案?

2个回答

67

试试这段代码:

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

p.s. glob() 需要 PHP 4.3.0 或更高版本。


嗨,Shivan,你能为我澄清一下吗?这是否意味着问题在于unlink()接受文件_名称_而不是文件_模式_(因此需要使用glob()基于_模式_查找所有文件_名称_)?这都很有道理,但如果模式不被unlink()接受,那么为什么OP的unlink('*.jpg');示例可以正常工作呢? - Sepster
1
glob()将根据$mask列出所有文件名。通过array_map()unlink函数将为glob()列出的每个文件名加载一次。 - Raptor

32

你可以使用glob来实现这个功能。类似于这样(没有测试过):

foreach (glob("something_prefix*.*") as $filename) {
    unlink($filename);
}

我认为这种写法比@ShivanRaptor建议的array_map模式更易读(而且我不喜欢在命令式函数中使用函数式的array_map)。 - Sepster
1
@catiel,Shivan Raptor的答案更短。 - sectus
@sectus 短不一定好 :-) - Sepster
@Sepster,在这种情况下,这是主观意见:^)我喜欢回调。 - sectus
1
@sectus 我完全同意主观看法,而且我非常喜欢回调函数;-) (虽然 PHP 回调函数有点让我困扰,因为可调用的函数被传递为字面字符串,因此很容易出现运行时错误)。 - Sepster
1
我更喜欢这个。因为你可以在循环中做很多事情。 - mubashermubi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接