phpEnv 版本与 Yii2 的 PHP 兼容性必须对齐:Yii2 官方要求最低 PHP 7.4,推荐 PHP 8.0+ nts 版本;需确认 php.ini 路径、扩展目录及关键扩展(mbstring、intl、openssl)已启用,并正确配置 YII_ENV 与 cookieValidationKey。
php
Env 版本与 Yii2 的 PHP 兼容性必须对齐
phpEnv 是 Windows 下的多版本 PHP 环境管理工具,但它的默认 PHP 包往往滞后。Yii2 官方要求最低 PHP 7.4,而实际项目(尤其用到
、
或 JSON 类型字段时)在 PHP 8.0+ 上更稳定。若你在 phpEnv 中选了 PHP 7.3 或更旧版本,
会直接失败,报错类似:
解决方法很简单:打开 phpEnv 控制面板 → 卸载旧版 PHP → 手动添加 PHP 8.0+ nts 版本(注意必须是
,不是
,否则 Apache 模块加载失败)。确认后重启 phpEnv 服务,并在终端执行:
和
,确保关键扩展全部列出。
Composer 初始化失败时优先检查 phpEnv 的 PATH 和扩展路径
即使 phpEnv 显示 PHP 版本正确,
仍可能卡在 autoload 或提示 extension missing,常见原因是 phpEnv 修改了
路径但未同步更新 Composer 的运行环境。
运行
查看实际加载的
位置,确认其中
指向的是当前 phpEnv 激活的 PHP 版本目录下的
子目录(例如
)
检查该
目录下是否存在
、
等文件;若缺失,从对应 PHP 官方二进制包中复制过来
Composer 若仍报错,尝试临时绕过验证:
(仅限开发调试,生产禁用)
web/index.php 入口需显式声明 YII_ENV 并校验 cookieValidationKey
phpEnv 默认无全局环境变量,Yii2 启动时若未定义
,会 fallback 到
,但
若为空则直接抛出异常:
。
立即学习
“
PHP免费学习笔记(深入)
”;
在
开头插入以下代码(位置必须在
之前):
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
然后检查
中
是否已填非空字符串——不能留空、不能是纯数字、不能含特殊符号(建议用 32 位随机字母数字组合)。
Apache/Nginx 配置需避开 phpEnv 的端口冲突和路径硬编码
phpEnv 自带 Apache,但其默认监听 80 端口,且 DocumentRoot 固定指向 phpEnv 安装目录下的
。若你把 Yii2 项目放在其他路径(如
),直接访问会 404。
两种稳妥做法:
修改 phpEnv 内置 Apache 的
,将
和
指向你的 Yii2
目录,并确保
开启(用于支持
重写)
更推荐:停用 phpEnv 的 Apache,改用 Nginx + php-fpm(phpEnv 支持一键启动 fpm),然后在 Nginx 配置中明确指定
和
—— 这样完全脱离 phpEnv 的 Web 层耦合,也更贴近生产部署逻辑
最后提醒一句:phpEnv 的「切换 PHP 版本」功能只影响 CLI 和内置 Apache,不影响你手动配置的 Nginx + fpm 组合。别被界面误导,实际生效的永远是配置文件里写的路径和端口。
mbstringintlcomposer create-projectYour requirements could not be resolved to an installable set of packages.ntstsphp -vphp -m | findstr "mbstring intl openssl"composer installphp.iniphp --iniphp.iniextension_dirextD:\phpenv\php\php-8.0.28-nts\extextphp_openssl.dllphp_mbstring.dllcomposer install --ignore-platform-reqsYII_ENVprodcookieValidationKeySetting unknown property: yii\web\Request::cookieValidationKeyweb/index.phprequire __DIR__ . '/../vendor/autoload.php'defined('YII_ENV') or define('YII_ENV', 'dev');
defined('YII_DEBUG') or define('YII_DEBUG', true);config/web.php'request' => ['cookieValidationKey' => '...']wwwD:\myproject\basic\webhttpd.confDocumentRootweb/AllowOverride All.htaccessroot /path/to/your/project/web;fastcgi_pass 127.0.0.1:9000;