怎样安装ionCube loader

2016年6月29日 | 分类: 【技术】

【介绍】

ionCube是用来加密PHP的工具。ionCube Encoder可以把PHP源代码转换成ByteCode。进行加密授权处理后的PHP代码就不再开源了,必须使用ionCube loader才可以执行加密过的PHP代码。

PHP本身不带ionCube loader模块,必须到ionCube网站下载。ionCube loader是免费的,但是Encoder是需要付费的(起价$199)。

ionCube目前只支持到 PHP 7.3X 系列。 PHP 7.4X 系列尚未发布。
参考:https://forum.ioncube.com/viewtopic.php?p=11559

【概念】

Linux系统下流行的两种PHP运行方式(LNMP和LNAMP):

1. LNMP环境:PHP以php-fpm方式运行,那么就不涉及到线程安全这个问题了,因为php-fpm是以多进程的方式来运行的。

2. LNAMP或者LAMP方式运行(mod_php):先了解下Apache的MPM,Apache支持以多线程的方式运行(Worker),也支持以多进程的方式运行(Prefork)。Linux下的Apache绝大多数都是运行在Prefork模式下,这是出于稳定性的考虑。
所以总结下,LNMP下不需线程安全,Apache下为了稳定性的考虑,建议以多进程的方式运行(Prefork),这样也是不需要线程安全的。

最后一点,PHP安装为线程安全,会比非线程安全多占用一些CPU,并且可能会增加bug或者不稳定的问题,这才是重点,不然PHP就没必要设置这个选项了。

参考:http://www.myhack58.com/Article/60/63/2015/60894.htm

【安装(源码)】

ioncube的安装不需要编译,只需要下载、解压,移动到/usr/local。

下载:https://www.ioncube.com/loaders.php

64位系统:https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
32位系统:https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86.tar.gz

以64位系统CentOS7上安装上为例:

wget https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz && tar xvfz ioncube_loaders_lin_x86-64.tar.gz && mv ioncube /usr/local/ioncube

更改权限:

chown -R root:root /usr/local/ioncube

php.ini:

/usr/local/ioncube/ 目录下有一系列.so文件,版本号是与当前服务器上的PHP版本相对应的,务必保证一致。
带ts的表示 Thread Safety => enabled 情况下所需的文件。如果文件不匹配,将导致ioncube加载失败。

查看PHP版本:

php -v

输出:

PHP 7.3.0 (cli) (built: Dec 26 2018 02:21:49) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies

查看Thread Safety状态:

php -i | grep "Thread Safety" -i

输出:

Thread Safety => enabled

可以确定使用 ioncube_loader_lin_7.3_ts.so 这个文件。

然后编辑 php.ini:

打开 /usr/local/php/etc/php.ini ,在最后一行加入如下代码:

; [ionCube Loader]
zend_extension=/usr/local/ioncube/ioncube_loader_lin_7.3_ts.so

重启 Apache :

service httpd stop
service httpd start

然后查看版本,看是否正常加载ioncube:

php -v

输出:

PHP 7.3.0 (cli) (built: Dec 26 2018 02:21:49) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.0-dev, Copyright (c) 1998-2018 Zend Technologies
    with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.3.1, Copyright (c) 2002-2018, by ionCube Ltd.

如果使用了不同的格式,报错: undefined symbol: core_globals_id

Failed loading /usr/local/ioncube/ioncube_loader_lin_7.3_ts.so:  /usr/local/ioncube/ioncube_loader_lin_7.3_ts.so: undefined symbol: core_globals_id

查看:

php -i | grep "Thread Safety" -i

输出:

Thread Safety => disabled

【安装(Web向导)】

参考:https://blog.csdn.net/forLightWay/article/details/78888583

ionCube官方提供了一个安装向导程序,可以帮助检测php的运行环境。

下载:http://www.ioncube.com/loader-wizard/loader-wizard.zip
支持:php5.3、php5.4、php5.5、php5.6、php7.0版本

解压移动到指定目录:

wget http://www.ioncube.com/loader-wizard/loader-wizard.zip && unzip loader-wizard.zip && cd ioncube

运行loader-wizard.php程序: + /ioncube/loader-wizard.php

1. 根据这个向导程序的提示,下载相应的解密软件
2. 将下载下来的解密软件放在它指定的目录中
3. 下载向导程序计算出来新的php.ini文件,替换系统原来的php.ini文件
4. 重新启动apache

重启后,点击页面第五步给出的那个链接,就会看到是否成功啦。

【安装(Atomic库)】

参考:http://www.laozuo.org/1940.html

Atomic源支持Fedora,RHEL和CentOS的YUM包管理。

清单:http://www.atomicorp.com/channels/atomic/

需要先安装Atomic库,然后安装ionCube PHP Loader:

wget -q -O - http://www.atomicorp.com/installers/atomic | sh
yum install php-ioncube-loader

安装完后在 /etc/yum.repos.d/ 目录会有一个 atomic.repo 文件。

【排错】

报错:undefined symbol: pow_function

如果PHP版本不一致,报错“undefined symbol: pow_function”:

Failed loading /usr/local/ioncube/ioncube_loader_lin_5.6_ts.so:  /usr/local/ioncube/ioncube_loader_lin_5.6_ts.so: undefined symbol: pow_function
PHP 5.5.35 (cli) (built: May 25 2016 16:50:23)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

报错:undefined symbol: executor_globals

如果 Thread Safety => enabled ,在php.ini中却引用 不带 “ts”的文件,报错“undefined symbol: executor_globals”:

Failed loading /usr/local/ioncube/ioncube_loader_lin_5.5.so:  /usr/local/ioncube/ioncube_loader_lin_5.5.so: undefined symbol: executor_globals
PHP 5.5.35 (cli) (built: May 25 2016 16:50:23)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

报错:ionCube会和Zend Optimizer发生冲突

如果以前装有Zend Optimizer,安装ionCube会和Zend Optimizer发生冲突,不过在php.ini添加代码的时候,将上面的添加到zend那一行之前就好了。

报错:Cannot load the ionCube PHP Loader

如果PHP已升级,会有兼容性导致的报错:

Cannot load the ionCube PHP Loader - it was built with configuration API220121212,TS, whereas running engine is API220131226,TS

参考:https://www.sothink.cn/archives/2014/10/cannot-load-the-ioncube-php-loader.html

需要使用 locate 命令确认适配版本的ioncube程序的位置,并在 php.ini 中更新。

参考:http://amon.org/locate

【参考】

参考:http://lxy.me/centos-install-ioncube-php-loader
参考:http://my.oschina.net/u/256646/blog/174211
参考:http://forum.ioncube.com/viewtopic.php?t=171
参考:http://serverfault.com/questions/746305/issue-installing-ioncube-with-php-5-6-11-with-apache-2-4-16-on-centos-6-7