PHP输出图片必须先用header()设置Content-Type,再输出二进制数据;因HTTP响应头须在响应体前发送,任何前置输出(含BOM、空格)都会导致headers already sent错误。
PHP 图片刷新不是靠“重新加载页面”,而是靠 header() 告诉浏览器:“这不是 HTML,这是一张图片”,再用 echo 或 imagepng() 等函数把二进制数据原样吐出去——浏览器收到后就直接渲染成图。
为什么 header(“Content-Type: image/png”) 必须在 echo 前?
HTTP 响应由“响应头 + 响应体”组成。浏览器靠响应头里的 Content-Type 决定怎么处理后面的数据。一旦你调用 echo、print 或任何输出(包括空格、换行),PHP 就会隐式发送响应头;此时再调用 header() 就会报错:Warning: Cannot modify header information - headers already sent。
实操建议:
- 确保
header()调用前没有任何输出:检查 PHP 文件开头有没有 BOM、空行、<?php前的空格 - 用
ob_start()开启输出缓冲可缓解(但不推荐作为默认方案) - 常见陷阱:UTF-8 编码带 BOM 的编辑器保存的 .php 文件,开头看似空白,实则已输出 3 字节
echo file_get_contents() 和 imagepng() 输出图片有啥区别?
两者都能让浏览器显示图片,但机制和适用场景不同:
立即学习“PHP免费学习笔记(深入)”;