Windows下php_memcached编译

Windows下编译这类扩展比Linux下麻烦很多。

一、编译php

需求

1. Visual C++ 2008以上
2. Windows SDK 6.1: http://download.microsoft.com/download/a/4/2/a4282359-1d35-4648-a7a7-d85e3bfe81ac/6.0.6001.16621.148.WindowsSDK_LonghornServer_IDS04_idw.WindowsSDK.DVD.Release.iso
3. Php binary tools: http://pecl2.php.net/downloads/php-windows-builds/php-libs/
4. Win32Build: http://www.php.net/extra/win32build.zip
5. 其他一些lib: bindlib, bison, libxml2, zlib
6. php源代码: 可到 http://pecl2.php.net/downloads/php-windows-builds/php-libs/VC9/x86/

步骤

创建文件夹 "D:\php-sdk"
解压binary-tools.zip 到此目录,解压后有两个文件夹 bin 和 script

打开"windows sdk 6.1 shell" (开始—程序-windwos sdk 6.1—cmd shell)
执行如下命令:
setenv /x86 /xp /release
cd D:\php-sdk\
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat php53dev

解压php源码到 D:\php-sdk\php53dev\vc9\x86 目录。
下列目录将会被创建:D:\php-sdk\php53dev\vc9\x86\php5-xyz

在相同目录 D:\php-sdk\php53dev\vc9\x86 下有一个 "deps" 文件夹, 解压需求的库到此文件夹

cd D:\php-sdk\php53dev\vc9\x86\php5-xyz
buildconf
configure --disable-all --enable-cli
nmake

编译的php库会放在 D:\php-sdk\php53dev\vc9\x86\php5-xyz\noRelease_TS 下
ok

在编译php时可能会遇到如下问题
(1)error C2466: cannot allocate an array of constant size 0 http://bugs.php.net/bug.php?id=39130
(2)可能需要修改configure.js 文件里的一些变量路径:
例如:PHP_OBJECT_OUT_DIR, PHP_PHP_BUILD

二、编译libmemcached  

1.下载libmemcached的windows源代码
2.用windows studio 2008 打开
3.编译执行即可生成libmemcached.dll

三、编译php_memcached

需求

1.下载cywin
2.下载php_memcached 库 http://pecl.php.net/package/memcached

步骤

1. 安装 cywin
2. 进入php的ext目录
cd D:\php-sdk\php53dev\vc9\x86\php5-xyz\ext
3. 修改ext_skel_win32.php:
    $cygwin_path = 'c:\cygwin\bin';
    修改为你的cygwin目录
    $cygwin_path = 'D:\cygwin\bin'
4. 执行如下命令,将会生成c++工程文件:
php ext_skel_win32.php --extname=memcached
5. 把 php_memcached 库中的源代码拷贝到此工程下覆盖原来的文件
6. 编译运行,需将 libmemcached 的源代码路径加到编译路径中,同时需将 php5ts.lib,libmemcached 添加到链接路径中,即可生成 php_memcached.dll 文件

四、添加php扩展

1. 把 php_memcached.dll 放到 php5-xyz\ext下
2. 把 libmemcached.dll 放到 C:\WINDOWS下
3. 修改php.ini 添加语句 extension=php_memcached.dll即可

五、结论

别费劲了,踏实在Linux下直接用得了

附:Linux下的php memcached扩展

一,为什么要装memcached扩展

memcached的1.2.4及以上增加了CAS(Check and Set)协议,应对同一key的多进行程的并发处理问题。数据库里面可以锁定整张表,也可以锁定表里面一行的功能,其实memcached加入的CAS根这个差不多。
php的扩展memcache,不支持cas,所以要装memcached扩展,memcached扩展是基于libmemcached,所以要先安装libmemcached

二,查看memcahced的版本信息

telnet 127.0.0.1 12000
stats

会看到以下信息
STAT pid 15322
STAT uptime 1885
STAT time 1279455772
STAT version 1.2.8
STAT pointer_size 32
如果版本过低,考虑重新装一下
退出telnet ,ctrl+] 后按q。

三,安装所要软件

wget http://launchpad.net/libmemcached/1.0/0.42/+download/libmemcached-0.42.tar.gz
wget http://pecl.php.net/get/memcached-1.0.2.tgz

memcached的官方网站 http://www.memcached.org/

四,安装libmemcached

tar zxvf libmemcached-0.42.tar.gz
cd libmemcached-0.42
./configure --prefix=/usr/local/libmemcached  --with-memcached
make && make install

安装要注意的问题:
1、安装过程中不要忘了,--with-memcached,不然会提示
checking for memcached... no
configure: error: "could not find memcached binary"
2、memcached是不是1.2.4以上的,如果不是会提示
clients/ms_thread.o: In function `ms_setup_thread':
/home/zhangy/libmemcached-0.42/clients/ms_thread.c:225: undefined reference to `__sync_fetch_and_add_4'
clients/ms_thread.o:/home/zhangy/libmemcached-0.42/clients/ms_thread.c:196: more undefined references to `__sync_fetch_and_add_4' follow
collect2: ld returned 1 exit status
make[2]: *** [clients/memslap] Error 1
make[2]: Leaving directory `/home/zhangy/libmemcached-0.42'
解决办法是--disable-64bit CFLAGS="-O3 -march=i686"

五,php的扩展memcached的安装

tar zxvf memcached-1.0.2.tar.gz
cd memcached-1.0.2
/usr/local/php/bin/phpize
./configure --enable-memcached --with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached
./configure --prefix=/usr/local/phpmemcached  --with-memcached
make && make install
vi /usr/local/php/lib/php.ini
加上extension=memcached.so
重起服务。


你可能感兴趣的:(Windows下php_memcached编译)