如何通过proc_open将进程置于后台并访问STDIN?

3

我很高兴地使用proc_open将数据导入到另一个PHP进程中。 例如:

$spec = array (
    0 => array('pipe', 'r'),
    // I don't need output pipes
);
$cmd = 'php -f another.php >out.log 2>err.log';
$process = proc_open( $cmd, $spec, $pipes );
fwrite( $pipes[0], 'hello world');
fclose( $pipes[0] );
proc_close($process);

在另一个PHP文件中,我使用以下代码输出标准输入(STDIN):

echo file_get_contents('php://stdin');

这个命令在前台可以正常运行,但是放到后台就不行了。只需要在$cmd后面加上&,就无法从标准输入中获取任何内容了。我一定漏掉了一些基础知识。使用fgets(STDIN)也无法解决问题。
请问你有什么想法吗?
1个回答

1

你无法以正常的方式向后台进程的 STDIN 写入内容。

Server Fault 上的这个问题 可能会给你一些解决该问题的思路。

无关的提示:你说在规范中不需要输出,但是在你的 $cmd 中指定了它们;你可以像这样编写 $spec

$spec = array (
    0 => array('pipe', 'r'),
    1 => array('file', 'out.log', 'w'), // or 'a' to append
    2 => array('file', 'err.log', 'w'),
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接