调试模式生效需同时满足APP_DEBUG=true且.env正确加载,仅改app.php中debug配置或仅设.env无效;.env须在项目根目录、UTF-8无BOM、等号无空格,并确保think-env扩展在App::initialize()前解析。

调试模式必须同时满足两个条件才真正生效:APP_DEBUG=true 且 .env 文件被正确加载,缺一不可。只改 app.php 中的 debug 配置,而 .env 没加载或路径错,页面照样白屏或报 500;反之,.env 加载了但 app.php 里 debug 还是 false,错误信息也只会显示“页面错误!请稍后再试~”。
确认 .env 是否加载成功
ThinkPHP 不会自动加载 .env,它依赖 think-env 扩展在 App::initialize() 前完成解析。常见失败点:
-
.env必须放在项目根目录(即public的同级目录),不是public/下、也不是config/下 - 不要在
bootstrap/app.php或任何配置文件中提前调用Env::get(),此时.env尚未读取 - Swoole / CLI 场景下需手动调用
Dotenv\Dotenv::createImmutable(__DIR__.'/..')->safeLoad() - 验证方式:在
public/index.php开头插入两行调试代码:var_dump($_ENV['APP_DEBUG'] ?? 'not set');<br>var_dump(getenv('APP_DEBUG'));若两者都为false或'not set',说明.env根本没进 PHP 环境
修改 app.php 中的 debug 配置
打开 app/config/app.php,找到这一段:
'debug' => false,
改为:
立即学习“PHP免费学习笔记(深入)”;
'debug' => true,
注意:这个值是布尔类型,不是字符串 'true',否则框架会当成 false 处理。另外,show_error_msg 参数也要设为 true,否则即使 debug 开了,非调试模式下的错误页仍不显示详情:
// 显示错误信息<br>'show_error_msg' => true,
为什么开了调试还是看不到 SQL 日志或 Trace 面板
ThinkPHP 6.1 的 Trace 调试面板和 SQL 日志输出,依赖三个开关同时开启:
-
app_debug = true(已在app.php设置) -
trace通道启用:检查config/log.php中'channels' => ['trace']是否在'default'列表里 -
trace类型设为html或file:在config/trace.php中确认'type' => 'html'(开发时推荐)
漏掉任意一项,Trace 面板都不会出现,SQL 日志也不会写入 runtime/log/。
浏览器访问时仍报 404 或空白页
这不是调试模式的问题,而是 Web 服务器文档根目录没指向 public。ThinkPHP 6+ 强制要求入口为 public/index.php,所有静态资源、重写规则都基于此。典型错误:
- Apache 的
DocumentRoot指向项目根目录(如/var/www/mytp),而不是/var/www/mytp/public - Nginx 的
root配置漏了public后缀,或者fastcgi_param SCRIPT_FILENAME拼错了路径 - 本地快速测试时忘了加
-t public/:正确命令是php -S localhost:8000 -t public/
只要文档根目录不对,框架连初始化都进不去,debug 配置根本没机会执行。



















