PHP出现“Cannot modify header information - headers already sent”错误的几种情况

首先要明确:在执行修改或发送Http header的函数之前,不能够有任何的输出,否则会报错:

Warning: Cannot modify header information - headers already sent (output started at script:...)

所以定位此错误需要在警告提示的行号下找到有输出的代码。这里列出导致此问题比较隐蔽的典型输出。

输出语句

在发送http header之前使用了输出语句,有些输出语句比较隐蔽,这些输出的函数包括:

  • print, echo, printf, vprintf
  • trigger_error, ob_flush, ob_end_flush, var_dump, print_r
  • readfile, passthru, flush, imagepng, imagejpeg

原始HTML块

.php文件中未解析的HTML部分也是直接输出

<!DOCTYPE html>
<?php
    // ....

<?php之前有空白字符

<?php之前的空白字符会导致输出。

 <?php
# 在<?php之前存在空格

追加的php脚本换行也会导致

?>

<?php

UTF-8 BOM

一些UTF-8 BOM字符我们是看不见的,如果在<?php之前存在也会导致输出,所有比较稳妥的方式是把.php文件保存为UTF-8 (no BOM)格式。

先前脚本的错误信息

如果前面的脚本存在错误信息,这样也会导致输出。

版权声明:著作权归作者所有。

相关推荐

微信小程序页面跳转的几种方法

本文总结了微信小程序页面跳转分为这几种类型:navigate:跳转页面,并保留当前页面。前一个页面可以使用navigateBack类型的跳转退回。redirect:关闭当前页面,然后跳转到新页面。switchTab:跳转到tabBar页面(在app.json中注册过的tabBar页面),同时关闭其他非tabBar页面。navigateBack:页面退回。微信原生提供的APInavigateTowx

Android Studio 3报Error:CreateProcess error=216错误的两种情况

当配置的JDK版本和Android Studio 3所要求的JDK版本不符合时会报错误:CreateProcess error=216错误。它分为两种情况:情况一:配置的JDK版本低于JDK 8当配置的JDK版本低于JDK8会报类似以下的错误:Error:CreateProcess error=216, 该版本的 %1 

[译]Vue - 解决Cannot Find Element错误

如果你刚接触Vue,可能会遇到一些不熟悉的错误。实际上,我在创建delimiter app时看到了一个我不太熟悉的错误。例如,你可能在Vue里看到“Cannot find element”的错误。在Google Chrome中,你会在控制台窗口中看到此错误,如下所示:发生这种错误是因为过早实例化Vue。通常情况下,你会看到此错误,是因为挂载Vue的HTML元