2011-04-19 125 views
7

我有使用輸出緩衝有什麼優點和缺點?

ob_start(); 

可以提高你的頁面加載時間閱讀在很多網站上,因爲它存儲在一個變量的PHP,並將其顯示在一個去,而不是處理PHP一點的時間。

而且它是

header('location: /'); 

非常有用有人說,這是意大利麪條的代碼,但只要代碼是簡潔明瞭的任何程序員那麼這不應該是一個問題,對不對?

你對使用它有什麼想法,以及你對輸出緩衝設置了什麼,是否有利弊如何,何時以及爲什麼我應該或不應該使用它。

+1

關於第二個問題部分:[是否可以在所有PHP頁面的開頭都有「ob_start()」](http://stackoverflow.com/questions/4168009/is-it-ok-如果它的目的僅僅是爲了防止頭已經發送錯誤,它被廣泛認爲是黑客攻擊。但是,這是一種功能性破解。請注意,可靠性取決於PHP是否隱式刷新(默認緩衝區大小可以取決於php.ini設置)。 – mario 2011-04-19 12:01:31

回答

-1

一些用戶不知道PHP還有一些非常好的評論。所以他們錯誤地使用ob_start。

如果您使用header(),cookie()等頭函數,則不必發送任何輸出。這些功能必須從輸出前使用。

但某些用戶將停止使用ob_start或輸出緩衝功能發送輸出。

所以你可以使用JavaScript或元forwading轉發用戶。

<script language="javascript"> window.location = 'some.php'; </script> 

或者您可以使用元刷新轉發用戶。

<META HTTP-EQUIV="Refresh" CONTENT="0;URL=some.php"> 

,如果你真的需要使用頭功能,你必須不發送任何輸出(不要忘了,輸入字符或空間或UTF-8簽名輸出太)

+0

-1 - 使用'ob_start'作爲防止輸出發送的方法並沒有錯。但是,通常它可能會影響性能,並意味着在代碼中存在分層問題。 – 2013-07-09 10:50:07

1

輸出緩衝的主要優點是你可以將它與ob_gzhandler一起使用,這會壓縮你的輸出,所以你使用更少的帶寬。如果你的服務器沒有安裝發送壓縮的php文件,那麼很好用。

另一個優點是,如果您的腳本使用數據庫或其他受限資源,並且在關閉連接或釋放這些資源之前有一些輸出。相反,有這樣的事情:

  1. 連接到數據庫
  2. 開始發送輸出給用戶
  3. 等待用戶接收一切
  4. 關閉數據庫連接

你有:

  1. 開始緩衝
  2. 連接到數據庫
  3. 輸出一些事情
  4. 關閉數據庫連接
  5. 發送緩衝區給用戶。

當您的腳本需要連接100ms到數據庫,並且您的用戶需要300多次才能下載它時,您可以瞭解輸出緩衝如何幫助釋放對數據庫連接限制的一些壓力。

我知道使用配置良好的服務器編碼的東西可能會使這些優勢無效,但您永遠不知道在您之後誰會編碼,並且您並不總是能夠控制運行的服務器。

相關問題