2012-02-25 53 views
3

我很高兴使用proc_open将数据传输到另一个PHP进程。 像这样如何通过proc_open后台进程并访问STDIN?

$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

您不能向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'), 
); 
+0

好点,谢谢。我忘了规范不只是管道。 – Tim 2012-02-25 17:09:54