红联Linux门户
Linux帮助

RHEL 5编译eAccelerator 0.9.6.1遇到的问题

发布时间:2014-12-20 22:19:38来源:anylinux作者:anylinux

很早就知道这个模块可以加速 PHP 运算,但是看到其版本号不禁让人菊花一紧,不到 1.0 的可用程度……不过后来在其他服务器上跑跑看感觉还不错,如是乎上线吧。但是在 RHEL 5 机器上编译 eaccelerator 0.9.6.1 发现出错鸟,提示信息如下:


gcc -I. -I/root/eaccelerator-0.9.6.1 -DPHP_ATOM_INC -I/root/eaccelerator-0.9.6.1/include -I/root/eaccelerator-0.9.6.1/main -I/root/eaccelerator-0.9.6.1 -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -DHAVE_CONFIG_H -g -O2 -c /root/eaccelerator-0.9.6.1/ea_store.c -fPIC -DPIC -o .libs/ea_store.o
/root/eaccelerator-0.9.6.1/ea_store.c: In function ‘store_property_access_check’:
/root/eaccelerator-0.9.6.1/ea_store.c:683: error: ‘zend_property_info’ has no member named ‘ce’
make: *** [ea_store.lo] Error 1


由于 RHEL 5 发布的比较早,所以还是 PHP 5.1 的版本,而不是目前较为流行的 5.2,且 eaccelerator 是最新的 0.9.6.1,因此初步认为是版本 mismatch 导致。

后来到 eaccelerator 官网上转了一圈发现确实是 eaccelerator 对 Zend 版本判断的问题,找到了原因就好办了,写个ea_store.RHEL5.patch,下载后解压得到ea_store.RHEL5.patch

patch -p0 < ea_store.RHEL5_.patch


源码如下:

--- ea_store.c.orig 2010-09-13 10:22:28.000000000 +0800
+++ ea_store.c 2010-09-13 10:17:03.000000000 +0800
@@ -680,7 +680,9 @@
zend_property_info* child_info = (zend_property_info*)p->pData;
zend_property_info* parent_info = NULL;
+#ifdef ZEND_ENGINE_2_2
return (child_info->ce != from);
+#endif
if (parent && zend_hash_quick_find(&parent->properties_info, p->arKey, p->nKeyLength, p->h, (void **) &parent_info)==SUCCESS) {
if(parent_info->flags & ZEND_ACC_PRIVATE) {