display_errors = On 会直接向浏览器输出含完整绝对路径的错误信息,极易泄露服务器目录结构;生产环境必须设为Off,并检查.php.ini、.user.ini、APP_DEBUG及缓存,确保彻底关闭。

会,而且非常容易泄露完整绝对路径。
display_errors = On 是生产环境最危险的 PHP 配置之一。一旦开启,任何未捕获的错误(比如语法错误、类未定义、函数不存在、致命异常)都会直接以 HTML 形式输出到浏览器页面,其中就包含:
- 错误发生的完整文件绝对路径(如
/www/wwwroot/myapp/app/controller/User.php) - 调用栈中每一层的文件路径和行号
- 框架或 Composer 自动加载失败时暴露的 vendor 目录结构
- ThinkPHP、Laravel 等框架在
APP_DEBUG=true时还会叠加渲染更详细的调试视图,路径信息更加密集
小皮面板默认是 display_errors = Off,但以下情况会导致它被意外打开:
- 项目根目录或子目录存在
.user.ini,里面写了display_errors = On(常见于复制开发环境配置过来) - 某个入口文件(如
admin/index.php)里调用了ini_set('display_errors', '1') - ThinkPHP 的
.env文件里设了APP_DEBUG=true,而你没清空runtime/缓存,导致旧配置仍生效 - 小皮面板切换 PHP 版本后,新版本的
php.ini未同步修改,沿用了旧版开启状态
验证是否真关掉了,别只看面板界面:
php -i | grep display_errors
输出必须是:
display_errors => Off => Off
如果显示 On,哪怕只有一处开着,路径就可能泄露——尤其是当某段代码出错但没被框架捕获时,PHP 会兜底报错,直接把路径打出来。
关闭方法很简单:
- 修改全局
php.ini(小皮面板 → PHP → 设置 → 配置文件),确认display_errors = Off - 检查站点根目录下的
.user.ini,删掉或注释掉相关行 - 清空
runtime/目录(ThinkPHP)或storage/framework/views/(Laravel)等缓存目录 - 重启 PHP-FPM 或整个小皮服务
路径泄露不只是“难看”,它让攻击者能精准定位你的 Web 根目录、应用结构、甚至配合目录遍历尝试读取敏感文件(如 .env、数据库配置)。这不是假设,是真实发生过的渗透起点。

















