關於ob_start()

ob_start()

僅僅說作用,不說怎麼用,怎麼用自己找,網上都有,今天隻是幫有點模模糊糊的人清楚起來。

昨天看到朋友公司的代碼就是類似上面這樣的代碼瞭,說白瞭沒有任何意義的代碼(我問瞭 不是為瞭setcookie header這類)。

我仔細想過之後,然後上網搜索瞭一下,發現相當多的初學者(技術上的初學者,不一定是PHP第一年生,有的人一輩子是初學者),並不理解ob的作用,隻是網上經常把ob叫做輸出緩沖,輸出緩存,所以相當多的人就把ob系列函數當作是加快PHP頁面顯示的工具。

其實ob是output buffering的簡稱,而不是output cache,ob用對瞭,是能對速度有一定的幫助,但是盲目的加上ob函數,隻會增加CPU額外的負擔。下面我說說ob的基本作用。

1.防止在瀏覽器有輸出之後再使用setcookie,或者header,session_start函數造成的錯誤。(我本以為最開始說的代碼是這樣的作用,但後來朋友說不是的),其實這樣的用法少用為好,養成良好的代碼習慣。

2.捕捉對一些不可獲取的函數的輸出,比如phpinfo會輸出一大堆的HTML,但是我們無法用一個變量例如$info=phpinfo();來捕捉,這時候ob就管用瞭

3.對輸出的內容進行處理,例如進行gzip壓縮,例如進行簡繁轉換,例如進行一些字符串替換。

4.生成靜態文件,其實就是捕捉整頁的輸出,然後存成文件,經常在生成HTML,或者整頁緩存中使用。

對於剛才說的第三點中的GZIP壓縮,可能是很多人想用,卻沒有真真用上的,其實稍稍修改下我朋友的代碼,就可以實現頁面的gzip壓縮。

ob_start();

….

ob_clean();

這兩句中間的任意輸出,都可以用ob_get_contents();來獲取而不輸出到瀏覽器.

經典應用:將phpinfo()的信息寫到文件裡.

ob_start();

phpinfo();

$phpinfo = ob_get_contents();

//文件讀寫操作

ob_clean();

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *