我正在编写一个php脚本,我想使用通配符(*)从给定文件夹中删除一些文件。
我找到了一些像this one这样的工作示例,其中使用了unlink()
和glob()
函数。
现在,我想知道,使用exec
功能和rm -f /path/to/folder/_prefix_*
之类的命令删除文件是否也可以?
是否存在使用此安全风险?
如果没问题,在性能方面会更好吗?
编辑:
所以,从第一个答案我可以看到,确实,使用exec
可能是一个可接受的解决方案
性能问题怎么样? exec
选项是否有可能比glob/unlink
技术更好(更快/更低要求)?
提前谢谢
答案 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。