Nginx 下 PHP 页面显示空白怎么办?

Nginx + PHP-FPM 页面空白的排查:PHP 错误未显示(display_errors)、SCRIPT_FILENAME 路径错、PHP-FPM 未运行、error_reporting 配置;附快速开启错误显示与 FAQ。

最佳实践
Nginx 下 PHP 页面显示空白怎么办?封面

PHP 空白页 = PHP 执行时出了致命错误,但错误信息被配置吞掉了。 排查第一步永远是让错误现形:临时开 display_errors,或直接看 PHP-FPM 的错误日志。

第一步:让错误显示出来

方法一(改 PHP 配置):编辑 PHP 的 php.ini(注意 FPM 那份,不是 CLI):

display_errors = On
error_reporting = E_ALL

systemctl restart php*-fpm 后刷新页面,空白页就会变成具体报错。

方法二(代码里临时开,更快):在入口文件顶部加:

<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);

方法三(看日志,生产推荐)

tail -f /var/log/php*-fpm/error.log      # FPM 自身日志
tail -f /var/log/nginx/error.log         # Nginx 侧
# PHP 的 error_log 位置由 php.ini 的 error_log 指定

高频根因清单

错误现形后按图索骥;没现形前可先看这几个:

  1. PHP-FPM 没在跑systemctl status php*-fpm;没在跑时 Nginx 通常 502 而非空白,但部分配置下会出空白。
  2. SCRIPT_FILENAME 路径错:Nginx 配置里 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;——如果 root 指错,PHP-FPM 拿到的路径不存在,返回空白而非 404。用 nginx -T 核对 root,再 ls 确认文件真在。
  3. 内存耗尽Fatal error: Allowed memory size exhausted——调大 memory_limit,并查是哪个操作吃的。
  4. 扩展缺失:代码用到 mysqli/gd/curl 而 FPM 环境没装对应扩展(CLI 装了不代表 FPM 装了)。
  5. 权限:PHP 要读的文件/要写的目录对 FPM 用户不可达。

修完后:把 display_errors 关回去

display_errors = On 只适合排障窗口。生产环境正确姿势是 display_errors = Off + log_errors = On + 明确 error_log 路径——错误进日志,不给用户看堆栈(堆栈里的路径和代码细节是攻击者的情报)。

观测云对照

白屏故障最难受的是"用户侧全挂、服务端无感"。把 PHP-FPM 错误日志与应用日志接入观测云,Fatal error、未捕获异常实时可检索,并按错误量设告警;前端再接 RUM,白屏率、页面加载失败按版本/地域出报表——PHP 报错与用户影响的因果链直接闭环。

常见问题(FAQ)

Q:错误日志里也是空的?
A:确认查的是 FPM 的 php.ini(php -r "echo php_ini_loaded_file();" 查的是 CLI 的,别混);再看 log_errors 是否 On、error_log 路径是否存在可写。

Q:只有某些页面空白,首页正常?
A:说明框架引导正常、是特定控制器/模板炸了。空白糖纸包住的具体错误一定会落在 PHP 错误日志里,按时间戳找。

Q:静态文件正常、所有 PHP 都空白?
A:重点查 fastcgi 配置——SCRIPT_FILENAME 路径错误会让所有 PHP 请求拿到"找不到文件"的静默结果。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台