Ubuntu16.04部署Laravel项目遇mongodb/mongodb1.8.0依赖错误求助
解决Ubuntu 16.04.7 LTS上Laravel项目MongoDB扩展加载失败及Composer依赖问题
问题核心
你遇到两个连锁问题:
- PHP启动时无法加载
mongodb.so,提示undefined symbol: spl_ce_Countable - Composer安装依赖时提示
mongodb/mongodb 1.8.0 requires ext-mongodb ^1.8.1
根源是现有mongodb扩展与PHP7.3版本不兼容,导致扩展加载失败,进而Composer检测不到符合要求的扩展。
解决步骤
1. 卸载有问题的mongodb扩展
先清理当前无法正常加载的扩展:
- 禁用扩展配置文件:
# 注释掉CLI和FPM的mongodb扩展配置 sed -i 's/extension=mongodb.so/;extension=mongodb.so/' /etc/php/7.3/cli/conf.d/20-mongodb.ini sed -i 's/extension=mongodb.so/;extension=mongodb.so/' /etc/php/7.3/fpm/conf.d/20-mongodb.ini - 卸载扩展(根据安装方式选择):
- 如果是通过
pecl安装的:pecl uninstall mongodb - 如果是通过
apt安装的:apt remove --purge php7.3-mongodb
- 如果是通过
2. 安装适配PHP7.3的mongodb扩展
需要用当前PHP版本编译安装兼容的扩展版本(满足ext-mongodb ^1.8.1要求):
- 先安装编译依赖:
apt update && apt install php7.3-dev build-essential - 通过
pecl安装指定版本的扩展(这里选1.8.1,刚好满足Composer要求):pecl install mongodb-1.8.1安装过程中如果提示是否启用SSL等选项,直接按回车默认即可。
3. 启用扩展并验证
- 生成扩展配置文件:
# 给CLI添加配置 echo "extension=mongodb.so" > /etc/php/7.3/cli/conf.d/20-mongodb.ini # 如果用PHP-FPM,给FPM添加配置 echo "extension=mongodb.so" > /etc/php/7.3/fpm/conf.d/20-mongodb.ini - 重启PHP-FPM(如果使用的话):
service php7.3-fpm restart - 验证扩展是否加载成功:
应该输出php -m | grep mongodbmongodb,说明加载正常。再查看扩展版本:
确认版本≥1.8.1。php --ri mongodb | grep Version
4. 解决Composer依赖问题
现在扩展已经正常加载,处理Composer的lock文件问题:
- 如果需要保持
mongodb/mongodb 1.8.0版本,直接重新安装依赖:composer install - 如果允许更新依赖,也可以更新mongodb包到兼容当前环境的版本:
composer update mongodb/mongodb
补充说明
undefined symbol: spl_ce_Countable错误的原因是:mongodb扩展编译时使用的PHP版本与当前运行的PHP7.3不匹配,导致扩展中引用的SPL类符号找不到。重新用当前PHP版本编译安装适配的扩展版本,就能彻底解决这个问题。
内容的提问来源于stack exchange,提问作者Aashir Haque
相关产品推荐
相关产品推荐

