yii3项目部署后须用php init命令切换运行模式,禁止手动修改;执行php yii status确认当前mode/env/debug状态;生产模式执行php init --env=production --overwrite=all,开发模式同理但需手动删除runtime/assets/;通过config/web.php定义、x-powered-by响应头及错误页表现三步验证生效。

Yii3项目部署完成后需要立即切换运行模式,避免调试信息泄露或生产环境开启错误日志级别。直接修改代码或配置文件容易出错,必须通过标准化命令流程完成。
确认当前环境模式
进入项目根目录,执行:php yii status。该命令会输出当前应用的mode、env和debug状态值。若提示Command not found,说明未生成可执行脚本,需先运行php init --env=Production --overwrite=All生成基础命令支持。
注意:不要依赖getenv('YII_ENV')或$_SERVER['YII_ENV']手动判断——这些变量可能被Web服务器缓存或覆盖,yii status读取的是框架实际加载的运行时环境上下文。
使用init命令切换环境
Yii3不再支持运行时动态切换环境,所有环境变更必须通过init命令重置配置并重建引导逻辑。
方法一:切换为生产模式(关闭调试、禁用错误显示)
执行:php init --env=Production --overwrite=All → 系统会提示输入“确认密码”,默认为123456(首次运行后可在environments/index.php中修改)→ 输入后自动复制environments/Production/下的全部配置到config/目录 → 清空runtime/cache/与runtime/debug/目录。
方法二:切换为开发模式(启用调试工具栏、详细错误页)
执行:php init --env=Development --overwrite=All → 同样输入确认密码 → 覆盖配置 → 【必须手动删除runtime/assets/目录】,否则前端资源仍加载旧环境的压缩版本,调试工具栏无法渲染。
验证模式切换是否生效
第一步:检查config/web.php顶部是否包含defined('YII_DEBUG') or define('YII_DEBUG', true);(开发模式)或define('YII_DEBUG', false);(生产模式)。
第二步:访问任意页面,在HTTP响应头中查找X-Powered-By字段。开发模式下该字段值为Yii3 (debug),生产模式下为Yii3(无debug标识)。
第三步:触发一个PHP警告(如访问/test?x[]=1&x[]=2并故意在控制器中调用count($x, COUNT_RECURSIVE)),开发模式将显示带堆栈的彩色错误页,生产模式仅返回HTTP 500且页面为空白或自定义错误页。











