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

9
我正在编写一个PHP脚本,在其中我想使用通配符(*)从给定的文件夹中删除一些文件。
我找到了一些有效的示例,例如这个,其中使用了unlink()glob()函数。
现在,我在想,是否也可以使用exec函数和像rm -f /path/to/folder/_prefix_*这样的命令来删除文件呢?
使用这种方式是否存在任何安全风险?
如果可以,那么从性能方面来看,是否更好?
编辑:
所以,从第一个答案中可以看出,使用exec可以是可接受的解决方案。
那么性能问题呢?有没有可能exec选项比glob/unlink技术更好(更快/更少资源)?
提前感谢您。

1
rm 是可以的,安全问题取决于谁可以运行脚本。 - user557846
2个回答

15

由于没有机会注入用户提供的数据,因此在使用 exec 而非 glob/unlink 时不存在安全问题。然而,使用 glob/unlink 可以让你定义异常情况:

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

exec 常常在共享服务器上被禁用,因此 glob/unlink 更具可移植性。如果你有专用的服务器并且不打算放弃它,那么你就不需要担心这个问题。


感谢您的回复,Kolink。我正在使用自己的服务器,并且exec已启用并正常工作。您认为使用一种技术而不是另一种技术会对性能产生影响吗? - CdB
我想exec速度更快,但是glob/unlink让脚本始终知道正在进行的工作 - 对于控制台应用程序比Web应用程序更有用,但您还可以为每个文件获取错误报告或列出删除的文件... - Niet the Dark Absol

2

两种选项都可以。然而,如果您没有控制自己的服务器或者使用共享主机,则可能无法使用exec命令。

为了保险起见,使用glob和unlink。


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