phpEnv是Windows下轻量级PHP版本管理工具,通过命令行切换PHP版本,不提供图形界面或扩展安装功能;需手动将匹配架构、ZTS/NTS及PHP主版本的SourceGuardian loader(ixed.x.y.wXX)放入对应PHP扩展目录,并在该版本php.ini中用zend_extension=绝对路径加载。

phpEnv 是 Windows 下轻量级 PHP 环境管理工具(类似 pyenv),不带图形界面,靠命令行切换 PHP 版本。它本身不提供扩展安装功能,也不集成宝塔那样的“一键安装扩展”面板——所以你在 phpEnv 里找不到 sourceguardian 扩展选项,更不会出现“搜索安装 sg11”这种操作。
你真正要做的,是手动把 SourceGuardian loader(即 ixed.x.y.lin)放进当前激活的 PHP 版本的扩展目录,并在对应 php.ini 中用 zend_extension 加载。整个过程依赖你对当前 PHP 实例路径、架构、ZTS/NTS 的准确判断。
怎么确认 phpEnv 当前 PHP 的真实参数?
phpEnv 切换版本后,执行的其实是某个本地 PHP 二进制文件(如 C:\phpenv\php\74\php.exe)。你要验证的不是“phpEnv 版本”,而是这个 PHP 二进制本身的编译信息:
- 运行:
php -v→ 看主版本(如 7.4、8.1) - 运行:
php -i | findstr "Thread Safety Architecture"(Windows)→ 确认是否enabled(ZTS)或disabled(NTS),以及是x86还是x64 - 运行:
php -i | findstr "extension_dir"→ 得到实际扩展目录路径(比如C:\phpenv\php\74\ext)
常见错误:直接拿宝塔或 WAMP 的 loader 文件丢进去,结果因 ZTS/NTS 不匹配导致 PHP 启动失败,或 php -m 不显示 sourceguardian。
立即学习“PHP免费学习笔记(深入)”;
哪里下载正确的 ixed.xxx.lin 文件?
SourceGuardian 官网只提供 Linux 和 Windows 两种 loader 包,phpEnv 用的是 Windows 版本:
- 访问 https://www.php.cn/link/8dcedd6884e553e55dfb6298a6f6cd94
- 找 “Windows x86-64” 或 “Windows x86” 分类(取决于上一步查到的
Architecture) - 选对应 PHP 主版本(如 PHP 7.4 → 下载
ixed.7.4.w32或ixed.7.4.w64) - 注意后缀:
.w32是 32 位 NTS,.w64是 64 位 NTS;ZTS 版本会额外标ts(如ixed.8.1.w64.ts)
别下错成 .lin(Linux)或 .so(Unix 共享库)——这些在 Windows 下完全无法加载。
怎么配置 php.ini 才能生效?
phpEnv 没有统一的全局 php.ini,每个 PHP 版本目录下通常自带一个(如 C:\phpenv\php\74\php.ini)。你要编辑的是当前激活版本所读取的那个。
- 找到该
php.ini文件(可用php --ini查看 Loaded Configuration File) - 在文件末尾添加一行(路径必须绝对,且用反斜杠):
zend_extension="C:\phpenv\php\74\ext\ixed.7.4.w64" - 保存,然后运行
php -m | findstr sourceguardian验证
容易踩的坑:
- 路径中用了正斜杠
/或没加引号,PHP 直接忽略该行 - 写成了
extension=(这是普通扩展),SourceGuardian 必须用zend_extension= - 多个 Zend 扩展(如 ionCube)共存时,
zend_extension行顺序无关,但必须各自独立、路径正确
phpEnv 下跑加密脚本仍报 “SourceGuardian loader not installed” 怎么办?
这个错误只说明 PHP 进程根本没加载 loader,和代码无关。优先检查三件事:
-
php -v输出的 PHP 路径,是否和phpEnv当前激活的一致?有时终端残留旧 PATH,调用的是系统其他 PHP -
php --ini显示的配置文件路径,是否真被修改?有些phpEnv版本会从注册表或环境变量读取 ini 路径,绕过目录下的默认文件 - 加密文件用的是什么格式?sg11 要求 loader ≥ v13.1,sg16 要求 ≥ v14.0 —— 如果你用新版加密器生成了 sg16 文件,但 loader 是 v13.0,就会静默失败(不报错,但脚本空白或 500)
最稳妥的验证方式:写一个最小 test.php:
<?php
if (function_exists('sourceguardian_load')) {
echo "OK";
} else {
echo "FAIL: loader not loaded";
}
?>
用 php test.php 运行,比看 phpinfo() 更直接。
Loader 文件名、PHP 架构、ZTS 状态、Windows 位数、加密格式版本——这五个参数只要有一个对不上,就会卡在“loader not installed”。没有捷径,只能逐项核对。



















