3

作为问题“ php 执行后台进程”的扩展:

假设我想在 PHP 会话期间保持进程运行,例如交互式bashshell。如何建立 stdout/stdin 的重定向,以便 PHP 可以读取/写入进程?

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

4

3 回答 3

2

我会使用PHP Expect。该文档有一些非常好的使用示例

于 2010-07-14T20:06:03.787 回答
1

如果您使用的是 Linux,则可以在 /proc 中访问 proc 文件系统。尽管发行版可能有所不同,但在 Ubuntu Server 中,我可以在 /proc/<pid>/fd/[012] 找到我的 stdio。0 是标准输入,1 是标准输出,2 是标准错误。如果您将这些从/dev/null 重定向到/dev/null,这可能不起作用,因为您可以使用一些分离长时间运行的后台进程的方法。如果您可以访问后台进程的 pid(例如http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/),您应该可以访问Linux中进程的标准输入/标准输出。

于 2010-09-28T17:23:12.213 回答
0

如果您使用 PHP 将用户键入的命令中继到 shell,则可以对shell_exec使用多次调用

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

于 2010-07-14T20:09:28.157 回答