PHP页面白屏主因是错误被静默屏蔽,需检查display_errors是否为On、error_reporting是否启用、log_errors是否开启及日志路径权限,再用php -l检测语法错误和BOM头问题。

PHP 页面白屏,大概率是错误被静默吞掉了,不是没报错,而是你没看见。
检查 display_errors 是否关闭
这是白屏最常见原因:PHP 报了错,但配置不让显示在页面上。默认情况下,很多生产环境会关掉它。
-
display_errors必须设为On(或1)才能在浏览器看到错误 - 该设置可能在
php.ini、.htaccess、或脚本里用ini_set('display_errors', '1')覆盖,优先级要理清 - 如果用了
error_reporting(0),即使display_errors开着,也啥都不显示——两者得一起查
确认 error_log 是否写入失败
当 display_errors 关闭时,错误通常写进日志。白屏却没日志?说明日志路径不可写,或 log_errors 根本没开。
- 检查
log_errors是否为On - 确认
error_log指向的文件路径存在,且 Web 服务器用户(如www-data或apache)有写权限 - 常见坑:
error_log = /var/log/php_errors.log路径存在但权限不对,或目录属主不是运行 PHP 的用户
排查致命语法错误(如 Parse error)
这类错误在脚本加载阶段就挂了,连 ini_set() 都没机会执行,所以改配置也看不到——必须靠命令行验证。
立即学习“PHP免费学习笔记(深入)”;
- 用
php -l your_script.php检查语法,它不依赖 Web 环境,能直接爆出Parse error行号 - 注意 BOM 头:UTF-8 with BOM 的文件可能导致
Cannot redeclare或空白开头,用编辑器转成 UTF-8 无 BOM 再试 - 短标签
在short_open_tag = Off时直接解析失败,表现为整页空白,检查是否混用了短标签
留意输出已发送(headers already sent 类错误)
这类错误有时不显示,因为 header 发送后 PHP 无法再修改输出缓冲,错误信息被丢弃,只剩白屏。
- 检查是否有空格、换行、BOM 出现在
之前,或include/require的文件末尾有多余空白 - 启用
output_buffering = On可缓解,但只是掩盖问题,真正要清理的是那些“看不见的输出” - 用
headers_sent($file, $line)手动检测,快速定位哪行提前输出了内容
白屏本身不传递任何线索,真正关键的是「错误去哪了」——是被屏蔽、被丢弃、还是根本没触发。别急着改代码,先盯住 PHP 的错误流向:显示开关、日志路径、解析阶段、输出时机,四点卡住,基本就漏不掉了。











