Yaf 必须手动作为 PHP 扩展启用,phpEnv 仅管理 PHP 版本与 ini 配置,不自动安装或编译扩展;启用需三步:匹配版本下载 php_yaf.dll、放入对应 ext 目录、在 php.ini 中添加 extension=php_yaf.dll 并重启服务。

phpEnv 本身不是框架,也不是 Yaf 的安装工具,它是一个用于 Windows 下快速切换 PHP 版本和扩展的轻量级环境管理器(类似 phpbrew 或 asdf 的简化版)。它不内置 Yaf 支持,**Yaf 必须作为 PHP 扩展手动启用**——这点常被误认为“phpEnv 能一键装 Yaf”。
为什么 phpEnv 启用 Yaf 总失败?
常见错误现象:Yaf_Application 类未定义、php -m | grep yaf 无输出、Class 'Yaf_Application' not found。根本原因不是 phpEnv 配置错,而是它只管理 PHP 二进制和 ini 文件,**不自动下载、编译或启用任何扩展**。
在 phpEnv 中启用 Yaf 的实际步骤
你得自己完成三件事:选对 DLL、放对位置、配对 ini:
- 查当前 PHP 版本和线程模型:在 phpEnv 界面点开「PHP Info」,记下
PHP Version、Thread Safety(TS/NTS)、Architecture(x64/x86) - 去 PECL 官网 yaf 页面 下载对应版本的
php_yaf.dll(例如 PHP 8.2 + TS + x64 → 选yaf-3.4.5-8.2-ts-vc15-x64.zip) - 解压后把
php_yaf.dll放到 phpEnv 当前激活 PHP 版本的ext/目录下(路径类似:C:\phpenv\versions\8.2.12-ts\ext\) - 编辑该版本的
php.ini(phpEnv 会为每个版本维护独立 ini),添加一行:extension=php_yaf.dll - 重启 phpEnv 的服务(或重载 Apache/Nginx),再运行
php -m | grep yaf验证
phpEnv 下 application.ini 的路径容易写错
Yaf_Application 初始化时传入的配置路径必须是绝对路径,且 phpEnv 的工作目录常不是项目根目录。比如你在 D:\myapp\public\index.php 启动应用,但 APP_PATH 写成 dirname(__FILE__) . '/../',结果指向 D:\myapp\ —— 这没问题;但如果 phpEnv 的 CLI 模式执行脚本时工作目录是 C:\,这个相对路径就崩了。
稳妥写法是显式用 realpath() 并检查是否存在:
立即学习“PHP免费学习笔记(深入)”;
<?php
define('APP_PATH', realpath(dirname(__FILE__) . '/../'));
if (!is_dir(APP_PATH . '/conf')) {
throw new RuntimeException('Config dir not found: ' . APP_PATH . '/conf');
}
$app = new Yaf_Application(APP_PATH . '/conf/application.ini');
$app->run();
Apache/Nginx 重写规则在 phpEnv 里要单独配
phpEnv 自带的 Apache 配置默认不开启 mod_rewrite,也不含 Yaf 所需的重写规则。你得手动改 httpd.conf 或虚拟主机配置:
- 确认已启用:
LoadModule rewrite_module modules/mod_rewrite.so - 在
<Directory "<your-public-dir>">块内加:AllowOverride All - 在
public/.htaccess里写标准规则:RewriteRule ^(.*)$ index.php [QSA,L] - 若用 Nginx(phpEnv 也支持),则需在 server 块中加:
try_files $uri $uri/ /index.php?$query_string;



















