Re: [問題] headers already sent

看板PHP作者 (銀色)時間17年前 (2008/05/08 09:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《JoeHorn (每天都在公司玩OLG)》之銘言: 以上大致沒有問題 :Q : <head> : <meta http-equiv="Content-Type" content="text/html; charset=Big5" /> : <title>Hello PHP 網頁</title> : </head> : <body> : ...... : </body> : <html> : 黃色的的 <head> 與 </head> 包起來的紅色部份就是 HTML 裡面的檔頭, : 綠色的部份才是內容。 : 為了讓瀏覽器能正確解析檔案,網頁伺服器一定先送出檔頭,再送出內容。 : 編寫 HTML 也一樣, <head> 一定放在 <body> 前面。 : 基於安全性等因素考量,許多網頁程式語言引擎不允許某些檔頭資訊在後段作傳送。 : PHP 的內部引擎就是其中的一種,所以,不要在 <body> 開始後, : 又開始傳送應該放在 <head> 裡面的資訊。 : 而 PHP 的 header() 這個 function 就是讓我們傳送檔頭的。 : 作 header("Location: ....") 的話似乎是沒這種禁忌,以後會不會改不知道。 基本上 php header function 是送出 http head,而非 html head, 可參見 php document 裡關於 header function 的解釋: header() is used to send raw HTTP headers. See the HTTP/1.1 specification for more information on HTTP headers. html head 可以向瀏覽器異動部份的 http head 規格沒錯, (應該說是修正瀏覽器對 http head 的解釋) 但 php header 並不僅是要在 html body 前送出, 順序上來說是 http head + php header function > html (head) 只要 html 資料區段一旦送出,瀏覽器開始接收任何的輸出時, http head 就已經不允許被修改了。 所以這種情況,最簡單的講法就是,所有會影響到 http head 的函式, 都必須在任何 html 輸出前先處理完。 譬如說 session_start、header 等等。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.19.91 ※ 編輯: gpmm 來自: 220.135.19.91 (05/08 09:46)
文章代碼(AID): #188biYvl (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #188biYvl (PHP)