宝塔面板php错误日志需手动开启log_errors并指定error_log路径才生效;必须修改对应php版本的php.ini(如/www/server/php/80/etc/php.ini),设log_errors = on、error_log = 网站可写路径、display_errors = off,改后重载配置并验证日志写入。

宝塔面板里 PHP 错误日志默认不记录到文件,必须手动开启 log_errors 并指定 error_log 路径,否则 phpinfo() 显示为 On 也不代表真在写日志。
确认当前 PHP 版本和配置文件位置
不同 PHP 版本的配置文件独立存在,不能改错版本。在宝塔面板「网站」→「PHP 设置」→「配置文件」里看到的路径才是真实生效的 php.ini。常见路径如:/www/server/php/80/etc/php.ini(80 表示 PHP 8.0),/www/server/php/74/etc/php.ini 等。改错版本的配置文件完全无效。
- 进宝塔前先记下你网站用的是哪个 PHP 版本(比如 7.4、8.0、8.2)
- 不要直接编辑
/etc/php.ini或其他全局路径——宝塔不读那些 - 改完配置后必须点「重载配置」或重启对应 PHP 服务,否则不生效
设置 log_errors 和 error_log 的关键参数
只开 log_errors = On 不够,PHP 还要明确知道往哪写。宝塔默认可能把 error_log 指向了 /tmp/php_errors.log,但该路径常被清理或权限不足,导致日志“开了却没写”。推荐改到网站目录下可控路径。
-
log_errors = On(必须是On,不是1或on) -
error_log = /www/wwwroot/your-site.com/runtime/php_error.log(替换成你的真实网站路径,确保目录存在且 PHP 进程有写权限) -
display_errors = Off(生产环境务必关掉,避免错误信息暴露在前端) - 可选:
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED(按需调整错误级别,避免日志刷屏)
验证日志是否真在写入
改完配置并重载后,别只信面板显示“已保存”,得看文件有没有内容增长。最简单方法是触发一个错误:
file_put_contents('/www/wwwroot/your-site.com/test.php', '<?php undefined_function(); ?>');
然后浏览器访问 http://yoursite.com/test.php,再立刻检查你设的 error_log 文件:
- 用宝塔「文件」功能打开对应
php_error.log,看是否有新行(如PHP Fatal error: Uncaught Error: Call to undefined function undefined_function()) - 如果文件为空,检查路径权限:
ls -l /www/wwwroot/your-site.com/runtime/,确保属主是www,权限至少755 - 如果报
Permission denied,执行:chown -R www:www /www/wwwroot/your-site.com/runtime
注意多站点共用 PHP 版本时的日志隔离
同一个 PHP 版本被多个网站共用时,所有网站都走同一份 php.ini,也就共用一个 error_log。这会导致日志混杂,排查困难。解决办法只有两个:
- 为每个网站单独安装不同 PHP 版本(适合关键业务站)
- 改用
ini_set('error_log', '/www/wwwroot/site-a.com/logs/php_error.log')在入口脚本里动态指定(仅对当前请求生效,需每处加)
后者更灵活,但要注意:如果网站用了 OPcache 或长连接(如 Swoole),ini_set 可能不生效,优先推荐分版本部署。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











