PHP exec() vs system() vs passthru()
有什么区别?
每个功能是否有特定情况或原因?如果是,您能举一些这些情况的例子吗?
PHP.net 说它们用于执行外部程序。查看参考资料从我看到的例子中,我没有看到任何明显的区别。
如果我只是简单地运行一个脚本(bash或python),你建议我使用哪个函数?
有什么区别?
每个功能是否有特定情况或原因?如果是,您能举一些这些情况的例子吗?
PHP.net 说它们用于执行外部程序。查看参考资料从我看到的例子中,我没有看到任何明显的区别。
如果我只是简单地运行一个脚本(bash或python),你建议我使用哪个函数?
它们的目的略有不同。
exec()
用于调用系统命令,并可能自己处理输出。system()
用于执行系统命令并立即显示输出 - 大概是文本。passthru()
用于执行您希望原始返回的系统命令 - 大概是二进制的东西。无论如何,我建议您不要使用它们中的任何一个。它们都会生成高度不便携的代码。
摘自 http://php.net/ && Chipmunkninja:
系统() 函数
PHP 中的系统函数采用字符串参数,其中包含要执行的命令以及您希望传递给该命令的任何参数。此函数执行指定的命令,并将任何生成的文本转储到输出流(Web 服务器情况下的 HTTP 输出,或者如果您将 PHP 作为命令行工具运行,则转储到控制台)。如果程序发出文本输出,则此函数的返回是程序的最后一行输出。
exec() 函数
系统功能非常有用且功能强大,但它最大的问题之一是程序产生的所有文本都直接进入输出流。在某些情况下,您可能希望设置生成的文本的格式并以某种不同的方式显示它,或者根本不显示它。
为此,PHP中的exec函数是完全适应的。它不是自动将正在执行的程序生成的所有文本转储到输出流中,而是让您有机会将此文本放在函数的第二个参数中返回的数组中:
shell_exec() 函数
到目前为止,我们执行的大多数程序或多或少都是真正的程序1。但是,Windows和Unix用户操作的环境实际上比这更丰富。Windows 用户可以选择使用 Windows 命令提示符程序 cmd.exe此程序称为命令 shell。
passthru() 函数
PHP提供的一个类似于我们迄今为止看到的函数的迷人函数是passthru函数。与其他函数一样,此函数执行您告诉它的程序。但是,它继续立即将此程序的原始输出发送到PHP当前正在使用的输出流(即Web服务器场景中的HTTP或PHP命令行版本中的shell)。
proc_open() 函数和 popen() 函数
proc_open() 与 popen() 类似,但对程序执行提供了更大程度的控制。cmd 是 shell 要执行的命令。描述符pec 是一个索引数组,其中键表示描述符编号,值表示 PHP 如何将该描述符传递给子进程。管道将设置为文件指针的索引数组,这些数组对应于所创建的任何管道的 PHP 末端。返回值是表示进程的资源;当你完成它时,你应该使用proc_close()来释放它。