phpenv下需手动安装SG11:先查PHP的ZTS/NTS模式和主版本号,再将匹配的ixed.7.4.lin放入对应extension_dir,用zend_extension=sourceguardian.so启用,并确保Web服务器实际加载的是该php.ini配置。

phpenv下找不到sg11扩展安装选项?先确认PHP构建模式
phpenv本身不提供扩展仓库,它只管理PHP二进制版本。所谓“安装sg11”,本质是手动编译加载器并写入php.ini——和宝塔一键安装完全不同。你看到的错误提示里那个ixed.7.4.lin,必须和当前phpenv所用PHP的编译参数完全一致,否则直接拒绝加载。
关键第一步不是下载文件,而是查清你的PHP是ZTS还是NTS:
-
php -i | grep "Thread Safety"输出disabled→ 用NTS版ixed.7.4.lin - 输出
enabled→ 必须用ZTS版,否则PHP Warning: SourceGuardian loader not installed会一直报 - 同时确认PHP主版本号:
php -v看是不是严格匹配7.4.x(比如7.4.33),不能混用7.4.0或7.4.30的loader
手动把ixed.7.4.lin放进phpenv的extension_dir
phpenv不会自动帮你找extension_dir路径,得自己挖出来。别信php --ini显示的“Loaded Configuration File”,那个只是配置文件位置,不是扩展目录。
正确做法是运行:
立即学习“PHP免费学习笔记(深入)”;
php -r "echo ini_get('extension_dir');"
输出类似/home/username/.phpenv/versions/7.4.33/lib/php/extensions/no-debug-non-zts-20190902这种路径。注意末尾的no-debug-non-zts-20190902——这个时间戳对应PHP 7.4的API版本,不能手改,也不能复制到其他PHP版本目录下。
然后把下载好的ixed.7.4.lin(务必确认ZTS/NTS)拷进去:
cp ixed.7.4.lin /home/username/.phpenv/versions/7.4.33/lib/php/extensions/no-debug-non-zts-20190902/
在phpenv的php.ini里启用sourceguardian.so
phpenv每个PHP版本有独立的php.ini,路径通常是:
~/.phpenv/versions/7.4.33/etc/php.ini
在文件末尾加两行(顺序不能错):
zend_extension=sourceguardian.so sourceguardian.enable=1
注意不是extension=,是zend_extension=——SG11是Zend引擎级加载器,用错指令会导致PHP启动失败或静默忽略。
验证是否生效:
php -m | grep sourceguardian
如果没输出,说明路径、权限或指令写错了;如果输出sourceguardian但网站仍报错,大概率是Loader版本低于加密源码要求(比如主题用SG14加密,你装了SG11)。
常见失败原因:phpenv环境变量与Web服务器PHP不一致
很多人在终端执行php -v看到7.4.33、php -m也显示sourceguardian,但浏览器访问网站还是报ixed.7.4.lin not installed。这是因为web服务器(如nginx+php-fpm)跑的是另一个PHP实例,和phpenv shell里的不是同一个。
检查方法:
- 在网站根目录放
info.php:<?php phpinfo(); ?>,访问后搜Loaded Configuration File,看实际生效的php.ini路径 - 对比这个路径和
~/.phpenv/versions/7.4.33/etc/php.ini是不是同一个文件 - 如果不是,你改的phpenv配置根本没被web服务读取——此时要改的是fpm的pool配置或全局php.ini,而不是phpenv的
最稳妥的做法:用phpenv global 7.4.33设为默认后,再确认fpm服务用的PHP二进制路径是否指向~/.phpenv/shims/php。否则,你手动装的ixed.7.4.lin永远只在命令行生效。



















