PHP 7.3 升级后白屏主因是致命错误被静默屏蔽,需确认实际生效的 php.ini(以 phpinfo() 显示路径为准),开启 display_errors = On 且 error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT,重启 PHP 服务,并检查 .user.ini、错误日志权限及框架覆盖问题。

PHP 7.3 升级后白屏,大概率是致命错误被静默吞掉,没开 display_errors,也没把错误写进日志 —— 先确认日志路径和 PHP 配置是否真生效,别在错误的 php.ini 里改。
查清楚当前生效的 php.ini 路径
宝塔多个 PHP 版本共存,容易改错配置文件。白屏时 Web 服务用的未必是你以为的那个 php.ini。
- 在宝塔面板 → 网站 → 对应站点 → 「PHP 版本」旁点「设置」→ 「配置文件」,看顶部显示的路径,这是 Nginx/Apache 实际加载的
php.ini - 终端执行
php -i | grep "Loaded Configuration File"(注意:这是 CLI 模式下的路径,和 Web 不一定一致;Web 下建议用phpinfo()页面确认) - 新建一个
info.php放到网站根目录,内容为<?php phpinfo(); ?>,访问它,搜索「Loaded Configuration File」,以这个为准
开启 display_errors 并确认 error_reporting 级别
仅开 display_errors = On 不够,如果 error_reporting 被设成 0 或过低,连 E_ERROR 都不显示。
- 编辑上一步确认的
php.ini,找到并修改这两行:display_errors = Onerror_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT(PHP 7.3 推荐值,兼容性好) - 改完必须重启 PHP 服务:宝塔面板 → 软件管理 → PHP 7.3 → 「重启」按钮,不是重载
- 若仍白屏,检查是否被 .htaccess 或 user.ini 覆盖:查看网站根目录下有无
.user.ini,里面若有display_errors=Off或error_reporting=0,删掉或改成On/E_ALL
查看 PHP 错误日志定位具体报错
白屏时 display_errors 可能因输出缓冲、header 已发送等原因失效,日志才是唯一可靠来源。
立即学习“PHP免费学习笔记(深入)”;
- 宝塔默认 PHP 错误日志路径是:
/www/wwwlogs/php_error.log(全局);也可在php.ini中查error_log配置项确认 - 实时监听日志:终端执行
tail -f /www/wwwlogs/php_error.log,然后刷新白屏页面,看有没有新错误输出 - 常见升级后报错:
•Call to undefined function mysql_connect()→ PHP 7.3 移除了mysql_*函数,需换mysqli或PDO
•Cannot declare class XXX, because the name is already used→ 类重复加载,检查require_once是否漏写,或自动加载器冲突
•Array and string offset access syntax with curly braces is deprecated→ 旧代码用$str{0},要改成$str[0]
临时加一句 error\_reporting 强制输出(调试用)
如果改了 php.ini 还看不到错误,可能是某些框架或 CMS 在入口文件开头就调用了 error_reporting(0),直接覆盖了配置。
- 在网站入口文件(如
index.php)最顶部插入:error_reporting(E_ALL); ini_set('display_errors', '1'); - 注意顺序:必须在任何输出(包括空格、BOM)之前,否则会报「headers already sent」而失败
- 这招只用于快速定位,上线前务必删掉,避免暴露敏感信息
真正麻烦的不是找不到错误,而是日志里没记录 —— 很可能因为 error_log 路径不可写,或 SELinux/权限限制导致 PHP 根本写不进日志。遇到这种情况,先 ls -l /www/wwwlogs/ 看属组是不是 www,再 chown -R www:www /www/wwwlogs/,然后再试。



















