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();