在寫 PHP 程式用到 header 函數轉換網頁時經常會看到
Warning: Cannot modify header information -
headers already sent by (output started at xxx/xxx.php:2) in xxx/xxx.php on line 2
尤其對於從 PHP4 (或更早版本) 升級成 PHP5 後
突如其來的一大串英文錯誤 (都是英文吧= =) 感到困惑
PHP 設計人員都知道,使用 setcookie() 或 session_start() 函式之前不能有任何輸出,否則就會出現錯誤。這是因為這兩個函式呼叫後會將資訊加入 HTML 的標頭(Header),而標頭都應該在 HTML 本體(body)輸出之前,如果呼叫這兩個函式時前面已經有東西輸出了,PHP 直譯器就會出現錯誤訊息。然而要檢查函式呼叫之前有沒有輸出是件非常麻煩的事情 ,因為 include 檔案內容裡的輸出都有可能造成錯誤,如果檔案數龐大,那檢查起來可是非常麻煩的,在此提供一個可以一勞永逸的方法:
開啟組態設定檔 php.ini ,將底下這項改為 On
output_buffering = On
這樣 Web Server 在處理檔案時會將標頭全部處理完後,再輸出網頁內容,這樣網頁速度需多等千分之一秒,但卻可省去檢查程式碼的數千數萬秒,算是值得使用的功能囉!