麒麟V10上使用源码安装PHP装载Ioncube的问题

背景:

公司有套禅道项目管理软件,要求必须部署在麒麟V10的环境,但是这个环境自带的php+apache容器版本太低,被查出来一堆安全漏洞,所以必须要升级php版本,但是厂家支持太差,给不出版本升级yum源,只有一条路了:源码升级php。

过程:

1.源码安装php不是很复杂,百度上有麒麟系统安装php的文章,大差不差,安装指点,依赖包装好,注意点是,配置的时候,./configure 后面要加上--with-apxs2=/usr/local/apache/bin/apsx

/usr/local/apache/bin/apx路径替换成环境上Apache httpd服务器的对于程序路径,作用是编译安装后,会自动生成一个php的so模块,放在apache的modules目录里,这样Apache才能在启动的时候自动加载php模块,源码安装的必须这么做,yum安装的不用。

2.配置Apache的httpd.ini 参考

https://blog.csdn.net/ON_Zero/article/details/126289055

3.配置禅道的ioncube解密插件(恶心人的部分来了)

修改php.ini 加入ioncube文件路径

4.运行新安装的php路径的bin下php -v ,这时候报错了:

/usr/lib64/php/modules/ioncube_loader_lin_7.2.so:未定义符号:executor_globals

经过查阅了大量的网页,最接近的答案是这个:

在centOS 6.7上使用PHP 5.6.11和Apache 2.4.16安装Ioncube的问题 - 糯米PHP

 这个是因为能下载到的ioncube插件都只支持非线程安全的php,而刚编译安装的php线程安全设置(php -r "phpinfo();"|grep safety)是on,所以无法加载

5.那么问题就转变成,如何关闭php的线程安全?

搜了一圈,同类的问题最接近的解决方案是

Apache2+PHP5不能加载Zend Optimizer的问题_赖笔头的技术博客_51CTO博客

所以需要按照下面三个步骤进行,才可以将php的线程安全关闭:
a.以 --with-mpm=prefork 参数源码编译安装Apache2(之前yum安装的不能用)
b.重新编译安装PHP
c.重新安装ioncuber

6.从apache官网下载最新的apache的3个包,然后源码安装,重点:

./configure 后面要加上 参数 --with-mpm=prefork 

7.重新安装php,也就是上面的b步骤,这时候重点来了,这个也是网上没有任何文章提到到的细节,怎么把新的apache配置到php的编译里,我在这里走了一圈弯路,编译出来的php,线程安全并没有关闭,后来查了老外的一个差不多的文章:

How to disable thread safety in PHP? - Stack Overflow

里面提到,老外用的 apache2-prefork-dev 里面的apxs2 才编译出关闭线程安全php,那么这个包到哪找呢?

8.思考了一下,既然第6步,安装Apache用的mpm模式就是prefek,那里面的apxs2,理论上应该就是关闭线程安全的,然后重新编译php配置的时候,./configure 后面加上--with-apxs2=新安装的httpd的apsx2程序路径,然后 编译安装

9.安装php以后,重复第3步,第4步检查,不报错了,执行php -r "phpinfo();"|grep safety,此时

线程安全应该off状态

10.按照第二步配置新安装的httpd.ini,把新的php.co加进去

11.启动httpd(httpd -k start)

12.完结撒花

总结:

1.php的开关,在apache手里,这个是活久见

2.ioncube这个插件只能关线程安全,这个是个大坑

3.麒麟这破系统,源是真的老

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值