2012-11-22 107 views
0

可能重複:
「Warning: Headers already sent」 in PHP如何在頁面完成呈現之前發送標題?

在測試過程中我遇到的問題 「已經發送了頭」。但後來我想,這怎麼會發生?其中一個標題是Content-Length,它在整個PHP腳本完成之前是未知的,它是如何解決這個問題的?

+0

http://stackoverflow.com/questions/8028957/warning-headers-already-sent-in-php –

+0

使用搜索功能... – Chris

+2

@MattLo不是重複的; OP瞭解爲什麼會顯示警告,但想知道如何先解析寫入內容,然後發送「Content-Length」標頭。投票重新開放。 –

回答

1

你應該使用輸出緩衝:達到你的腳本

有一兩件事你可以嘗試結束時

ob_start(); 
// write all your code here 

header('Content-Length: ' . ob_get_length()); 

輸出緩衝被刷新含蓄,我不知道,是請致電header(),並查看PHP是否自動爲您設置Content-Length

參見:ob_start()

編輯

如果你談論的是PHP是怎麼做的,它並不總是寫頭;一旦輸出緩衝區已滿,它將刷新它而不設置明確的長度標題。

參見:http://php.net/manual/en/outcontrol.configuration.php

+0

看看這些函數:http://php.net/manual/en/ref.outcontrol.php – Andrew

+0

謝謝你,你唯一真正閱讀和回答我的問題的人。 –

1

當您在使用header()設置標頭之前輸出任何東西時,您會收到此消息。所以,確保你沒有迴應任何東西,沒有HTML,沒有空白......在設置標題之前什麼都沒有。

0

你要發送頭你發送任何別的output.Once腳本之前產生的任何東西 - 無論是頁面的靜態部分或者動態生成的輸出 - PHP發送頭其次是無論發送到輸出(unles你使用緩衝,在其他答案中提到)。

因此,您必須從<?php開始您的文件,並確保它不包含某些編輯人員希望在文件內容正確之前放置的BOM字符。

相關問題