這是一個有點棘手,所以忍耐一下:如何讓一個PHP腳本啓動另一個並捕獲其輸出?
- 我有一個命令行啓動和數據通過
STDIN
- 我有另外一個PHP腳本
b.php
提供給它的PHP腳本
- 我想要
a.php
發佈b.php
並捕獲其輸出。 - 此外,
a.php
有轉發STDIN
到b.php
a.php
是否有一個簡單的方法來做到這一點?
這是一個有點棘手,所以忍耐一下:如何讓一個PHP腳本啓動另一個並捕獲其輸出?
STDIN
b.php
a.php
a.php
發佈b.php
並捕獲其輸出。a.php
有轉發STDIN
到b.php
是否有一個簡單的方法來做到這一點?
只需捕獲其他程序的標準輸出(不管是否爲php),您都可以使用反引號: http://php.net/manual/en/language.operators.execution.php。 例如:
$boutput = `php b.php`;
要捕獲標準輸入,這樣做:
$ainput = file_get_contents('php://stdin');
最後,管串到外部程序的內容,使用proc_open,由傑里米的答案的建議。 具體而言,這裏是你的a.php只會應該包含的內容:
$ainput = file_get_contents('php://stdin');
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open('php b.php', $descriptorspec, $pipes);
fwrite($pipes[0], $ainput);
fclose($pipes[0]);
echo stream_get_contents($pipes[1]); # echo output of "b.php < stdin-from-a.php"
fclose($pipes[1]);
proc_close($process);
但是,這可以重定向輸入? – 2010-04-17 04:19:39
你的意思是說,當你從'A.php'調用時,你想允許'B.php'通過'STDIN'接受命令嗎?從這一點開始包含,並將輸出包裹在一個'ob_start'和'ob_get_flush'命令的附近會不會更好? – 2010-04-17 04:23:40
但是這會捕獲'b.php'中的錯誤嗎? – 2010-04-17 04:25:39