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)格式。
先前脚本的错误信息
如果前面的脚本存在错误信息,这样也会导致输出。