空白页主因是php错误被静默忽略,需先在脚本顶端添加error_reporting(e_all); ini_set('display_errors','1'); ini_set('display_startup_errors','1')强制显示错误;若仍空白,则检查bom、短标签、语法错误或web服务器未解析php。

空白页几乎总是因为 PHP 报错被静默吞掉
不是代码没写输出,而是错误根本没显示出来。默认配置里 display_errors 是 Off,error_reporting 可能被设为 0 或只报部分错误,导致语法错误、未定义变量、致命错误全被吃掉,只剩白屏。
最直接的验证方式:在 PHP 文件最顶部(必须是第一行,前面不能有任何空格、换行或 BOM)加这三行:
<?php error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');如果加上后立刻出现报错,说明就是这个问题;如果仍空白,说明连这三行都没执行到——大概率是解析期就卡住了。
连 error_reporting() 都没执行,说明脚本根本没开始运行
常见原因有三个:
- 文件开头存在 UTF-8 BOM(
ef bb bf),PHP 解析器在读到<?php前就遇到非法字节,直接放弃解析 - 用了短标签
但short_open_tag在 php.ini 中是Off,整段代码被当作文本跳过 - 语法错误严重到无法进入脚本主体,比如漏了
{、多写了;、引号不匹配,甚至文件末尾缺?>导致unexpected end of file
快速排查:
- 用
hexdump -C yourfile.php | head看开头是不是ef bb bf - 终端执行
php -l yourfile.php,它不依赖 Web 服务器,能直接暴露 Parse Error - 把文件另存为「UTF-8 无 BOM」格式(VS Code 右下角编码 → Save with Encoding → UTF-8)
浏览器里看到的是源码,不是空白
右键「查看网页源代码」,如果看到完整的 <?php echo 'test'; ?>,说明 PHP 根本没生效——Web 服务器没把请求交给 PHP 解析器,而是当成纯文本返回了。
验证方法:
-
curl -I http://localhost/test.php,看响应头里的Content-Type:如果是text/plain或text/html且没 PHP 执行痕迹,就是配置问题 - Apache 检查是否加载了
libphp.so或启用了php_module,以及AddType application/x-httpd-php .php - Nginx 检查
location ~ \.php$块是否存在,fastcgi_pass是否指向正确的 PHP-FPM 地址(如127.0.0.1:9000)
框架项目空白,别只盯入口文件
现代 PHP 框架(Laravel/ThinkPHP/CodeIgniter)的空白页,往往不是 index.php 的问题,而是后续加载环节崩了:
- 日志比页面更诚实:
storage/logs/laravel.log、runtime/log/、writable/logs/这些路径下的最新日志,常藏着真实错误 - 扩展缺失会静默失败:
mbstring、openssl、pdo缺一个,框架启动就终止,且不报错 - 配置文件末尾多了一行空格或 BOM,
require它时就会触发headers already sent,后续输出全失效
用 grep -rl $'\xEF\xBB\xBF' . 扫一遍整个项目,BOM 往往藏在 composer.json 或 config 目录下某个不起眼的 PHP 文件里。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











