在 Debian 上调试 ThinkPHP 的实用流程
一 开启调试与内置输出
- 在项目的配置中开启调试:将APP_DEBUG设为true(如 config.php 或 .env),开发环境可显示详细错误与堆栈;上线务必关闭。
- 使用框架自带输出与跟踪:
- 变量与结构:使用dump($var) 打印复杂变量;
- 性能与区间:使用debug_start(‘label’) / debug_end(‘label’) 查看代码段耗时与内存;
- 页面级跟踪:开启页面 Trace以查看执行流程、请求与异常;
- SQL 问题:开启SQL 日志或用模型的**getLastSql()**查看最近执行的 SQL。
- 注意:页面 Trace 与调试模式并非强绑定,可单独开启 Trace 而不启用完整调试模式。
二 日志与异常定位
- 框架日志:查看runtime/log下按日期/模块记录的日志,便于线上问题回溯;必要时在代码中显式写入日志(如 \think\facade\Log::error($msg))。
- 服务器与 PHP 日志:
- Apache:/var/log/apache2/error.log;
- Nginx:/var/log/nginx/error.log;
- PHP-FPM:/var/log/php-fpm.log 或 systemd 的 journal(如:journalctl -u php-fpm)。
- 异常与错误处理:利用框架的异常处理机制(如自定义异常处理器)统一捕获与格式化输出,便于前后端联调与告警。
三 Xdebug 断点调试(推荐)
- 安装扩展(Debian 常见做法):
- Debian 11/12 常用:sudo apt install php-xdebug
- 或按版本安装:sudo apt install php7.4-xdebug / php8.2-xdebug
- 配置 php.ini(示例,路径与版本请按实际调整):
- zend_extension=xdebug.so
- xdebug.mode=debug
- xdebug.start_with_request=yes
- xdebug.client_host=127.0.0.1
- xdebug.client_port=9003
- xdebug.log=/var/log/php-xdebug.log
- IDE 设置:在 PhpStorm/VSCode 中配置Server与Path Mappings,以项目根目录为本地路径、服务器路径为部署目录;浏览器访问触发断点即可单步、查看变量与调用栈。
- CLI 调试:命令行执行脚本时也可触发 Xdebug(如:php -dxdebug.mode=debug your_script.php)。
四 Debian 环境专项排查
- Web 服务器与重写规则:
- Apache:启用模块与目录覆盖
- sudo a2enmod rewrite
- 在站点配置中设置 AllowOverride All
- sudo systemctl restart apache2
- Nginx:确保 try_files $uri $uri/ /index.php?$query_string; 已配置,且 SCRIPT_FILENAME 正确指向入口文件。
- 目录权限与运行用户:确保 runtime、public/uploads 等目录对 www-data(或相应运行用户)可写;避免在生产环境使用777。
- 常见问题速查:
- 空白页或仅显示 500:多为 PHP 语法/致命错误被抑制,先开调试或查 PHP-FPM/Web 错误日志;
- 路由 404:确认 Web 服务器重写已启用,且入口为public/index.php;
- 验证码/静态资源 404:检查 public 目录映射与权限;
- 数据库连接失败:核对 .env 中 DB 配置、数据库是否允许远程/本地连接、用户权限与密码。
五 高效调试清单
- 开发阶段:开启APP_DEBUG与页面 Trace,配合dump/debug_start/debug_end快速定位;
- 线上阶段:关闭调试,打开文件日志与必要的SQL 日志,异常统一走处理器记录;
- 交互调试:配置Xdebug 3.x(client_port=9003),IDE 设置 Path Mappings,浏览器或 CLI 触发断点;
- 环境核对:确认重写规则、目录权限、PHP 错误报告与扩展(如 pdo_mysql、mbstring、gd、curl、zip)均已就绪;
- 问题分类:区分 Notice/Warning/Fatal 等级,优先修复导致Fatal与Warning的根因。