如何通过proc_open来处理进程并有权访问STDIN?

时间:2012-02-25 16:34:16

标签: php linux shell stdin

我很高兴使用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附加到&,我就无法从STDIN中获取任何内容。我必须遗漏一些基本的东西。

fgets(STDIN)

也失败了

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您不能写入后台进程的STDIN(至少不是以正常方式)。

This question on 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'),
);