必须彻底移除调试组件:删除配置中debug模块声明及bootstrap项,设yii_debug=false、yii_env='prod',清空runtime/debug/、runtime/和web/assets/,验证无工具栏、禁用/debug路由且日志无yii\debug相关记录。

Yii2.0.47 生产环境必须彻底移除调试组件,不能只靠关掉 YII_DEBUG 或限制 IP。核心是切断 debug 模块的注册、加载与响应能力,否则仍存在信息泄露和性能风险。
确认并删除 debug 模块配置
检查应用主配置文件(如 config/web.php)中是否注册了 debug 模块:
- 删除或注释掉
'debug' => ['class' => 'yii\debug\Module']这类模块声明 - 检查
'bootstrap' => ['debug']是否存在,若有则移除'debug' - 若使用 Advanced 模板,还需检查
frontend/config/main-local.php、backend/config/main-local.php等本地配置文件,确保 debug 模块未被意外启用
清理入口脚本中的调试常量
打开 web/index.php(及 console/index.php,若需 CLI 调试):
- 将
defined('YII_DEBUG') or define('YII_DEBUG', true);改为define('YII_DEBUG', false); - 确保
YII_ENV明确设为'prod',例如:define('YII_ENV', 'prod'); - 避免使用
or define()形式,防止被其他脚本重复定义导致不可预期行为
清空运行时缓存与调试数据
debug 模块生成的数据会残留并可能被间接访问:
- 删除
runtime/debug/目录下全部内容(该目录专用于存储调试标签数据) - 清空整个
runtime/目录(包括cache/、logs/、views/),避免旧 debug 配置或路由规则残留 - 清除
web/assets/,防止开发期生成的带调试信息的资源文件继续加载
验证是否真正关闭
完成上述操作后,必须人工验证:
- 访问任意一个会触发错误的 URL(如
/site/nonexistent),确认返回的是自定义 404 页面,而非 debug 工具栏或堆栈白屏 - 检查页面底部是否还出现 debug 工具栏图标;查看源码中是否含
yii-debug-toolbar类名 - 尝试请求
/debug/default/toolbar?tag=xxx,应返回 404 或 403,而非 200 响应体 - 查看日志(
runtime/logs/app.log)中是否仍有yii\debug\*相关类的初始化记录











