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 版本判断的问题,www.bkjia.com找到了原因就好办了,写个ea_store.RHEL5.patch(点击这里下载),下载后解压得到ea_store.RHEL5.patch

  1. patch -p0 < ea_store.RHEL5_.patch

源码如下

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

相关内容