XAMPP PHP Pecl Extension MemCache

问题:用 xampp 套件的 php 测试程序,程序中用到了 memcache,xampp 中未编译这个 extension,因此无法运行。

如果为了 memcache,重新编译 Apache、PHP 和 MySQL,太费时间,没有收获,而且重要的是逃避了问题,没有解决。

这回找到了解决方法,可以用此方法编译其他 PECL 的 PHP Extension,使 xampp 的 PHP 有更多功能!

闲言少叙,直奔主题:给 xampp 套件的 PHP 安装 memcache 扩展。

流程:

下载 http://pecl.php.net/get/memcache-2.2.5.tgz,得到最新的 PHP memcache PECL extension。

解压后,是一些源码,不能直接 configure 和 make。

config9.m4  CREDITS      memcache_consistent_hash.c  memcache_queue.c    memcache_standard_hash.c
config.m4   example.php  memcache.dsp                memcache_queue.h    php_memcache.h
config.w32  memcache.c   memcache.php                memcache_session.c  README

需要先用 phpize 配置一下,不过,我这次并不是平常的 phpize,因为我在 VMware 的 CentOS 上用的是 xampp 的集成环境,用这个环境下的 phpize 会提示缺少文件。

[leakon memcache-2.2.5]$ /opt/lampp/bin/phpize
grep: /opt/lampp/include/php/main/php.h: No such file or directory
grep: /opt/lampp/include/php/Zend/zend_modules.h: No such file or directory
grep: /opt/lampp/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:

提示缺少 3 个文件,这些文件在 xampp 中都没有,因为 xampp 提供的是运行环境,不是开发环境。

这样的目录结构(include/php/*)只有在安装好的 php 目录中才有,其实如果从源码直接复制更容易,不过那不是好方法。

下一个新版 PHP 源码,本地编译安装。

下载 http://cn2.php.net/get/php-5.2.11.tar.gz/from/cn.php.net/mirror。

configure 的时候不必跟上很多参数,我们只是要一个目录结构,而且是目录里面的源码,扩展和模块什么的都无所谓,只要能编译即可。

编译完成后,找到安装路径 /home/leakon/local/php5,可以看到 include 目录及其下面的目录结构。

回到 lampp 目录,下面并没有 include 目录,那我们创建一个:

[leakon ~]$ cd /opt/lampp/
[leakon lampp]$ mkdir include && cd include
[leakon include]$ ln -s /home/leakon/local/php5/include/php php

这样,建立一个指向 php 安装目录的符号链接。

再回到 memcache-2.2.5 源码目录,重新配置:

[leakon memcache-2.2.5]$ /opt/lampp/bin/phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

然后可以 configure 了:

[leakon memcache-2.2.5]$ ./configure –prefix=/home/leakon/local/pecl-memcache –with-php-config=/opt/lampp/bin/php-config

完成后 make 就可以啦,再完成后,编译的 so 文件生成到了 memcache-2.2.5/modules 目录下,有 2 个:

memcache.la  memcache.so

memcache.so 是我们要用的。

然后,修改 php.ini,添加 extension=leakon-modules/memcache.so

这个过程,还有点小波折。

本来我把 memcache.so 放到了 /home/leakon/modules/ 下,然后设置 extension=”/home/leakon/modules/memcache.so”

结果用 php -m 找不到 memcache 模块。

我的 php 报错输出到单独的文件中,tail 那个文件,看到:

PHP Startup: Unable to load dynamic library ‘/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613//home/leakon/modules/memcache.so’

原来是扩展的加载路径是相对的,不管你怎么设置,都在 /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/ 之下。

知道原因就好解决了,要么 cp memcache.so 到 no-debug-non-zts-20060613 目录下,要么做个 symbol link 链接到 /home/leakon/modules/,然后在 php.ini 修改正确的路径即可。

我记得很早写过一个编译 xdebug 的文章,刚才又看了一下,跟这回是一样的情况,也是在 xampp 的集成套件下编译 php extension。只是那次失败了,这次成功了。原文在这里:http://www.leakon.com/archives/44 。

搞了几个小时,总算时间没白费~~

Tags: , , ,

Leave a Reply

Your email address will not be published.

*