PHP 提示 headers already sent by

Cannot modify header information - headers already sent by

解决办法:

if (!headers_sent()) {
    header("Content-type: application/json; charset=utf-8");
}
阅读 2.4k
1 个回答

你上面写的解决方法不是对于 headers already sent 的优雅解决.

标准的解决方案应该为:
使用 ob_ 开头的系列函数, 意思是 Output Buffer, 即输出缓冲.
使用此系列函数, 可以让你在对浏览器输出内容时, 通过调用 ob_start, 从而输出内容到缓冲区.
在所有业务逻辑处理完成之后, 调用 ob_flush 发送内容并清空缓冲区.
ob_startob_flush 中间, 根据你的实际情况来控制 header 之类的, 不会造成任何顺序上的问题
如果需要, 也可以通过 ob_clean 清除掉所有已经写入缓冲区的内容从而准备重新写入一些数据 (例如碰到错误时你可以这么用)
用这系列函数的最大好处就是让你的业务逻辑和输出顺序解耦了, 不再强相关 (逻辑上也不应该相关)

当然它的功能远不止这些, 函数也有一堆, 我这里只是说了最普遍普通的情况, 详细内容请见: https://www.php.net/manual/zh/book.outcontrol.php

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题