这次装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-driver或http://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