ThinkPHP6 500报错,开启错误日志查看原因

前言

ThinkPHP6网站突然500报错,页面啥也不显示,不知道哪错了?本文讲怎么开启错误显示和日志,快速定位问题。

一、为什么500不显示错误

生产环境为了安全,关闭了错误显示,直接返回500,不显示具体错误信息。

这是对的,不然用户能看到你的代码路径、数据库密码等敏感信息。

但排查问题就不方便了。

二、临时开启错误显示

修改 .env 文件

项目根目录下有个 .env 文件:

APP_DEBUG = true

把 APP_DEBUG 改成 true。

刷新页面,就能看到具体错误了。

注意

排查完记得改回 false! 生产环境不能开debug。

三、开启日志记录

就算不开debug,错误也会记录到日志文件里。

日志配置

config/log.php 文件:

return [
    // 默认日志通道
    'default' => 'file',

    // 日志通道列表
    'channels' => [
        'file' => [
            // 日志记录方式
            'type' => 'File',
            // 日志保存目录
            'path' => '',
            // 单文件日志写入
            'single' => false,
            // 独立日志级别
            'apart_level' => [],
            // 最大日志文件数量
            'max_files' => 30,
        ],
    ],
];

日志位置

默认在 runtime/log/ 目录下。

按日期分目录:

runtime/log/
├── 2026-10/
│   ├── 08.log
│   ├── 07.log
│   └── 06.log
└── 2026-09/
    └── ...

查看今天的错误

tail -f runtime/log/2026-10/08.log

四、常见500错误排查

1. 目录权限问题

runtime目录没权限写:

Permission denied

解决:

chmod -R 755 runtime
chown -R www:www runtime

2. 缺少扩展

Call to undefined function xxx()

解决: 装对应的PHP扩展。

3. 数据库连接失败

SQLSTATE[HY000] [1045] Access denied

检查: 数据库配置对不对。

.env 或 config/database.php:

'hostname' => '127.0.0.1',
'database' => '数据库名',
'username' => '用户名',
'password' => '密码',

4. 路由错误

Route not found

检查: 路由配置对不对。

5. 模板找不到

template not exists

检查: 模板文件路径对不对。

五、手动写日志

代码里可以手动写日志:

// 记录错误
Trace::error('这是一个错误信息');

// 记录警告
Trace::warning('这是一个警告');

// 记录信息
Trace::info('这是一个信息');

或者用助手函数:

trace('这是调试信息', 'debug');

六、查看PHP错误日志

除了ThinkPHP的日志,PHP本身也有错误日志。

查看PHP错误日志位置

php --ini | grep error_log

Nginx错误日志

tail -f /var/log/nginx/error.log

七、常见排查步骤

第一步:开debug看具体错误

改 .env:

APP_DEBUG = true

刷新页面,看具体报什么错。

第二步:看ThinkPHP日志

tail -f runtime/log/2026-10/08.log

第三步:看Nginx错误日志

tail -f /var/log/nginx/error.log

第四步:看PHP错误日志

tail -f /var/log/php-fpm/error.log

第五步:解决完改回debug

改完 .env:

APP_DEBUG = false

八、常见坑

坑1:开了debug还是不显示

缓存没清。

解决: 删除runtime目录下的缓存:

rm -rf runtime/cache/*

坑2:日志目录没权限

stream_socket_client(): unable to connect

runtime目录没写权限。

解决:

chmod -R 755 runtime

坑3:生产环境开着debug

危险!用户能看到你的敏感信息。

解决: 排查完立刻改回 APP_DEBUG = false。

坑4:日志太大占磁盘

日志越积越多,磁盘满了。

解决: 设 max_files,自动删除旧日志:

'max_files' => 30,

坑5:502和500搞混

  • 500:PHP代码错误
  • 502:PHP-FPM挂了

区分: 看Nginx错误日志。

总结

记住:

  1. 改 .env 的 APP_DEBUG = true 临时看错误
  2. 生产环境必须改回 false
  3. 日志在 runtime/log/ 目录
  4. 排查完记得清缓存
  5. 500是PHP代码问题,502是FPM问题

排查流程:

开debug → 看具体报错 → 看ThinkPHP日志 → 看Nginx日志 → 解决问题 → 关debug

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:31