You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu16.04部署Laravel项目遇mongodb/mongodb1.8.0依赖错误求助

解决Ubuntu 16.04.7 LTS上Laravel项目MongoDB扩展加载失败及Composer依赖问题

问题核心

你遇到两个连锁问题:

  1. PHP启动时无法加载mongodb.so,提示undefined symbol: spl_ce_Countable
  2. 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 mongodb
    
    应该输出mongodb,说明加载正常。再查看扩展版本:
    php --ri mongodb | grep Version
    
    确认版本≥1.8.1。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:01:13