[問題] headers already sent

看板PHP作者 (每天都在公司玩OLG)時間17年前 (2008/05/08 05:53), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/2 (看更多)
這種問題板上很多人問過了,多爬文。 我在這篇文章改標題,有沒有參考價值,板主是否保留都隨意。 依照 HTTP 協定,網頁瀏覽器存取網頁時會進行連線,取得檔頭資訊,再取用內容。 如果直接以 telnet 命令模擬 GET 指令,取到的內容會像這樣: (沒特別指定都是 GET,其他還有 HEAD、POST、...) Date: Wed, 07 May 2008 21:23:37 GMT Server: Apache Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "4135d-2c-3e9564c23b600" Accept-Ranges: bytes Content-Length: 44 Vary: Accept-Encoding Connection: close Content-Type: text/html X-Pad: avoid browser bug <html><body><h1>It works!</h1></body></html> 黃色的部份就是檔頭(header),綠色部份是內容。 HTML 文件裡面也可以包檔頭,用來修正文件文件存取的方式、位址, 以及網頁編碼等等的資訊,像這樣: <html> <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: ....") 的話似乎是沒這種禁忌,以後會不會改不知道。 ※ 引述《polito (波力多)》之銘言: : 這是我遇到的問題.... : Warning: Cannot modify header information - headers already sent by : (output started at C:\AppServ\www\....\abc.php:18) : in C:\AppServ\www\....\def.php on line 43 abc.php 已經送完檔頭,進入 <body> 了,隨之而來的程式不應該再送出檔頭。 另外,不好意思,我覺得您的程式結構很差, html_begin() 之類的 function 不應該跑超過一次。 建議您把檔頭傳送等等的步驟作成一個 function, 讓可能變動的字串或數值變成應該傳入的變數。 需要送檔頭的頁面、PHP 檔只要呼叫 function,傳遞變數,作一次就好。 -- ▄▆▇▍ ▆ ▇ ▏▎▍▌▋▊▉ φkaishin ┼── █▏── ▁▁▍▁ ─────── JoeHorn┬┼ ▄ꈠ ▂▄▎ ▄ ◢▆ ▄▎▄▅ └┼ ┼┐ ◢▂◤ ◢ ▄▄▆ ┼┴ -▂▄-──-─┼ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.173.193

05/08 07:25, , 1F
感謝您的講解 我試試看
05/08 07:25, 1F
文章代碼(AID): #188YJWg1 (PHP)
討論串 (同標題文章)
文章代碼(AID): #188YJWg1 (PHP)