candplus
candplus
发布于 1周前

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)格式。

先前脚本的错误信息

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

PHP