1. 云栖社区>
  2. PHP教程>
  3. 正文

在mac下编译phpredis的c扩展给MAMP使用

作者:用户 来源:互联网 时间:2017-12-01 09:01:25

软件操作系统网站开发苹果电脑

在mac下编译phpredis的c扩展给MAMP使用 - 摘要: 本文讲的是在mac下编译phpredis的c扩展给MAMP使用, 首先解释下标题中提到的N个名词: mac:macosx,一款苹果电脑公司推出的操作系统,作为软件从业人员如果现在连这个还不知道的话呢,建议改行了 php:脚本语言,广泛应用于网站开发,成功案例有鼎鼎大名的国内永远访问超时或者500的fa

首先解释下标题中提到的N个名词:

  1. mac:macosx,一款苹果电脑公司推出的操作系统,作为软件从业人员如果现在连这个还不知道的话呢,建议改行了

  2. php:脚本语言,广泛应用于网站开发,成功案例有鼎鼎大名的国内永远访问超时或者500的facebook

  3. redis:新兴的NOSQL内存数据库代表,支持很多中数据存储格式,同时存取速度非常快,发展速度非常迅猛,开源项目,于2010年被VMWare收购

  4. phpredis:提供给php使用redis客户端扩展,采用c语言开发,速度是纯php开发的扩展predis的3倍

  5. MAMP:mac下的类似于LAMP或者WAMP的php、mysql、apache集成环境,一键安装,非常适合用来做为开发环境,但是自带的扩展数量有限

看了上面相信大家就能明白为什么要折腾编译个phpredis扩展给MAMP用了。但是要编译成功,确实不是一件容易的事情。在安装过程中,大致会碰到三个让人疑惑的地方。

  • 32位64位的问题,怎么编译成功了就是加载不上去啊,我都反复编译了不下10遍了。。。

  • 安装的MAMP里面的php是5.2的,系统又自带了个php,5.3的,哪是哪啊,真头疼。。。

  • 好不容易搞的有些些明白,php的路径知道了,怎么编译不出来啊,没有php的头文件。。。

从macox10.6雪豹开始,mac就进入了64位的世界了,但是以往的32位的程序都是能正常运行的,就像我们所下载使用的MAMP就是一个32位的程序集合。不过在默认情况下,如果我们从网上找来phpredis代码,直接编译,那么就会编译出一个仅支持64位下运行的程序,这样MAMP所带的32位的php程序是无法加载这个编译好的64位的so库文件的,我们需要让gcc编译出一个既支持32位又支持64位的so库文件来。那么到底一个编译好的文件是32位还是64位呢。可以用file命令来查看的

york:phpredis$ file modules/redis.somodules/redis.so: Mach-O universal binary with 2 architecturesmodules/redis.so (for architecture i386): Mach-O bundle i386modules/redis.so (for architecture x86_64): Mach-O 64-bit bundle x86_64

上面就是一个例子,可以看出,编译出来的是同时支持i386(32位)和x86_64(64位)架构。那是如何做到这一点的呢。只要在打开命令行,执行其他事情之前敲入下面这几行命令就可以了。这一点,我们也可以在phpredis的帮助说明里面看到。

MACOSX_DEPLOYMENT_TARGET=10.6CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

但是问题来了,按照phpredis的帮助说明,并不能编译出一个能够给MAMP使用的扩展文件出来。因为如果我们敲入phpize命令,那调用的其实是mac系统自带的php5.3的程序命令,这样编译出来的so文件是php5.3版本适用的,MAMP并不能加载成功。下面我就把具体命令列举在这,使用这些命令的原因就是因为我们需要给操作命令指定详细的MAMP所带的php路径。假设您的MAMP跟我一样,放在了/Application目录下面。

git clone https://github.com/nicolasff/phpredis.git //随便找个目录把源代码拉下来cd phpredis // 进入到phpredis目录/Applications/MAMP/bin/php5/bin/phpize./configure --with-php-config=/Applications/MAMP/bin/php5/bin/php-configmake

编译不成功。不成功就对了,因为您下载的MAMP程序集并没有把php的头文件放在他所自带的php-config所指定的目录里面。解决办法就是手动去下载相对应的头文件来,我们可以到php官网上面下载一个php源代码包,版本要是5.2的哦,千万别下错了,子版本号可能不受影响,我的MAMP自带的是5.2.6的php,但是我下载的是5.2.17这个版本的源代码。下载好了之后放到这个目录,形成像下面那张图片所示的目录结构,图片中php目录下面就是直接的源代码了。

/Applications/MAMP/bin/php5/include

在mac下编译phpredis的c扩展给MAMP使用

接下来,我们还需要运行下面这两行命令

cd /Applications/MAMP/bin/php5/include/php./configure

这样就可以了,头文件算是配置好了,不过这个方法比较苯,给include目录留下了一堆用不到的.c文件。完成之后再编译phpredis,编译成功之后会在phpredis的目录下面生成modules/redis.so文件,我们再把这个文件复制到php.ini指定的扩展的目录下面

cp modules/redis.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/

然后在php.ini文件中加入下面这行把phpredis扩展打开就可以了

extension=redis.so

到此,大功告成,可以看看phpinfo里面是不是能找到redis字样了

我的php版本是5.4.10,和他的有点不同


配置php源码环境,否则phpredis编译不过
下载php5.4.10的源码,解压,改名字为php,放到/Applications/MAMP/bin/php/php5.4.10/include下,include没有就mkdir一个

cd /Applications/MAMP/bin/php/php5.4.10/include/php/
./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config


下载phpredis
https://github.com/nicolasff/phpredis

cd phpredis

/Applications/MAMP/bin/php/php5.4.10/bin/phpize

./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config

make

cp modules/redis.so /Applications/MAMP/bin/php/php5.4.10/lib/php/extensions/no-debug-non-zts-20100525/

最后在php.ini添加extension=redis.so就ok了

上次编译失败,应该是少了在php源码目录先configure --with-php-config

------------------------------------------------------------------------------------------------------------------

附上php编译需知

在源码目录./configure以后,在scripts目录生成phpize
php插件的编译之前,需要在php源码目录先./configure一下,然后选择相应位置的phpize,./configure,make,make install
插件config的时候,需要在后面加参数--with-php-config,把php对应版本的php-congfig路径加上去

------------------------------------------------------------------------------------------------------------------

通过这个模式,phpredis和pcntl在mac下都编译成功了。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索软件 , 操作系统 , 网站开发 苹果电脑 ,以便于您获取更多的相关知识。