作者gpmm (银色)
看板PHP
标题Re: [问题] headers already sent
时间Thu May 8 09:45:05 2008
※ 引述《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)