使用通配符删除文件 - exec vs unlink

时间:2012-09-03 21:48:26

标签: php exec unlink

我正在编写一个php脚本,我想使用通配符(*)从给定文件夹中删除一些文件。
我找到了一些像this one这样的工作示例,其中使用了unlink()glob()函数。

现在,我想知道,使用exec功能和rm -f /path/to/folder/_prefix_*之类的命令删除文件是否也可以? 是否存在使用此安全风险?
如果没问题,在性能方面会更好吗?

编辑:
所以,从第一个答案我可以看到,确实,使用exec可能是一个可接受的解决方案 性能问题怎么样? exec选项是否有可能比glob/unlink技术更好(更快/更低要求)?

提前谢谢

2 个答案:

答案 0 :(得分:12)

由于没有机会注入用户提供的数据,因此使用exec而不是glob/unlink时没有任何安全问题。但是,使用glob/unlink可以定义例外:

foreach(glob("delete/*") as $f) {
    if( $f == "delete/notme.txt") continue;
    unlink($f);
}

exec通常在共享服务器上禁用,因此glob/unlink更具可移植性。如果您有专门的设置并且不打算放弃它,则无需担心。

答案 1 :(得分:2)

两种选择都可以。但是,如果您不控制自己的服务器或在共享主机上,则exec命令无法使用。

要保存,请使用glob和unlink。