4

我需要在 Apache (php5.3) 上运行的 php 脚本中执行一些 tar gzip 操作。

过去,我使用过:

new PharData($archivePath . '.tar');
$p = $p->convertToExecutable(Phar::TAR, Phar::GZ);
$p->startBuffering();

但是在这种情况下,它可能必须处理1GB+ 的文件。所以我担心重载php/apache。

在那种情况下,最好依靠shell_exec&让操作系统承担负载?

4

1 回答 1

2

我同意 Marc B 的观点,我会想到的主要考虑因素是:

部署环境... 使用 Shell 将您绑定到可以运行 shell 命令并且可以访问 tar 的环境。使用 Phar 很好,因为如果安装了扩展,你应该很高兴。使用 shell,您现在也与 linux 绑定,除非您将逻辑也放入 Windows 中。

此外,安全问题...虽然绝对可以从 php 运行 shell 命令而不会引入漏洞,但它现在确实为恶意人员提供了一种运行命令的方法,如果您不小心没有足够好地清理数据。此外,如果你用完了谁知道什么的空间,tar 会死掉,而如果你使用 Phar,你应该从 php 中得到一个合理的错误消息来指示问题,而不仅仅是一个错误的返回码。

shell 的一个优点是,如果您异步运行命令并从 stdout 获取流,则可以监控进度。

无论哪种方式,半打一个,六个其他......

于 2012-12-04T00:55:52.350 回答