Ubuntu下ThinkPHP错误排查清单
一 快速定位与开启调试
- 开启调试模式:在入口或配置中将APP_DEBUG设为true,可显示详细错误堆栈与SQL,便于定位。开发环境建议长期开启,生产环境务必关闭。
- 查看框架日志:检查**runtime/log/**下的日志文件,按日期与模块定位错误。
- 查看服务器与PHP-FPM日志:
- Nginx:/var/log/nginx/error.log
- PHP-FPM:常见路径如**/var/log/php7.4-fpm.log**(版本号可能不同)
- CLI与FPM环境一致性:用命令核对CLI与FPM的PHP版本与加载扩展是否一致,避免“命令行能跑、网页报错”。
- 查看版本:php -v
- 查看加载模块:php -m
- 定位php.ini:php --ini
- 辅助工具:安装并启用Xdebug进行断点调试,可直观查看变量与调用栈。
二 环境与兼容性检查
- PHP版本匹配:
- ThinkPHP 5.0+ 需 PHP ≥ 5.6.0
- ThinkPHP 6.0 需 PHP ≥ 7.2.5
- 安装常用扩展(按需):php-fpm、php-mysql、php-mbstring、php-xml、php-curl
- 示例:sudo apt-get install php php-fpm php-mysql php-mbstring php-xml php-curl
- Web服务与重写:
- Apache:启用mod_rewrite,虚拟主机配置AllowOverride All,重启服务。
- Nginx:配置try_files $uri $uri/ /index.php?$query_string; 并确保fastcgi_pass指向正确的PHP-FPM套接字(如:unix:/var/run/php/php7.4-fpm.sock)。
- 权限设置:确保Web服务用户对项目目录有读写权限(如:sudo chown -R www-data:www-data /path/to/project,sudo chmod -R 755 /path/to/project)。
三 URL路由与大小写问题
- 路由与重写:
- Apache:确认项目根目录有**.htaccess**,内容启用重写规则。
- Nginx:确保try_files规则存在,避免路由失效导致404。
- 大小写敏感:Linux文件系统区分大小写,常见“控制器不存在”是由于类名/文件名大小写不一致;统一目录与类命名规范。
- 缓存干扰:修改配置或路由后,清理**runtime/cache/**缓存,防止旧路由/配置生效。
四 数据库与验证码专项排查
- 数据库连接失败:核对config/database.php中的type、hostname、port、database、username、password;确认数据库服务可达、用户权限正确。
- 验证码不显示或报错:
- 安装GD库(如:sudo apt-get install php-gd),并在php.ini启用extension=gd。
- 检查session.save_path可写(常见为**/var/lib/php/sessions**),必要时设置目录权限。
- 输出验证码前清理输出缓冲:在生成图片逻辑前调用ob_end_clean(),避免“图片已生成但无内容/字符”。
五 常见症状与处理速查表
| 症状 |
优先检查 |
快速修复 |
| 页面空白或只显示500 |
调试模式、runtime/log、Web/PHP日志 |
开启APP_DEBUG;查看runtime/log与**/var/log/…**;修复语法/权限/配置错误 |
| 404或路由失效 |
Nginx try_files、Apache重写、大小写 |
补全try_files或**.htaccess**;统一控制器/文件名大小写 |
| 数据库连接失败 |
database.php、网络与权限 |
校正主机/端口/账号/密码;确认MySQL用户权限与网络可达 |
| 验证码不显示/错误 |
GD扩展、session路径、输出缓冲 |
安装php-gd并启用;设置session.save_path可写;加ob_end_clean() |
| “php module not found” |
缺失扩展 |
安装对应扩展(如php-mysql、php-mbstring),重启FPM/Apache |
| 502 Bad Gateway |
PHP-FPM未运行或套接字错误 |
启动FPM;核对fastcgi_pass路径;检查FPM日志 |
以上步骤覆盖了Ubuntu下ThinkPHP从“定位—环境—路由—数据—验证码”的高频故障面,按序排查通常可快速定位并解决问题。