MacOs + XAMPP | PHP7 + Mongo一次糟心的环境搭建历程

xampp 版本7.2.*

macos系统PHP版本7.1.*(升级了)

开发环境xampp里PHP版本7.2.*

 

1. 安装mongodb 版本4.2.*

最好的手册就是官网的指引。https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x-tarball/

# 配置mongod.conf
systemLog:
   destination: file
   path: "/Applications/XAMPP/xamppfiles/var/log/mongodb.log"
   logAppend: true
storage:
   dbPath: "/Applications/XAMPP/xamppfiles/var/mongodb"
   journal:
      enabled: true
processManagement:
   fork: true
net:
   bindIp: 127.0.0.1
   port: 27017
setParameter:
   enableLocalhostAuthBypass: true

为了更好的管理开发环境,mongodb放在XAMPP文件夹下。

# 安装目录
/Application/XAMPP/xamppfiles/mongodb-4.2.1
# config目录
/Application/XAMPP/xamppfiles/mongodb-4.2.1/etc
# 数据文件位置
/Application/XAMPP/xamppfiles/var/mongodb
# log文件
/Application/XAMPP/xamppfiles/log/mongodb.log

剩下的启动等可以参考文档操作。

2. 安装PHP扩展,即mongodb.so。

下载地址1:https://pecl.php.net/package/mongodb

下载地址2:https://github.com/mongodb/mongo-php-driver

可能方案1:

tar -zxf mongodb-1.6.0.tgz
cd mongodb-1.6.0/
phpize
./configure --with-php-config=/urs/bin/php-config
make && make install

注意:phpize和php-config换成需要的PHP版本的,例如:

/Application/XAMPP/bin/phpize-7.2.11
/Application/XAMPP/bin/php-config-7.2.11

注意:如果不加--with-php-config参数,也可以。但是在执行make时,很多c文件需要类库,会默认使用系统path下能找到的头文件。如果路径配置有问题,会发生找到不到php.h的错误。还可能引发编译编码问题。建议使用参数。

如果发生因cp权限不够的错误时,手动把so文件复制到extension_dir目录(php.ini中有配置)下即可。

修改php.ini,添加extention=mongodb.so即可。

正常情况下,重启Apache或者NGINX就可以正常使用了。

备注:

使用【下载地址2】进行编译时,需要额外处理一下

# 下载主项目
git clone https://github.com/mongodb/mongo-php-driver.git
cd mongo-php-driver
# 下载子模块;主要是src/libmongoc,如果因各种原因出错了,删除掉libmongoc后再执行下面的代码
git submodule sync && git submodule update --init

3. 定位错误

然而phpinfo查看,没有mongodb相关的任何配置。发生错误查看下面两个文件。

# php加载的错误日志
/Application/XAMPP/xamppfiles/logs/php_error_log

# xampp错误日志
/Application/XAMPP/xamppfiles/logs/error_log

可能PHP错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20170718/mongodb.so (dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20170718/mongodb.so, 9): Symbol not found: _sqlite3_bind_blob64
  Referenced from: /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard
  Expected in: /Applications/XAMPP/xamppfiles/lib/libsqlite3.0.dylib
 in /System/Library/PrivateFrameworks/BaseBoard.framework/Versions/A/BaseBoard), /Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20170718/mongodb.so.so (dlopen(/Applications/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20170718/mongodb.so.so, 9): image not found)) in Unknown on line 0

原因就是mongodb.so和原来的动态库或者插件不兼容。升级或者替换就行。

类似上面的错误一般可以在Referenced from提示的目录里找到合适的替代文件: /System/Library/……/A/

我遇到不兼容的库有:libz.dylib、libpng15.dylib、libpng15.15.dylib、libpng.dylib、libjepg8.dylib、libjepg.dylib、libsqlite3.0.dylib

除了libsqlite3.0.dylib都可以用系统里的替代(原因是我之前已经升级过,刚好匹配)。libsqlite3.0.dylib是因为系统默认的是32位的。现在mongodb用到的是64位。我尝试了很多方法和渠道没有到找匹配的可以直接使用的文件。

最后决定放弃XAMPP,投奔MAMP。在安装MAMP后,从塔的集成环境中找到一个libsqlite3.0.dylib文件,替换后可以正确使用。

4. 补充

如果你的系统没有多套PHP版本,那么可以用xampp自带的pecl来安装mongo扩展。

# PHP版本5.*可用
sudo /Applications/XAMPP/xamppfiles/bin/pecl install mongo

# PHP版本7.*可用
sudo /Applications/XAMPP/xamppfiles/bin/pecl install mongodb

 

Windows环境搭建,可以参考这个:

https://blog.csdn.net/weixin_40965293/article/details/82151111

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鲸鱼吃小鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值