Ubuntu下PHP7.4浏览器不显示报错仅返回HTTP500如何解决
问题根源
你在测试脚本里写的ini_set()配置从根上就不会生效:语法错误属于PHP脚本解析阶段触发的错误,此时PHP还没开始执行脚本内的任何代码,你写在脚本头部的错误显示配置根本没有运行机会,这是你试了各种脚本内配置方案都没用的核心原因。
Ubuntu 20.04 官方源安装的Apache 2.4 + PHP 7.4环境,默认就在全局配置层关闭了错误前端输出,触发致命错误(包括语法解析错误)时Apache会直接返回HTTP 500状态码,错误详情仅写入服务端日志。
可落地解决步骤
- 第一步:定位正确的PHP配置文件
Apache运行时加载的PHP配置和命令行CLI版本的配置是两个独立文件,别改错路径。Ubuntu 20.04下Apache对应PHP7.4的配置文件默认路径是/etc/php/7.4/apache2/php.ini,如果不确定路径,可以写一个仅包含<?php phpinfo();的测试文件放到站点目录,访问后查找Loaded Configuration File项,显示的路径就是你要改的正确文件。 - 第二步:修改PHP全局配置
打开上述php.ini文件,找到三个配置项,修改为如下值(原来如果是Off或者其他值直接替换,注意配置项前面不要加分号,否则会被当成注释不生效):display_errors = On display_startup_errors = On error_reporting = E_ALL - 第三步:排查高优先级配置覆盖
很多人改完php.ini还是不生效,是因为Apache的虚拟主机配置、目录配置或者站点目录下的.htaccess文件里硬编码了关闭错误显示的规则,这种管理员级配置优先级高于php.ini,且脚本内的ini_set()无法覆盖。你可以直接在对应开发站点的虚拟主机配置块(一般存放在/etc/apache2/sites-available/下的对应站点conf文件)里加入如下配置,强制开启错误显示:
这里<Directory /你的站点根目录绝对路径> php_flag display_errors On php_flag display_startup_errors On php_value error_reporting 32767 </Directory>32767是PHP7.4下E_ALL的对应数值,直接写常量名在Apache配置里经常出现不识别的问题,写数值最稳妥。 - 第四步:重启Apache加载配置
配置改完必须执行重启命令,reload参数有时候不会完全重载PHP模块配置,直接执行:sudo systemctl restart apache2
效果验证
重启后先访问你写的phpinfo()测试页,搜索display_errors,确认Master Value和Local Value都显示为On,再访问你之前写的带语法错误的测试脚本,就能直接在页面看到具体的语法报错提示,和旧Win2003服务器效果一致。
注意:这个配置仅适合内网开发环境使用,正式对外服务的生产环境一定要关闭前端错误显示,避免泄露服务器路径、代码逻辑等敏感信息。
内容的提问来源于stack exchange,提问作者uffa14
相关产品推荐
相关产品推荐

