在Linux环境下调试ThinkPHP的第一步是开启调试模式,这会解锁详细的错误信息、SQL日志、页面Trace等功能。
public/index.php)中添加define('APP_DEBUG', true);,直接强制开启调试模式(优先级最高)。.env文件中设置APP_DEBUG=true(推荐,符合“开发环境与生产环境分离”的最佳实践,避免误提交到线上)。ThinkPHP提供了一系列便捷的内置工具,无需额外安装扩展即可快速调试:
dump($variable, $halt = false, $label = null, $strict = false)函数输出变量内容到浏览器。相比var_dump(),它更友好(支持HTML格式、可折叠),例如dump($userList, true, '用户列表')会显示带标签的变量信息并停止后续代码执行。G('start')和G('end')记录代码段的运行时间及内存占用。例如:G('begin');
$data = UserModel::where('status', 1)->select();
G('end');
echo '执行时间:'.G('begin', 'end').'秒<br>';
echo '内存占用:'.G('begin', 'end', 'm').'KB';
SHOW_PAGE_TRACE(在配置文件或.env中设置SHOW_PAGE_TRACE=true),会在页面底部显示调试工具栏,包含基本信息、文件加载、流程追踪、错误日志、SQL语句等模块,直观展示页面执行的完整流程。若需要逐行调试(如跟踪变量变化、函数调用栈),推荐使用Xdebug扩展配合IDE(如PhpStorm、Visual Studio Code):
sudo apt install php-xdebug,需根据PHP版本调整),或从源码编译。zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes # 自动启动调试
xdebug.client_host=127.0.0.1 # IDE所在主机IP
xdebug.client_port=9003 # 调试端口(默认9003,需与IDE一致)
Preferences > PHP > Servers,添加项目服务器(主机名为127.0.0.1,端口为80/443,勾选“Use path mappings”并将项目目录映射到服务器路径);然后通过Run > Start Listening for PHP Debug Connections开启监听,触发断点(如代码中添加xdebug_break()或在IDE中点击行号左侧设置断点)即可进入调试模式。ThinkPHP的日志系统支持分级记录(如错误、SQL、调试信息),可将问题信息持久化到文件或数据库,便于后续分析:
config/logging.php中设置log_level(如'log_level' => 'debug',记录所有级别信息;生产环境建议设为'error'或'warn')。Log类手动写入日志,例如:Log::record('用户登录失败,账号:'.$username, 'error'); // 记录错误日志
Log::write('SQL执行慢,耗时:'.$time.'秒', 'sql'); // 记录SQL日志(需调试模式开启)
runtime/log目录下(如runtime/log/202510/31.log),可通过tail -f runtime/log/202510/31.log实时查看最新日志。确保Web服务器(如Nginx、Apache)正确转发PHP请求,避免因配置错误导致调试信息无法显示:
server块中添加以下配置,将.php请求转发到PHP-FPM:location ~ \.php$ {
include snippets/fastcgi-php.conf; # 加载FastCGI配置
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 根据PHP版本调整socket路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
mod_php或php-fpm模块已启用,配置<FilesMatch \.php$>块转发请求到PHP处理器。Debugbar是一款强大的调试工具栏,可显示数据库查询、路由信息、配置参数、视图渲染时间等数据,直接嵌入页面底部(不影响用户体验):
barryvdh/laravel-debugbar(ThinkPHP兼容):composer require barryvdh/laravel-debugbar --dev
config/app.php的providers数组中添加Barryvdh\Debugbar\ServiceProvider::class(仅开发环境需要)。对于API项目或需要快速测试的场景,可通过命令行运行ThinkPHP项目,实时查看输出信息:
php think run,默认监听8000端口,访问http://localhost:8000即可查看项目运行结果。php think make:controller User生成控制器、php think tinker进入交互式命令行(可测试模型、数据库操作),例如:php think tinker
>>> $user = UserModel::find(1);
>>> dump($user->toArray());
命令行调试适合快速验证逻辑,避免频繁切换浏览器。