Ubuntu 16.04连接MongoDB报500错误,已启用PHP Mongo,如何修复?
刚碰到过类似的坑,给你几个实用的排查和修复步骤:
第一步:先抓出具体错误原因
500是个模糊的服务器错误,必须先看PHP错误日志才能精准定位问题。Ubuntu 16.04里,如果你用的是Apache,日志路径一般是/var/log/apache2/error.log;如果是Nginx+PHP-FPM,日志在/var/log/php7.0-fpm.log。
用命令实时监控日志:
tail -f /var/log/apache2/error.log
然后刷新触发500错误的页面,就能看到具体报错(比如类不存在、连接超时、权限问题等)。
第二步:检查驱动与代码的兼容性
你代码里用的MongoClient是旧版mongo扩展的API,但Ubuntu 16.04搭配的PHP7.0已经废弃了这个扩展,默认安装的是新版mongodb扩展——这两个扩展的API完全不兼容,这大概率是问题根源。
两种解决思路:
思路1:适配新版扩展重写代码
如果用的是官方新版mongodb扩展,推荐通过Composer安装mongodb/mongodb包,这样代码写法更接近旧版逻辑:<?php // 引入Composer自动加载文件(如果没装Composer,先去官网安装) require 'vendor/autoload.php'; try { // 新版连接方式 $client = new MongoDB\Client("mongodb://localhost:27017"); echo "Connection to database successfully"; // 选择数据库的逻辑和旧版一致 $db = $client->mydb; echo "Database mydb selected"; } catch (Exception $e) { // 捕获错误方便调试,上线前可以删掉 echo "Error: " . $e->getMessage(); } ?>不想用Composer的话,也可以用底层的
MongoDB\Driver\Manager连接,但操作会繁琐很多。思路2:回退到旧版mongo扩展(仅适合PHP5.x)
如果你用的是Ubuntu 16.04里的PHP5.6,还能安装旧版扩展:apt-get install php5-mongo装完重启Apache或PHP-FPM即可,但PHP7.x就别折腾这个了,官方已经停止维护旧扩展。
第三步:确认MongoDB服务是否正常运行
别光顾着排查PHP,先看看MongoDB本身有没有在工作:
systemctl status mongod
如果显示inactive,立刻启动服务:
systemctl start mongod # 顺便设置开机自启,避免重启服务器后服务中断 systemctl enable mongod
第四步:验证扩展是否真的生效
虽然你看了phpinfo,但有时候CLI和Web端的PHP配置是分开的。在命令行执行:
php -m | grep mongo
如果输出是mongodb,说明装的是新版扩展;如果是mongo就是旧版。对比web端phpinfo里的扩展名称,确保两者一致,且扩展确实处于启用状态(没有被注释)。
内容的提问来源于stack exchange,提问作者BhAvik Gajjar

