2012-03-15 33 views
3

我知道ob_start打開輸出緩衝,但我不完全理解它的含義。對我來說,這意味着它只是停止輸出腳本數據。ob_start和ob_gzhandler函數真的做什麼

這是真的嗎?在這種情況下,瀏覽器如何輸出數據,我是否必須最後使用ob_end_flush()來關閉它?

由於ob_gzhandler壓縮網頁,瀏覽器如何處理這些頁面?

我在代碼中看到了ob_start(「gzhandler」),因爲ob_gzhandler壓縮網頁,ob_start(「gzhandler」)是什麼意思,它是如何應用於這兩個函數的?

所有幫助表示感謝!

+1

我想你已閱讀http://php.net/manual/en/book.outcontrol.php的所有內容 – 2012-03-15 00:27:22

回答

3

輸出緩衝意味着不是將輸出直接寫入標準輸出流,而是將其寫入緩衝區。

然後,當腳本結束時(或者當您撥打ob_end_flush()時),該緩衝區的內容將寫入stdout。

使用ob_gzhandler將緩衝區的內容寫入標準輸出之前轉換爲緩衝區的內容,以便對其進行gzip壓縮。 (支持gzip壓縮的瀏覽器扭轉這一在另一端,解壓縮的內容。)

1

好吧,讓我來解釋一下這個樣子,

只有緩衝體系的用途之一,但我認爲這是有點酷。

首先我想讓你看這個動畫。

Operating System Start

當你有一個PHP腳本,有這樣的水平基礎結構,例如你可能會寫:建立數據庫服務器

連接..選擇

數據庫: my_database

開始數據查詢

數據查詢結束(發現:200行)

...

等,但如果你不使用輸出緩衝和沖洗,你會看到這些線當你所有的腳本執行的結束。但是,當我的想法是「我想看看我的腳本正在做什麼時!」時,您首先需要......

對不起,您首先需要在您的php.ini文件中設置implicit_flush爲「on」,然後重新啓動Apache服務器來看到這一切。您需要通過「ob_start();」打開輸出緩衝(簡寫「ob」),然後在您的代碼「echo」語句的任意位置放置輸出緩衝(簡寫「ob」),之後輸入「ob_flush();」命令來查看您的腳本實時運行。

後來,它也可用於基於文件的靜態內容緩存是這樣的:在你的頁面開始

  1. 地方ob_start()(或者你想捕捉的內容開始)
  2. 將ob_end_flush()放置在頁面的最後(或者您想要捕捉的內容的結尾處);

  3. then $ my_var = ob_get_contents();獲取服務器創建併發送到客戶端的所有HTML輸出到my_var變量,然後按需要使用它。通常它被保存到一個文件,並通過檢查文件的最後修改日期,它被用作靜態緩衝。

我希望我能點亮你腦海中的一些燈泡。

1

請訪問這個link。我希望你對你的問題有一個清晰的概念。

+0

這並不回答這個問題。如果鏈接失效,你的回答就毫無意義。 – Eva 2013-08-19 21:51:20

+0

對於測試HTTP壓縮可以做[* here *](http://www.whatsmyip.org/http-compression-test/?url=aHR0cDovL3d3dy5zY2hlZHVsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcw==) – hyip 2015-04-12 10:50:28

相關問題