如何在PHP中运行后台进程并读/写其stdout / stdin?

时间:2010-07-14 20:01:15

标签: php background-process

作为问题“php execute a background process”的扩展名:

假设我想在PHP会话期间保持进程运行,就像交互式bash shell一样。如何建立stdout / stdin的重定向,以便PHP可以读/写进程?

更新:关键是能够启动进程并使其在后台运行,以便以后的请求可以访问其stdout / stdin流。

3 个答案:

答案 0 :(得分:2)

我会使用PHP Expect。文档有一些非常好usage examples

答案 1 :(得分:1)

如果您使用的是Linux,则可以在/ proc访问proc文件系统。虽然发行版可能有所不同,但在Ubuntu Server中我可以在/ proc /< pid> / fd / [012]找到我的stdio。 0是stdin,1是stdout,2是stderr。如果您将这些重定向到/ dev / null,这可能不起作用,因为您可以使用一些旋转长时间运行的后台进程的方法。如果您可以访问后台进程的pid(la http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/),那么您应该能够在Linux中访问该进程的stdin / stdout。

答案 2 :(得分:0)

如果您使用PHP将用户输入的命令转发到shell,则可以使用多次调用shell_exec

shell_exec将返回完整的输出,然后您可以回显给用户。