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 分钟必解决。

相关推荐
程序猿小三6 小时前
福建省第一届“闽盾杯“网络安全职业技能竞赛 — 备赛学习路线
开发语言·网络安全·php
juesdo8 小时前
青岑CTF之 EZPHP系列
笔记·web安全·php
Leweslyh9 小时前
3GPP TS 28.312 意图驱动管理服务 — 极详细通俗解读
开发语言·php
catchadmin10 小时前
PHP 在领域驱动(DDD)设计中的核心实践
开发语言·php
Johnstons10 小时前
网页加载到一半卡住?视频看到关键处花屏?可能是丢包在作祟
开发语言·php·音视频·弱网测试·网络损伤
Leweslyh11 小时前
《3GPP TS 28.312 面向移动网络的意图驱动管理服务》完整自学教程
开发语言·网络·php
Godspeed Zhao12 小时前
跨越天际:从智能汽车到 eVTOL 的适航与系统级开发21——时间触发以太网(TTE)与 ARINC 664(AFDX)
架构·汽车·php
zimoyin12 小时前
Webman 的 PHP 打包构建脚本:编译二进制、归档备份、生成校验包(附完整源码+解析)
php
酉鬼女又兒1 天前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
神仙别闹1 天前
基于 PHP + MySQL学生信息管理系统
android·mysql·php