Re: [問題] headers already sent
※ 引述《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)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
6
14