phpinfo与pecl显示MongoDB版本不一致,调用isDefault()报错求助
解决MongoDB扩展版本不一致导致的
WriteConcern::isDefault()未定义错误 Hey,我一眼就看出问题出在哪了——你终端里pecl显示已经安装了1.4.3版本的mongodb扩展,但PHP实际运行时加载的却是旧的1.2.9版本,而MongoDB\Driver\WriteConcern::isDefault()这个方法是1.3.0版本才新增的,旧版本自然没有,所以才会报这个致命错误。
下面是具体的解决步骤,跟着做就行:
1. 清理旧版本的扩展配置
首先找到PHP的扩展配置目录,不同环境路径略有差异:
- 若使用Web服务器(如Apache),路径大概是
/etc/php/[你的PHP版本]/apache2/conf.d/ - 若用命令行运行脚本,路径是
/etc/php/[你的PHP版本]/cli/conf.d/
进入目录后,找到对应1.2.9版本的mongodb扩展配置文件(比如20-mongodb.ini),直接删除或者重命名(例如改成20-mongodb.ini.old),避免PHP加载它。另外如果还有旧的mongo扩展配置(比如20-mongo.ini)也一起处理掉,这个旧驱动已经废弃,留着只会添乱。
2. 确保新版本扩展被正确启用
先重新安装1.4.3版本的扩展(也可以直接装最新稳定版,看你需求):
sudo pecl install mongodb-1.4.3
安装完成后,手动生成正确的扩展配置文件(替换成你的PHP版本,比如7.0):
sudo echo "extension=mongodb.so" > /etc/php/7.0/mods-available/mongodb.ini
然后启用这个扩展:
sudo phpenmod mongodb
3. 重启服务让配置生效
- 如果是Web环境,重启Apache或Nginx:
sudo service apache2 restart
- 如果是命令行模式,直接关闭当前终端重新打开即可,新终端会加载新的扩展配置。
4. 验证版本是否匹配
现在运行这个命令查看PHP实际加载的版本:
php -i | grep "MongoDB extension version"
或者刷新phpinfo()页面,确认版本已经变成1.4.3。这时候再运行你的Demo,那个错误应该就消失了。
额外提醒
别同时安装mongo和mongodb两个扩展,它们是新旧两套驱动,同时存在很容易冲突。另外如果你的项目用Composer管理依赖,记得mongodb/mongodb包的版本要和扩展版本兼容,不然可能还会出现其他奇怪的问题。
内容的提问来源于stack exchange,提问作者Yogesh Dobariya
相关产品推荐
相关产品推荐

