台灣最大程式設計社群網站
線上人數
971
 
會員總數:245214
討論主題:189087
歡迎您免費加入會員
討論區列表 >> 專欄文章 >> 剖析 PHP 的 header 問題
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
剖析 PHP 的 header 問題
價值 : 0 QP  點閱數:869 回應數:0

樓主

HKC
初學者
10 1
78 1
發送站內信

捐贈 VP 給 HKC
在寫 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 吧!
這樣就可以了^^

搜尋相關Tags的文章: [ PHP ] , [ header ] ,
本篇文章發表於2007-10-18 20:28
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
   

回覆
如要回應,請先登入.