在Mac OSX上编译安装Mongo PHP扩展 with XAMPP

这次装mongo php扩展真是被坑了,两台mac都是新装的系统,一台完全没有问题,一台老是报错。Baidu、Google也是搜不到答案,最后还好搞定了。

一般来说安装扩展可以使用pecl安装命令或者手动编译安装,由于Mac系统没有自带pecl,那么我们就使用phpize编译安装。

安装autoconf

在Mac OSX 上安装PHP Mongo扩展,必须先安装autoconf工具,否则使用phpize会出现下面的错误

Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.

ERROR: `phpize’ failed

1、下载最新的autoconf源码编译安装

curl http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz > autoconf.tar.gz
tar -xvzf autoconf.tar.gz
cd autoconf-2.69
./configure
make
sudo make install

2、配置PHP_AUTOCONF环境变量

export PHP_AUTOCONF=/usr/local/bin/autoconf

autoconf默认是安装在/usr/local/bin/autoconf下

安装mongo驱动

1、下载mongo驱动源码

https://github.com/mongodb/mongo-php-driverhttp://pecl.php.net/package/mongo下载php mongo驱动的源代码,这里我是下载的后者,都一样。

wget http://pecl.php.net/get/mongo-1.6.11.tgz

2、解压文件,执行编译操作,正确的步骤如下:

tar -zxvf mongo-1.6.11.tgz
cd mongo-1.6.11
phpize
./configure
sudo make
sudo make install

我这里使用的是XAMPP的php环境,则安装方法如下(编译在/Applications/XAMPP/bin目录中):

tar -zxvf mongo-1.6.11.tgz
cd mongo-1.6.11
/Applications/XAMPP/bin/phpize
./configure -with-php-config=/Applications/XAMPP/bin/php-config
sudo make
sudo make install

上面的命令集合单步执行的会有下面的提示:

1)运行phpize命令,看到类似下面的结果

Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212

2)继续执行

sudo make
sudo make install

3)执行结果显示

Installing shared extensions:     /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/

出现类似上面的输出,那个目录就是php扩展安装的目录,一般里面有个xdebug.so,进入这个目录看看,是不是多了一个mongo.so,如果有就是编译安装成功了。

修改php.ini

找到php.ini文件,XAMPP的php.ini文件在 /Applications/XAMPP/etc/php.ini 下,在php.ini文件中添加mongo配置,如下:

extension=mongo.so

重启服务器,在 phpinfo() 里面应该看到mongo的信息了。

启动Mongo

使用root权限启动mongo:

sudo mongod

如果看到等待连接提示,就启动成功了。

[initandlisten] waiting for connections on port 27017

遇到的问题如何处理

1、执行phpzie之后,显示如下错误:

running: phpize
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:

这个表示缺少一些头文件,一般来说是OSX的xcode有问题,执行下面的命令安装xcode command line developer tools

xcode-select --install

2、执行make命令后,可能出现下面的错误

In file included from /Users/David/Downloads/mongo-1.6.11/io_stream.c:34:
./contrib/php-ssl.h:33:10: fatal error: 'openssl/evp.h' file not found
#include^
1 error generated.
make: *** [io_stream.lo] Error 1

这个坑爹的问题,困扰我好久,两台mac,同一样的新系统,只有一台出现这个。一开始就跑去Baidu、Google,并没有找到解决办法,甚至相关关键字都搜不到,其实只是一看,就是php-ssl.h头文件包含的openssl/evp.h文件没有找到。重点来了,全局搜索evp.h

find / -name 'evp.h'

如果你安装了openssl,集成环境应该默认会安装的,搜索结果中应该可以找到下面其中一行

/Applications/XAMPP/xamppfiles/include/openssl/evp.h
/usr/local/Cellar/openssl/1.0.2d_1/include/openssl/evp.h

将其中一个openssl目录,拷贝到mongo-1.6.11/contrib目录下

cp -r /Applications/XAMPP/xamppfiles/include/openssl ./contrib

3、如果使用 sudo make && make install 编译安装,还有可能提示下面的错误:

Installing shared extensions:     /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/
cp: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/#INST@70240#: Permission denied
make: *** [install-modules] Error 1

这个其实是编译成功了,已经保存到源代码的modules目录下,只是拷贝编译文件mongo.so遇到了权限问题,手动拷贝mongo.so到相应目录即可。

cp ./modules/mongo.so /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20121212/

其他快速安装方式

如果使用XAMPP环境,网上搜索有人使用下面的操作安装成功,不过我试了,没有成功,感兴趣的可以试试,看看你们的运气。

brew install wget
brew install autoconf
sudo /Applications/XAMPP/xamppfiles/bin/pecl install mongo

扩展阅读

MongoDB 安装/配置

MongoDBPHP 扩展

Installing the PHP/MongoDB extension on Mac OSX 10.8

如需转载,请注明出处: https://chadou.me/p/175

最新发布