phpenv下安装sg11必须手动匹配:先用php -v和php -i | grep "thread safety"确认php精确版本(如7.4.33)及nts状态,再下载对应ixed.7.4.lin文件,放入php -i显示的extension_dir路径,最后在php.ini中添加extension=sourceguardian.so并验证php --ri sourceguardian。

phpEnv 下安装 SG11 扩展不能靠「一键安装」,必须手动匹配加载器文件并精确配置 php.ini —— 因为 phpEnv 不集成 SourceGuardian 官方 loader 仓库,也不自动识别 PHP 版本与线程安全状态。
确认当前 phpEnv 的 PHP 精确版本和 TS/NTS 类型
SG11 加载器(ixed.x.x.lin)对 PHP 版本、架构、线程模型三者严格绑定,错一个就报 PHP Warning: PHP Startup: Unable to load dynamic library 'sourceguardian.so' 或直接启动失败。
在 phpEnv 的终端中执行:
php -v
得到类似 PHP 7.4.33 (cli) (built: ...);再运行:
php -i | grep "Thread Safety"
若输出 Thread Safety => disabled,说明是 NTS(non-thread-safe)版本 —— 这是 phpEnv 默认编译方式,对应加载器必须选 ixed.7.4.lin(非 ixed.7.4.ts.lin)。
常见误判点:
- 看到
7.4就去下ixed.7.4.0.lin:错误,SourceGuardian 不按补丁号区分,只认主次版本(7.4即可) - 混淆
php -v和phpinfo()中的API值(如20190902):那个是 Zend API 号,SG11 不用它匹配 - 没检查
uname -m:phpEnv 多用于 x86_64 Linux,但若你用的是 ARM 服务器(如树莓派),必须下loaders.linux-arm64.tar.gz,否则libsourceguardian.so: cannot open shared object file
下载并放置正确的 ixed.lin 文件
访问 SourceGuardian 官方 loader 页面:https://www.php.cn/link/f7e1cf2f7f76693cd4ee62bf949c6253,下载 loaders.linux-x86_64.tar.gz(或对应架构包)。
解压后,找到匹配你 PHP 主次版本的文件,例如 PHP 7.4 → ixed.7.4.lin;PHP 8.1 → ixed.8.1.lin。不要用 ixed.7.lin 这类模糊命名文件。
将该文件复制到 phpEnv 的扩展目录,路径通常为:
/path/to/phpenv/versions/7.4.33/lib/php/extensions/no-debug-non-zts-20190902/
注意:no-debug-non-zts-20190902 这段目录名由 phpEnv 自动推导,可通过以下命令确认:
php -i | grep "extension_dir"
如果输出是 /home/user/.phpenv/versions/7.4.33/lib/php/extensions/no-debug-non-zts-20190902,那就必须放进去,不能放错层级。
修改 php.ini 启用 sourceguardian.so
phpEnv 的 php.ini 位置一般在:
/path/to/phpenv/versions/7.4.33/etc/php.ini
在文件末尾添加一行(不是 extension=ixed.7.4.lin,也不是 extension=sg11.so):
extension=sourceguardian.so
原因:ixed.7.4.lin 是原始 loader 文件名,但 phpEnv 要求扩展以 .so 为后缀加载;SourceGuardian 官方分发包中已将 ixed.7.4.lin 重命名为 sourceguardian.so(Linux 下)或保留原名但通过 extension_dir + extension= 联动解析 —— 实测 phpEnv 必须用 sourceguardian.so 这个固定名,否则不识别。
验证是否生效:
php --ri sourceguardian
成功时会显示 loader 版本(如 SourceGuardian Loader v14.3)和 PHP 版本支持信息;失败则仍报 Extension 'sourceguardian' not present,大概率是 php.ini 路径不对,或没重启 CLI 环境(phpEnv 切换版本后需重新 phpenv rehash)。
加密文件运行时报 “SourceGuardian Loader version too old” 怎么办
这表示你装的 loader(如 v14.2)比加密源码所用的 SourceGuardian 工具版本(如 v14.3)低 —— 宝塔面板里点安装的 SG11 往往滞后,phpEnv 更不会自动更新。
解决办法只有换 loader:
- 去 SourceGuardian 官网查最新版 loader 发布页(注意看发布时间,2026 年 4 月最新是 v14.3)
- 下载对应 PHP 版本的
ixed.x.x.lin,覆盖原文件 - 确保
php --ri sourceguardian输出的 loader 版本 ≥ 加密端使用的版本(加密端通常在 .php 文件头注释或交付文档里标明)
没有“降级加密文件”的路可走,也没有兼容模式 —— 这是 SourceGuardian 的硬性设计。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











