2010-04-17 58 views
4

這是一個有點棘手,所以忍耐一下:如何讓一個PHP腳本啓動另一個並捕獲其輸出?

  • 我有一個命令行啓動和數據通過STDIN
  • 我有另外一個PHP腳本b.php
  • 提供給它的PHP腳本 a.php
  • 我想要a.php發佈b.php並捕獲其輸出
  • 此外,a.php有轉發STDINb.php

是否有一個簡單的方法來做到這一點?

回答

3

只需捕獲其他程序的標準輸出(不管是否爲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); 
+0

但是,這可以重定向輸入? – 2010-04-17 04:19:39

+0

你的意思是說,當你從'A.php'調用時,你想允許'B.php'通過'STDIN'接受命令嗎?從這一點開始包含,並將輸出包裹在一個'ob_start'和'ob_get_flush'命令的附近會不會更好? – 2010-04-17 04:23:40

+0

但是這會捕獲'b.php'中的錯誤嗎? – 2010-04-17 04:25:39

1

proc_open()應該給你你需要做到這一點的控制水平。

+0

這看起來很有前途。我會給它一個鏡頭。 – 2010-04-17 04:27:41

相關問題