簡體   English   中英

PHP-“標頭已發送”錯誤取決於輸出長度?

[英]PHP- "headers already sent" error depending on output length?

我有一個輸出 mysql 單元格數據的腳本。 “內容”單元格包含不同長度的文本輸出。

當“內容”單元格的內容很小(比如幾行文本)時,一切正常。 但是,當輸出達到幾個段落或更多時,我會收到“標題已發送”錯誤。

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

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

如果“內容”輸出的大小很大,腳本會產生以下錯誤:

PHP 警告:無法修改標題信息 - 標題已由(輸出開始於 /home/mantas/htdocs/asm/article.php:46)在 /home/mantas/htdocs/asm/include/comments_class.php 中第 56 行發送

如果需要,PHP將緩沖輸出。 您可以使用ob_start()等以編程方式進行控制。但是,還有一個選項可以在php.ini中設置輸出緩沖。

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

PHP參考在這里

“標頭已發送”警告意味着,在將輸出發送到客戶端之后,即在代碼中的某個位置修改了HTTP標頭(即帶有echo ,空格等)。

此警告本身與內容長度無關

還有更多方法可以修改標頭:

  • 標頭/ header_remove
  • session_start / session_regenerate_id
  • setcookie / setrawcookie

我在使用 PHP 的 xmlWriter 時也遇到了“headers already sent by ...”的問題。

我在腳本末尾插入了用於管理頁面輸出類型的“標題”指令:

我通過將指令移到腳本的開頭來解決它,這個順序使用:

// init header earlier on script
header('Content-Type: text/xml; charset=utf-8');
header('Cache-Control: max-age=0');
header('Content-Disposition: inline');

// new xmlwriter object
$xml = new XMLWriter();

// set direct output stream
$xml->openURI('php://output');

// some code here for creating the xml output
// ....
// ....

// render xml to output
$xml->flush();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM