PHP MongoDB:致命错误:Class' MongoClient'未找到

时间:2016-05-16 19:40:22

标签: php mongodb

执行以下PHP代码时:

$m = new MongoClient("mongodb://localhost:27017");

我收到以下错误:

  

致命错误:Class' MongoClient'没有找到(...)

MongoDB扩展似乎已正确安装(我将php_mongodb.dll复制到ext文件夹并更新了php.ini)。

PHP似乎确认扩展程序正常运行,因为以下代码确认已加载:

echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";

此外,phpinfo()表示已加载mongodb扩展名。

更新:我的问题仍未解决。

phpinfo()清楚地显示驱动程序已加载:

enter image description here

但我仍然收到同样致命的错误。

1 个答案:

答案 0 :(得分:58)

TL; DR

MongoClient是旧版PECL软件包mongo的一部分,但不再是最新mongodb软件包的一部分。

关于MongoDB PHP驱动程序github repo,关于版本1.0.0的发行说明,建议开发人员使用MongoDB\Driver\Manager代替MongoClient

  

我们传统mongo扩展程序的更改

     

最重要的是,传统驱动程序的MongoClient,MongoDB和   MongoCollection类已经被淘汰了   MongoDB \ Driver \ Manager类,这是用于连接的新网关   并执行查询,命令和写操作。

来源:https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0

当文档提示时,不推荐使用该类。

  

警告不推荐使用此扩展来定义此类。代替,   应该使用MongoDB扩展。这个类的替代品   包括:

     
      
  • 的MongoDB \驱动\管理器
  •   

来源:http://php.net/MongoClient

从我阅读on their github repository release history开始,您尝试使用的类已经从mongodb 1.0.0的版本中废弃,因此,在版本1.6.0上,此类不是甚至是dll的一部分。

this issue on their github

确认了这一点
  

derickr于4月16日发表评论

     

MongoClient是旧遗产中的一个类   驱动程序,并不应该在这一个。新的驱动程序   有\ MongoDB \ Driver \ Manager,以及附带的库   \ MongoDB的\客户端。

     

您需要安装旧的旧版扩展程序(pecl install   mongo)并使用PHP 5.x,或更新您的代码以使用这个新的驱动程序   作为旧驱动程序的类不适用于PHP 7.有一个   升级指南   http://mongodb.github.io/mongo-php-library/upgrade-guide/

来源:https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288

以下是the replacement class documentation以及应该取代您的代码片段:

$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");

另一种方式,正如上面引用的MongoDB成员所建议的那样,使用此pecl扩展名:https://pecl.php.net/package/mongo而不是https://pecl.php.net/package/mongodb,但请注意那里的警告:

  

此软件包已被取代,但仍会针对错误和安全修复程序进行维护。