<分区>
Possible Duplicate:
php exec command (or similar) to not wait for result
我有一个运行一系列 exec()
命令的页面,这些命令强制我的 PHP 脚本停止更改,直到它收到响应。我如何告诉 exec()
不等待响应而只运行命令?
我正在使用一个复杂的命令,它有一个我可以查询以检查状态的后端系统,所以我不关心响应。
<分区>
Possible Duplicate:
php exec command (or similar) to not wait for result
我有一个运行一系列 exec()
命令的页面,这些命令强制我的 PHP 脚本停止更改,直到它收到响应。我如何告诉 exec()
不等待响应而只运行命令?
我正在使用一个复杂的命令,它有一个我可以查询以检查状态的后端系统,所以我不关心响应。
最佳答案
取决于您使用的平台以及您运行的命令。
例如,在 Unix/Linux 上,您可以将 >/dev/null &
附加到命令的末尾,以告诉 shell 释放您已启动的进程,exec 将立即返回。这在 Windows 上不起作用,但有一种使用 COM 对象的替代方法(请参阅下面的编辑)。
许多命令都有一个可以传递的命令行参数,因此它们释放与终端的关联并立即返回。此外,一些命令会出现挂起,因为它们提出了一个问题并正在等待用户输入告诉它们继续(例如,当运行 gzip
并且目标文件已经存在时)。在这些情况下,通常可以传递一个命令行参数来告诉程序如何处理这个问题而不是提出问题(在 gzip
示例中,您将传递 -f
).
编辑
只要 COM
可用,下面是在 Windows 上执行您想要的操作的代码:
$commandToExec = 'somecommand.exe';
$wshShell = new COM("WScript.Shell");
$wshShell->Run($commandToExec, 0, FALSE);
请注意,是第三个参数 FALSE
告诉 WshShell 启动程序然后立即返回(第二个 0
参数定义为“窗口样式”并且是在这里可能没有意义 - 你可以传递任何整数值)。 WshShell 对象已记录 here .这绝对有效,我以前用过...
我还在上面进行了编辑,以反射(reflect)这样一个事实,即为了让 &
与 exec() 一起工作,还需要管道到
在 *nix 上。/dev/null
还添加了一些关于 WshShell 的更多信息。
关于php - exec() 在 PHP 中等待响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093510/