2012-02-25 17 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