需先确认phpEnv中目标PHP版本及对应php.ini路径,再下载匹配TS/NTS和架构的ioncube_loader_win_*.dll文件,复制到php/ext目录,于php.ini末尾用绝对路径添加zend_extension=指令,最后分别验证CLI与Web环境并重启服务。

phpEnv 本身不内置 IonCube 扩展,必须手动配置;直接复制官方 loader 文件 + 修改对应 PHP 版本的 php.ini 是唯一可靠方式,宝塔那种“一键安装”在 phpEnv 里不存在。
怎么确认当前 phpEnv 使用的是哪个 PHP 版本和配置路径
phpEnv 的多版本共存机制决定了你必须先锁定目标 PHP 实例,否则容易改错配置文件。
- 打开命令行,进入你的 phpEnv 安装目录(比如
G:\phpEnv),运行:php -v查看 CLI 当前版本 - 运行:
php --ini输出类似:Loaded Configuration File: G:\phpEnv\php\php-8.1.22\php.ini—— 这个路径就是你要编辑的php.ini - 如果你用的是 Apache 或 Nginx,还需确认 Web 服务加载的是哪个 PHP:新建一个
info.php放在网站根目录,内容为<?php phpinfo(); ?>,浏览器访问后看 “Loaded Configuration File” 行,它可能和 CLI 的不一样
下载并放置 ioncube_loader_lin_*.so 文件的正确位置
phpEnv 默认使用 Windows + VC15/VC16 编译的 PHP,所以必须选对架构和线程安全类型(TS/NTS),否则 PHP 启动会直接报错或静默失败。
- 从官方或国内镜像下载对应包,例如:
wget https://dl.zentao.net/ioncube_loaders_win_vc15_x86-64.zip(PHP 7.4–8.2 常用) - 解压后找到类似
ioncube_loader_win_8.1.dll的文件(注意后缀是.dll,不是 Linux 的.so) - 把它复制到 phpEnv 对应 PHP 版本的扩展目录,典型路径如:
G:\phpEnv\php\php-8.1.22\ext\ - 不要放到
php\ext的父级目录,也不要放错 PHP 版本子目录(比如把 8.1 的 dll 放进 7.4 目录)
在 php.ini 中添加 zend_extension 配置的关键细节
这一步最容易出错:路径写错、用错指令、加在错误位置,都会导致 IonCube 不生效甚至 PHP 无法启动。
立即学习“PHP免费学习笔记(深入)”;
- 用记事本或 VS Code 打开上一步确认的
php.ini(不是系统里其他地方的同名文件) - 在文件末尾新增一行,严格按格式写:
zend_extension = G:\phpEnv\php\php-8.1.22\ext\ioncube_loader_win_8.1.dll(路径必须是绝对路径,且与实际文件名完全一致) - 不能写成
extension = ...—— IonCube 是 Zend 扩展,必须用zend_extension - 不能加引号,也不能有空格(Windows 路径含空格时,需用短路径名或改到无空格路径)
- 改完保存,重启你的 Web 服务(Apache/Nginx)和 PHP-FPM(如果用了);仅重启浏览器没用
验证是否真正生效,而不是“看起来成功”
很多人看到 phpinfo() 页面里出现了 ionCube 字样就以为 OK,但 CLI 和 Web 环境可能不一致,加密文件仍会报 Invalid or untrusted encryption key 或直接白屏。
- 在命令行执行:
php -m | findstr ionCube(Windows)或php -m | grep ionCube(Linux/macOS),有输出才说明 CLI 生效 - 在浏览器访问
info.php,搜索 “ionCube Loader”,确认状态是 “enabled”,且 PHP Version 显示匹配(比如 8.1.x) - 最关键一步:创建一个测试加密文件(哪怕只有
<?php echo 'OK'; ?>加密后的 .php 文件),放进网站目录,直接浏览器访问 —— 成功输出才是真生效 - 如果失败,查
error_log或 Windows 事件查看器,常见错误是:PHP Warning: Module 'ioncube' already loaded(重复加载)、Unable to load dynamic library(路径或架构错)
最常被忽略的是:phpEnv 的 CLI 和 Web 用的不是同一个 php.ini,改了一个却忘了另一个;还有人把 .dll 放进 Linux 路径、或在 Windows 下用了 .so 文件 —— 这些都不会报明显错误,只会让加密文件彻底无法运行。



















