文件a.php只會:如何通過php中的popen獲得進程打開的輸出?
<?php
echo "abcdef";
?>
文件b.php:
<?php
$h=popen('php a.php',r);
pclose($h);
?>
問題:
我看不到在控制檯上的回聲結果; 爲什麼以及如何看到它?
我不想做它在文件b.php喜歡:echo stream_get_contents($h);
文件a.php只會:如何通過php中的popen獲得進程打開的輸出?
<?php
echo "abcdef";
?>
文件b.php:
<?php
$h=popen('php a.php',r);
pclose($h);
?>
問題:
我看不到在控制檯上的回聲結果; 爲什麼以及如何看到它?
我不想做它在文件b.php喜歡:echo stream_get_contents($h);
檢查popen文檔中的第二個例子,它顯示了究竟是如何做到這一點:
<?php
error_reporting(E_ALL);
/* Add redirection so we can get stderr. */
$handle = popen('/path/to/executable 2>&1', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);
這摘錄從stderr中讀取。刪除管道以從標準輸出讀取。
您無法在控制檯上看到回顯結果,因爲它從未進入控制檯。通過以讀取模式打開進程,其STDOUT被鏈接到打開進程的文件句柄。輸出到達控制檯的唯一方法是,如果您從該文件句柄讀取,然後回顯它。
換句話說,流量就是這樣。
希望能解釋這裏發生了什麼。如果你想在控制檯上看到a.php的輸出,那麼b.php需要從$ h中的流中讀取它,然後回顯它,因爲只有b.php才能訪問控制檯。因爲使用system()將主腳本的STDIN和STOUT移交給您的程序或腳本,所以如果使用system()而不是popen(),輸出將自動輸出到調用腳本的控制檯上呼叫。