2012-06-07

在 PHP 遇到「Cannot modify header information - headers already sent by」的錯誤

在本機實做時沒有問題,一上傳到測試環境光開登入畫面進行登入就出現「Cannot modify header information - headers already sent by」這樣的錯誤。

原來 login.php 裡在 <?php ... ?> 之前有空白行,而且 login.php include 的 base.php 裡在 <?php ... ?> 之後也有空白行,所以當登入成功後,使用 header 進行 redirect 時,PHP 就報錯。

PHP 規定在 header 進行 redirect 之前不可以有任何 output,所以我的空白行就是兇手之一,保險的作法就是拿掉 redirect 之前所有的空白行。


至於本機沒報錯,原因出在兩個環境的設定不同,開啟 php.ini 找到 output_buffering 設定,本機設定為:
output_buffering = 4096
測試機設定為
output_buffering = 0
很明顯的,我的空白行由 4096 吃掉了,偷懶的作法就是直接改 output_buffering 的設定,但是當環境身不由己時,只好乖乖的拿掉空白行。

沒有留言:

張貼留言