调试模式是ThinkPHP提供的基础调试功能,开启后可显示详细错误信息、关闭模板缓存(修改即时生效)、记录SQL日志等。
.env文件(本地开发环境优先级高于config文件),添加或修改以下内容:APP_DEBUG = true
APP_TRACE = true # 开启页面Trace(显示SQL、请求等信息)
若使用config/app.php,则设置:'app_debug' => true,
'app_trace' => true,
ThinkPHP提供了一系列便捷的调试函数和类,用于快速输出变量、记录性能和错误信息。
dump()函数输出变量内容(比var_dump更友好,支持格式化),例如:$user = UserModel::find(1);
dump($user); // 输出用户信息及数据类型
G()函数计算代码执行时间和内存占用,例如:G('start');
// 需要测试的代码(如数据库查询、循环等)
$list = UserModel::select();
G('end');
echo '执行时间:'.G('start', 'end', 's').'秒'; // 秒
echo '内存占用:'.G('start', 'end', 'm').'KB'; // KB
SQL_DEBUG_LOG(在.env中设置)记录所有SQL语句及执行时间,日志文件位于runtime/log目录下:SQL_DEBUG_LOG = true
trace()函数手动输出变量到Trace栏,例如:trace('当前用户ID:', $user->id, 'user');
这些信息会在页面Trace栏的“debug”标签中显示。Xdebug是PHP专业调试工具,支持断点调试、堆栈跟踪、变量监视等功能,需与IDE(如PhpStorm、VSCode)配合使用。
sudo apt install php-xdebug # 根据PHP版本选择(如php8.2-xdebug)
php --ini找到路径,如/etc/php/8.2/cli/php.ini),添加以下内容:[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes # 自动启动调试
xdebug.client_host=127.0.0.1 # IDE所在机器IP(本地为127.0.0.1)
xdebug.client_port=9003 # Xdebug默认端口(Xdebug 3+)
xdebug.idekey=PHPSTORM # IDE标识(与PhpStorm配置一致)
xdebug.discover_client_host=On # 自动发现客户端IP
保存后重启PHP服务:sudo systemctl restart php8.2-fpm # 若使用PHP-FPM
info.php文件(<?php phpinfo(); ?>),访问该页面,搜索“xdebug”确认扩展已加载。PhpStorm是支持ThinkPHP调试的主流IDE,配置步骤如下:
File > Settings > PHP,点击“+”添加本地PHP解释器(选择PHP安装路径,如/usr/bin/php),确保Xdebug扩展已勾选。File > Settings > PHP > Servers,点击“+”添加服务器:
localhost(与项目域名一致)localhost(或项目域名,如thinkphp.local)80(HTTP端口)或443(HTTPS)XdebugUse path mappings,将项目根目录(如/var/www/html/thinkphp)映射到本地项目路径(如/home/user/projects/thinkphp)。ThinkPHP的日志系统可记录错误、异常、SQL等信息,便于离线排查问题。
.env中设置日志级别(如DEBUG记录详细信息):LOG_LEVEL = DEBUG
Log类记录自定义信息,例如:use think\facade\Log;
Log::error('数据库连接失败:'.$e->getMessage()); // 记录错误日志
Log::info('用户登录成功:'.$user->username); // 记录普通信息
runtime/log目录下,按日期分文件(如20251031.log)。php.ini中的xdebug.client_host是否为IDE所在机器IP(本地为127.0.0.1),xdebug.port是否与IDE配置一致(默认9003);重启PHP服务和浏览器。http协议(https可能导致端口冲突);清除PhpStorm缓存(File > Invalidate Caches)。Servers配置中的Path mappings是否正确,服务器路径为Ubuntu上的项目绝对路径,本地路径为Windows上的项目路径(若跨系统)。通过以上步骤,可在Ubuntu环境下高效调试ThinkPHP代码,快速定位和解决问题。调试完成后,记得关闭调试模式(APP_DEBUG = false),避免影响生产环境性能。