PHP 中的 system()、exec() 和 shell_exec() 有啥区别?

Posted

技术标签:

【中文标题】PHP 中的 system()、exec() 和 shell_exec() 有啥区别?【英文标题】:What are the differences of system(), exec() and shell_exec() in PHP?PHP 中的 system()、exec() 和 shell_exec() 有什么区别? 【发布时间】:2012-06-05 10:06:54 【问题描述】:

可以通过三个php函数来运行外部命令

system();
exec();
shell_exec();

但是它们有什么区别呢?尽管它们有特定的应用,但在大多数情况下,它们都可以同样使用。我很想知道当它们可以同等使用时哪个是首选。例如,对于解压缩文件或压缩文件夹(使用 tar 命令),哪个是首选(可能从性能角度来看)?

更新: 在另一个问题中,我发现了一个非常有用的 link 描述了这些功能的不同方面。我在这里分享链接,因为其他人可能会使用它来更好地了解安全问题和其他方面。

【问题讨论】:

不要吹毛求疵,但是手册对各自的功能是怎么说的? 另外,你忘了 passthru () :) @GordonM 我阅读了手册,但我不了解每个功能的偏好。在许多情况下,它们可以同等使用。我想要一个实用的观点。 ***.com/questions/732832/…的可能重复 @periklis 你是对的,这个问题解决了同样的问题,但我找不到它。一个答案有一个非常有用的链接,用于详细解释。谢谢! 【参考方案1】:

exec — 执行外部程序

system — 执行外部程序并显示输出

shell_exec — 通过 shell 执行命令并将完整的输出作为字符串返回

所以如果你不需要输出,我会选择 exec。

更多细节:

http://php.net/manual/en/function.exec.php http://php.net/manual/en/function.system.php http://php.net/shell_exec

【讨论】:

exec() 返回输出的最后一行,所以如果你正在调用一个简单的程序,它只输出一个像whoamipwd 这样的值,exec() 是完美的。跨度>

以上是关于PHP 中的 system()、exec() 和 shell_exec() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

system 和 shell_exec 的区别

PHP在Linux下Apache环境中执行exec,system,passthru等服务器命令函数

PHP执行系统外部命令函数:exec()passthru()system()shell_exec()

PHP 执行系统外部命令 system() exec() passthru()

php执行外部命令函数:exec()passthru()system()shell_exec()对比

PHP 执行系统外部命令的方法 system() exec()