背景
在homestead中给php7.1版本安装mongodb扩展,使用shell pecl install mongodb
安装完之后在php.ini文件中添加extenstion=mongodb.so,运行php -m 提示 code PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20160303/mongodb.so' - /usr/lib/php/20160303/mongodb.so: cannot open shared object file: No such file or directory in Unknown on line 0
发现pecl install mongodb 安装到了/usr/lib/php/20180731这个文件夹中。
排错
各种google之后发现需要自己编译安装
1.下载mongodb扩展源码,并解压
wget https://pecl.php.net/get/mongodb-1.6.0.tgz
tar -zxvf mongodb-1.6.0.tgz
- 查找phpize的执行文件
whereis phpize
image.png
3.选择合适的phpize,生成configure文件(我需要/usr/bin/phpize7.1 )
cd mongodb-1.6.0
/usr/bin/phpize7.1
4.查找php-config
whereis php-config
image.png
5.编译安装
./configure --with-php-config=/usr/bin/php-config7.1
make && make install
6.验证
php -m
思考
看到有一篇文章说可以通过改pecl的配置来实现用pecl给不同的版本安装扩展 https://www.jianshu.com/p/fee58d93e8b1
但是我用pecl config-show 查看我配置,发现我的php扩展目录是20160303,但是安装依然为安装到20180731,不知道为什么,看pecl install mongodb执行的过程,会使用phpize,而这个phpize显示的目录就是20160303,自己不是很懂底层的加载原理。以后对于系统有多个php版本安装扩展还是建议手动编译安装。
homestead中切换php版本
update-alternatives --config php
网友评论