在寫 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();
?>
這樣可以免除後患~~
而且是放在文件最頂端,但怎麼試都是錯誤
你就要查查看你的文件編碼了
你可以用「記事本」開啟你的文件
然後點「檔案」→「另存新檔」,跳出儲存檔案對話方塊
看下面的編碼,如果不是 ANSI 的話就把它改成 ANSI 吧!
這樣就可以了^^
原文出處:http://www.blueshop.com.tw/article/show.asp?cde=ATL2007101820282216M
延伸閱讀:PHP 檔案下載 header 設置
如果覺得這篇文章對您有所幫助,在觀看完文章之餘,希望能點選下方方廣告,當作是對YOGO的支持,讓YOGO更有寫作的動力。