剖析 PHP 的 header 問題

在寫 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 後
突如其來的一大串英文錯誤 (都是英文吧= =) 感到困惑
對絕大部分人來說 header 應該是很好用的轉換網頁的函數
因為當你按了上一頁後就看不到前面那個網頁啦~~
可以必免被人家看到輸入資料處理所經過的程式頁面
這樣嗯..就可以確保一些事~~ (我也不知道是啥事)
曾經有看過寫網頁有撲克牌圖片的二十一點就大量使用 header
可以免於被人家按上一頁又重抽吧~
這樣就可以贏電腦哩(偷笑)

好啦
當然 header 所能夠做到的並不只這些
你可以強制下載檔案啦~ 選擇網頁語言格式啦~
你可以在這個網頁看到更多用途

http://www.faqs.org/rfcs/rfc2616

先前所敘述的錯誤訊息會在以下情況發生

(1) 程式在 header 前就送出資料 (錯誤訊息的意思就是指這個)
(2) 程式文件編碼問題

(1)的解決辦法很簡單,在 PHP 的官方說明文件就有提到

你可以在程式中加入兩個程式碼,或修改 php.ini 的設定

1. 加入 ob_start() 及 ob_end_flush() 程式

當程式中包含 header.....

<?
function xxx(){
....  //這邊放上你的程式
header("Location:
http://hkc.tw/");
}
ob_start();
?>


輸出的 HTML

<?
ob_end_flush();
?>

2.修改php.ini的output_buffering為on

這樣可以免除後患~~
 

(2)的問題就很懸了,如果你的 header 就算只有單單的一行

<? header("Location: 你的網址"); ?>

而且是放在文件最頂端,但怎麼試都是錯誤
你就要查查看你的文件編碼了
你可以用「記事本」開啟你的文件
然後點「檔案」→「另存新檔」,跳出儲存檔案對話方塊
看下面的編碼,如果不是 ANSI 的話就把它改成 ANSI 吧!
這樣就可以了^^

原文出處:http://www.blueshop.com.tw/article/show.asp?cde=ATL2007101820282216M

延伸閱讀:PHP 檔案下載 header 設置

如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。

留言

這個網誌中的熱門文章

用PHP寄MAIL的方法

ImageMagick應用大全(一)

php安裝openssl的方法