2013-07-14 35 views
1

我有一個輸出mysql單元格數據的腳本。 「內容」單元格包含文本輸出,其長度各不相同。PHP-「頭已發送」錯誤取決於輸出長度?

當「內容」單元格的內容很小(可以說,幾行文字)時,一切正常。 但是,當輸出達到多個段落或更多時,我會收到'headers already sent'錯誤。

它取決於輸出長度嗎?我在哪裏可以閱讀更多關於它的內容我在SO上找到的答案沒有提到這種輸出長度依賴性。

44: echo " 
45:  <p>".$article['content']."</p> 
46: "; 

如果「內容」輸出的尺寸較大,腳本產生以下錯誤:

PHP Warning: Cannot modify header information - headers already sent by (output started at /home/mantas/htdocs/asm/article.php:46) in /home/mantas/htdocs/asm/include/comments_class.php on line 56

+3

後相關代碼 – vlcekmi3

回答

2

,如果你想讓它PHP會緩衝輸出。你可以使用ob_start()等編程方式來控制它。但是,還有一個選項可以在php.ini中設置輸出緩衝。

設置output_buffering=on啓用它,而設置output_buffering=4096將設置緩衝區大小的限制。 phpinfo()應該告訴你這是否啓用,以及緩衝區大小是多少。

的PHP引用here

+0

使用輸出緩衝解決了這個問題。 – Onion

+0

這很奇怪。這一切都取決於輸出長度...包裝一些輸出(不是全部,只是這部分與「內容」單元的輸出)解決了這個問題。這很奇怪。 – Onion

0

的「頭文件已經發出」警告的手段,你的地方修改HTTP標頭在你的將輸出發送到客戶端後(即使用echo,空格等)。

這個警告本身有什麼都沒有與內容長度有關。

還有更多的方法,至極修改標題:

  • 頭/ header_remove
  • 在session_start/session_regenerate_id
  • 的setcookie/setrawcookie
+0

不僅當你'echo'東西,但即使在這一個純靜態的HTML標籤。順便說一句:我沒有downvote – samayo

+0

它,因爲腳本工作,如果「內容」單元格的內容很小(例如,只有幾行文本)。 – Onion

+0

但是這是別的副作用 - 你發佈的代碼並不真正相關,因爲真正的錯誤出現在某個地方之前.. – Philipp