php win memcached vc9,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

四,安装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

重起服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值