PHP header already sent:中文乱码、BOM、空格导致的全套解决方案(图文版)

你是不是也遇到过这个经典报错:

vbnet 复制代码
Warning: Cannot modify header information - headers already sent by...

中文名就叫:

"还没来得及发 HTTP 头,你就先输出东西了"

别慌,这绝对不是大问题,但也是 PHP 新手最容易踩的坑。

今天我用最简单的方式,带你把这个问题彻底讲懂。


1⃣ 这个错误到底什么意思?

一句话解释:

你调用 header()setcookie()session_start() 之前,

代码里已经"悄悄输出了一些东西"。

这些"输出"可能是:

  • 一个看不见的空格
  • 一个回车符
  • 隐藏的 BOM 字节
  • 你自己 echo/var_dump 的内容
  • 引入文件里的输出

只要有一点点输出,header 就会报错。


2⃣ 最常见的罪魁祸首:UTF-8 BOM

很多编辑器默认保存为"UTF-8 BOM",而 PHP 最怕 BOM。

BOM 会在文件最开头偷偷输出三个字节:

复制代码
EF BB BF

你看不见,但服务器能看到。

于是服务器说:

"啊你已经输出了,我就不能设置 header 了。"


✔ 如何判断文件是不是 BOM?

症状明显:

  • 中文突然乱码
  • header 报错特别早
  • 新建文件使用过 Windows 记事本 / Dreamweaver

✔ 如何去掉 BOM?

VSCode

右下角 → 点击"UTF-8" → 选择 UTF-8(无 BOM) 保存即可。

Notepad++

菜单 → 格式 → 选择 UTF-8(无 BOM)

宝塔面板编辑器 / PHPStorm

默认不会带 BOM,比较安全。


3⃣ 第二大元凶:文件顶部的空格 + 回车

PHP 文件头部常见两种错误:

❌ 错误写法 1:

php 复制代码
(空格)(空格)
<?php

❌ 错误写法 2:

php 复制代码
<?php

// 顶部多了一行空行

这两个都会导致 header 报错。


✔ 正确写法

php 复制代码
<?php

第一行第一列必须是 <?php,上面不能有任何内容。

记住:
空格也算输出!回车也算输出!


4⃣ 第三类:你自己输出的调试信息

最容易忘的情况:

scss 复制代码
var_dump($data);  
header("Location: /index.php");

你调试一下忘记删了,header 直接挂掉。

其它输出包括:

  • echo
  • print
  • print_r
  • die
  • exit

都要检查一遍。


5⃣ include/require 的文件里也可能有输出

主文件可能没问题,但你这样写:

javascript 复制代码
require 'config.php';
header("Location: xxx.php");

只要 config.php 有:

  • BOM
  • 空格
  • echo
  • HTML

都会导致 header 报错。

记得 所有被引入的文件也要检查


6⃣ 万能解决方案:输出缓冲(最稳)

如果你实在搞不清哪里输出了,可以直接使用:

scss 复制代码
ob_start();

把它放在所有代码最上方。

PHP 会把所有输出暂存,

等你把 header / cookie / session 都设置完,

再统一输出。


7⃣ 最稳定推荐写法(复制就能用)

php 复制代码
<?php
ob_start();
session_start();
header("Content-Type: text/html; charset=utf-8");

// 你的逻辑...

这套写法能避免 99% 的 "header already sent"。

9⃣ 最后给你一个超实用排查顺序(收藏版)

  1. 检查文件顶部是否有空格/空行
  2. 转成 UTF-8 无 BOM
  3. 搜索所有 output(echo/print/var_dump)
  4. 检查 include 的文件
  5. 统一加 ob_start()
  6. 不行再检查 CDN 或 gzip(非常少见)

按这顺序查,10 分钟必解决。

相关推荐
牛奔2 小时前
php 8.2 配置安装php-zbarcode扩展
android·开发语言·php
n***s9093 小时前
ThinkPHP和PHP的区别
开发语言·php
码农运营3 小时前
PayPal 支付效果
php
霸王大陆3 小时前
《零基础学 PHP:从入门到实战》教程-模块四:数组与函数-2
android·开发语言·php
济南壹软网络科技有限公司3 小时前
沉浸式体验革命:壹软科技2025新版盲盒源码前端3D渲染与个性化运营技术解析
前端·科技·uni-app·开源·php·盲盒源码
霸王大陆4 小时前
《零基础学 PHP:从入门到实战》教程-模块四:数组与函数-1
android·开发语言·php
Mr.H01275 小时前
深入理解高级IO:从模型到实战,实现高性能并发服务器
linux·服务器·网络·tcp/ip·php
Dest1ny-安全6 小时前
CTF入门:国内线上CTF比赛时间及部分题目资源
网络·安全·web安全·微信小程序·php
e***19356 小时前
QoS质量配置
开发语言·智能路由器·php