ThinkPHP调试模式需设app_debug=true,配合PHP的display_errors=On和error_reporting=E_ALL;dump()注意调用时机与编码,SQL日志需开启数据库log.enable,调试工具栏仅HTTP请求可见。
ThinkPHP 默认不启用完整调试功能,必须手动开启,否则 dump()、日志追踪、错误堆栈等都不可见。关键在于修改配置项 app_debug,它控制整个调试开关。
app.php(或 config/app.php)中设置 'app_debug' => true
false,否则会暴露敏感路径和变量信息php think run),环境变量 APP_DEBUG=1 也可临时生效即使 app_debug = true,若 PHP 底层错误显示被禁用,ThinkPHP 也无法渲染出友好的调试页面。常见于 Nginx + PHP-FPM 部署后。
display_errors = On(开发机通常默认开,服务器常关)error_reporting 至少包含 E_ALL,推荐设为 E_ALL | E_STRICT
ini_set('display_errors', '0') 等代码强行关闭dump() 是 ThinkPHP 提供的简易调试函数,但它不是万能的,行为依赖上下文。
dump($data) 会中断后续执行并输出 HTML 格式内容;但在中间件、模型事件、命令行任务中可能无输出或报错dump() 尝试写入 HTML 失败——此时改用 halt($data) 或写日志 Log::info($data)
dump() 前加 header('Content-Type: text/html; charset=utf-8');,但更稳妥做法是统一配置 default_charset 为 utf-8
和请求链路ThinkPHP 的调试工具栏(Debug Toolbar)只在 app_debug=true 且请求为 HTTP 时自动注入,但 SQL 执行详情需额外配置。
'log' => ['enable' => true](位于 database.php)runtime/log/ 下,文件名含日期,内容包括绑定参数和执行时间Db::getLastSql() 或监听 sql_explain 事件捕获Log::info('当前查询SQL', ['sql' => Db::getLastSql(), 'params' => $params]);
调试最常被忽略的是环境隔离:本地 .env 文件里设了 APP_DEBUG=true,但服务器部署时用的是打包后的 config/app.php,而这个文件里仍写着 false——两个配置打架,结果就是你以为开了调试,其实没开。