2010-03-06 63 views
3

例如,在foo.php:如何從PHP中的本地腳本獲取輸出?

<?php echo 'hello'; ?> 

而在bar.php,我想foo​​.php的輸出(這是你好),並輸出到瀏覽器之前,做了一些格式。有沒有辦法做到這一點?或者甚至更進一步,如果Web服務器可以同時運行PHP和Python腳本,PHP腳本可以獲得Python腳本的輸出嗎?

編輯: PHP函數file_get_contents()只能用於遠程腳本。如果在本地腳本上使用它,它將返回整個腳本的內容。在上面的例子中,它返回而不是你好。我不想使用exec()/ system()和CGI。

回答

2

您可以使用PHP的輸出緩衝區和功能,如ob_start();和​​3210來讀取您的PHP輸出內容到一個字符串。

這裏是php.net的例子:

<?php 

function callback($buffer) 
{ 
    // replace all the apples with oranges 
    return (str_replace("apples", "oranges", $buffer)); 
} 

ob_start("callback"); 

?> 
<html> 
<body> 
<p>It's like comparing apples to oranges.</p> 
</body> 
</html> 
<?php 

ob_end_flush(); 

?> 

而另:

<?php 
ob_start(); 
echo "Hello "; 
$out1 = ob_get_contents(); 
echo "World"; 
$out2 = ob_get_contents(); 
ob_end_clean(); 
var_dump($out1, $out2); 
?> 
+0

謝謝!你的解決方案絕對有效但我希望有一個更優雅和一般的方法來做到這一點,就像file_get_contents()對遠程腳本所做的一樣。您的解決方案僅適用於捕獲另一個PHP腳本的輸出但不包含其他文件類型的PHP腳本。 – Ethan 2010-03-06 04:37:20

+0

「我不想使用exec()/ system()的東西」 - 那麼php怎麼知道如何運行例如一個(本地)python腳本? – VolkerK 2010-03-06 05:53:01

+0

@ VolkerK: 就像web服務器知道如何運行一個html或php文件一樣,基於它的擴展。我的意思是,PHP不「知道」,但網絡服務器「知道」。 Web服務器是以這種方式工作嗎? – Ethan 2010-03-06 06:11:18