2010-11-08 48 views
9

PHP文檔建議我應該結束各ob_start()與ob_end_flush()函數。我在網站的每個頁面上都使用了一個,只是爲了讓我可以在應用中的任何位置使用firephp日誌方法。爲什麼我需要結束我的ob_start()?

應用程序工作正常,但我不知道是否有什麼我不知道,可能是有害的。

回答

8

我認爲這個建議的理由是,PHP刷新你的輸出緩衝隱含不使用的ob_end_*功能之一時。雖然不是一個錯誤,但這個可以不期望的時候會引發問題。 PHP文檔試圖保護你免受這些問題的困擾。如果您知道隱式刷新,則可能不是問題。

0

您可以使用輸出緩衝作爲

<?php 
ob_start(); 
echo "Some text you want to echo on page!!"; 
header("Location:somepage.php"); 
ob_end_flush(); 
?> 

的問題是,我們開始發送輸出後我們不能發送的報頭。爲了解決這個問題,我們緩衝輸出。函數ob_start打開輸出緩衝。當輸出緩衝處於活動狀態時,腳本中不會輸出任何輸出(標題除外),而是將輸出存儲在內部緩衝區中。所以回聲輸出將被緩衝。接下來我們發送頭沒有任何問題,因爲我們還沒有吐出任何輸出。最後,我們調用ob_end_flush來刷新內部緩衝區內容並停止輸出緩衝。

0

如果存在循環,例如有人可以開始緩衝。並調用你的函數。當他試圖ob_end_flush代碼收集您的內容。