抓狂 - php class mongodb driver manager not found

有个与第三方对接的系统,今天对方突然反映无法连接我们的MongoDB数据库,提示php class mongodb driver manager not found错误。对接系统之前一直运行很好,没有出现过这个问题。

服务器挂掉?MongoDB数据库挂掉?

迅速检查了服务器,OK。测试了MongoDB数据库的连接性,也OK!此外这个对接系统最近没有做过任何的版本与配置修改,那问题发生在哪里?

突然想起前几日重启了服务器,会不会是有些服务没有运行?对接系统是通过部署在我们服务器的php脚本实现的。这时自己才依稀记起在当初做对接配置时,是需要运行一个php相关的服务,经查询是php-fpm(FastCGI Process Manager)服务。php-fpm是一个php的FastCGI管理器,实现了FastCGI协议,负责对php请求的进行解析。

利用命令sudo service php-fpm start启动php-fpm,未提示任何错误。正当以为自己搞定时,却被对方的回复泼了一盆冷水,还是不行,提示同样的错误。

既然提示驱动未找到,那么是不是哪里的配置不正确?php访问MongoDB数据库需要通过一个驱动程序,而这个驱动程序是通过一个php的扩展来实现加载。检查了mongodb.so的扩展以及php.ini的配置,发现都没有问题。这时自己陷入一种摸不着头脑的慌乱状态,不断问自己问题会在哪里。

突然想起这台服务器的php安装曾经出现过问题,安装了两次php,造成有两个php程序,而且版本都是一样的,我想可能就是由于这个引起的。利用php -info检查php.ini的配置信息,果真与自己查看另一个php.ini的配置文件不太一样。在另外一个配置文件中,mongodb.so扩展被做了配置,而这个默认的却没有。

对于程序的bug,找到原因,也就找到解决方案。在启动php-fpm时,显示指定了php.ini以及php-fpm.ini的配置,结果一切正常!启动命令如下:
/usr/local/php/sbin/php-fpm -c <php.ini的绝对路径> -y <php-fpm.conf的绝对路径>

对于这个问题,网上基本都是给出检查mongodb.so扩展配置是否正确的解决方案,我想这是大部分人遇到的问题。对于我这种情况到目前为止还不见有人提起,写下此文给以后会遇到同样问题的人做些参考。

推荐阅读更多精彩内容

  • [toc] 在公司的网站上推荐使用 docker 容器来安装环境,一个项目一个 docker 容器。 、、 百度百...
    Mdvtrw阅读 943评论 0 1
  • 这篇是Nginx安装配置PHP(FastCGI)环境的教程。Nginx不支持对外部程序的直接调用或者解析,所有的外...
    SkTj阅读 2,458评论 2 20
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 24,436评论 2 82
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 7,991评论 5 123
  • 从小跟随姥姥生活,姥姥是个戏迷,记得数十里外有亲戚村里唱大戏,亲戚拉了架子车(就是两轮车,需要有人行走拉车)来接姥...
    看看白话阅读 40评论 1 1