Kal*_*ium 184
他们的目的略有不同.
exec() 用于调用系统命令,也许是自己处理输出. system() 用于执行系统命令并立即显示输出 - 可能是文本. passthru() 用于执行您希望原始返回的系统命令 - 可能是二进制文件.无论如何,我建议你不要使用它们中的任何一个.它们都产生高度不可移植的代码.
Din*_*ini 124
从绘制 http://php.net/ && Chipmunkninja:
该系统()函数
PHP中的系统函数接受一个带有要执行的命令的字符串参数以及您希望传递给该命令的任何参数.此函数执行指定的命令,并将任何结果文本转储到输出流(Web服务器情况下的HTTP输出,或者如果您将PHP作为命令行工具运行,则控制台).如果它发出文本输出,则返回此函数是程序的最后一行输出.
在EXEC()函数
系统功能非常有用且功能强大,但其中一个最大的问题是程序中的所有结果文本都直接进入输出流.在某些情况下,您可能希望格式化生成的文本并以不同的方式显示它,或者根本不显示它.
为此,PHP中的exec函数完全适应.它不是自动将正在执行的程序生成的所有文本转储到输出流,而是让您有机会将此文本放在第二个参数返回的数组中:
到目前为止,我们执行的大多数程序或多或少都是真正的程序1.但是,Windows和Unix用户运行的环境实际上比这更丰富.Windows用户可以选择使用Windows命令提示符程序cmd.exe此程序称为命令shell.
的通路()函数
PHP提供的一个令人着迷的功能类似于我们迄今为止看到的功能是passthru功能.与其他函数一样,此函数执行您告诉它的程序.但是,它会立即将此程序的原始输出发送到PHP当前正在使用的输出流(即Web服务器方案中的HTTP,或PHP命令行版本中的shell).
的proc_open()函数和POPEN() 函数
proc_open()类似于popen(),但提供了对程序执行的更大程度的控制.cmd是shell要执行的命令.descriptorspec是一个索引数组,其中键表示描述符编号,值表示PHP将该描述符传递给子进程的方式.管道将被设置为文件指针的索引数组,这些数组对应于PHP创建的任何管道的末尾.返回值是表示进程的资源; 你应该在完成它后使用proc_close()释放它.
orr*_*rrd 89
之前的回答似乎都有点混乱或不完整,所以这里有一个差异表...
+----------------+-----------------+----------------+----------------+
| Command | Displays Output | Can Get Output | Gets Exit Code |
+----------------+-----------------+----------------+----------------+
| system() | Yes (as text) | Last line only | Yes |
| passthru() | Yes (raw) | No | Yes |
| exec() | No | Yes (array) | Yes |
| shell_exec() | No | Yes (string) | No |
| backticks (``) | No | Yes (string) | No |
+----------------+-----------------+----------------+----------------+
Run Code Online (Sandbox Code Playgroud)
其他需要注意的事项:
Cod*_*lan 19
它实际上归结为您希望如何处理命令可能返回的输出以及您是否希望PHP脚本等待被调用程序完成.
exec 执行命令并将输出传递给调用者(或在可选变量中返回).
passthru类似于exec()它执行命令的功能.当Unix命令的输出是需要直接传递回浏览器的二进制数据时,应使用此函数代替exec()或system()输入.
system 执行外部程序并显示输出,但只显示最后一行.
如果您需要执行命令并将命令中的所有数据直接传回而没有任何干扰,请使用该passthru()功能.
如果您从命令行运行PHP脚本,则passthru()有一个很大的好处.它将允许您执行脚本/程序,如vim,dialog等,让这些程序处理控制并仅在完成后返回脚本.
如果您使用system()或exec()执行这些脚本/程序,它将无法正常工作.
疑难杂症:出于某种原因,你不能执行less与passthru()在PHP.
| 归档时间: |
|
| 查看次数: |
234249 次 |
| 最近记录: |