phpEnv 版本与 Yii2 的 PHP 兼容性必须对齐:Yii2 官方要求最低 PHP 7.4,推荐 PHP 8.0+ nts 版本;需确认 php.ini 路径、扩展目录及关键扩展(mbstring、intl、openssl)已启用,并正确配置 YII_ENV 与 cookieValidationKey。

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



















