1

我有一个输出 mysql 单元数据的脚本。“内容”单元格包含长度不同的文本输出。

当“内容”单元格的内容很小(比如说,几行文本)时,一切正常。但是,当输出达到几段或更多段时,我收到“标头已发送”错误。

它取决于输出长度吗?我在哪里可以阅读更多关于它的信息?我在 SO 上找到的答案没有提到这种输出长度依赖性。

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

如果“内容”输出的大小很大,则脚本会产生以下错误:

PHP 警告:无法修改标头信息 - 第 56 行 /home/mantas/htdocs/asm/include/comments_class.php 中的标头(输出开始于 /home/mantas/htdocs/asm/article.php:46)

4

3 回答 3

2

如果您愿意,PHP 将缓冲输出。您可以使用 等以编程方式对此进行控制ob_start()。但是,还有一个选项可以在 php.ini 中设置输出缓冲。

设置output_buffering=on启用它,而设置output_buffering=4096将限制缓冲区大小。phpinfo()应该告诉您这是否已启用,以及缓冲区大小是多少。

PHP 参考在这里

于 2013-07-14T21:24:01.200 回答
0

“标头已发送”警告意味着,您在将输出发送到客户端后(即使用echo、空格等)修改代码中某处的 http 标头。

此警告本身与内容长度无关。

还有更多方法,可以修改标题:

  • 标头 / header_remove
  • session_start / session_regenerate_id
  • setcookie / setrawcookie
于 2013-07-14T21:23:50.083 回答
0

使用 PHP 的 xmlWriter 时,我还遇到了“已经发送的标头”问题。

我在脚本末尾插入了用于管理页面输出类型的“标题”说明:

我通过将说明移动到脚本的开头来解决它,这个顺序使用:

// 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();
于 2021-12-22T11:12:41.030 回答