RHEL 5 编译 eAccelerator 0.9.6.1 遇到的问题

很早就知道这个模块可以加速 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) {

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/23780.html