如何让MongoDB PHP连接工作


How to get the MongoDB PHP Connection to Work

我在我的cPanel/WHM CentOS服务器中安装了MongoDB。我已经安装了PHP驱动程序。我已打开端口 27017。

这适用于$m = new MongoDB'Driver'Manager();

这些不起作用:

$m = new Mongo(); $m = new MongoClient();

两者都会导致Fatal error: Class 'Mongo' not found in ...Fatal error: Class 'MongoClient' not found in ...

有谁知道为什么?

不是重复的。SO Q适用于Windows机器。我的服务器是 Linux/CentOS

从我的托管服务提供商的系统管理员:

看起来"mongo"是与"mongodb">

分开的php模块,而"mongodb"是较新的一个:

root@host [~/支持/642192]# PECL 搜索蒙戈正在检索数据...0%

.匹配的封装,通道 pecl.php.net:

软件包稳定/(最新(本地mongo 1.6.12 (稳定版( MongoDB 数据库驱动程序 (遗留版(

mongodb 1.1.2

(稳定版( 1.1.2 适用于PHP的MongoDB驱动程序

您是否需要遗留模块"mongo"而不是"mongodb"?这是您拥有的软件包的 pecl 页面:

https://pecl.php.net/package/mongodb

这是旧模块的一个:

https://pecl.php.net/package/mongo

简答

不能将以下类与新的mongodb驱动程序一起使用: $m = new Mongo(); $m = new MongoClient(); 这对应于旧版mongo驱动程序。相反,您应该通过MongoDB PHP库使用MongoDB'Client

长答案

好吧。我对这个故事也失去了一些头发,因为关于Mongo和PHP的文档非常混乱。然后选择生气,秃头,或两者兼而有之。但我找到了勇气,终于得到了它。所以这可能会对你有所帮助。

1. MongoDB驱动程序:mongo vs mongodb

首先,您必须澄清您使用的MongoDB驱动程序mongo(旧版(或mongodb(新(。请注意较小的大小写。混淆的第一个来源是,mongo驱动程序有时被称为MongoDB(遗留(PHP驱动程序。

https://docs.mongodb.com/ecosystem/drivers/php/

第二个来源混淆,版本号不合逻辑,因为驱动程序有 1.5、1.6 mongomongodb从 1.0 重新开始。所以,前进,但倒退,这简直是疯狂的...伊莫,他们应该从 2.0 开始!

驱动程序的选择取决于您的 PHP 版本:

  • PHP5.3:您只能使用mongo旧版驱动程序(1.5、1.6(
  • PHP7.0:您只能使用新的mongodb驱动程序 (1.1+(
  • PHP5.4, 5.5, 5.6
  • :在这里您可以选择旧mongo(1.5,1.6(或新mongodb(1.0,1.1+(

但这还没有结束。该驱动程序只是一个低级接口(又名PHP扩展(。现在我们来到程序员的 API,它变得更糟。

2. API: MongoClient vs MongoDB''Driver

第三个混淆来源是低级驱动程序和 API 类的名称重叠。

  • mongo遗留驱动程序 ->类MongoClient,MongoDB (!(,...
  • mongodb driver ->类 MongoDB''Driver, MongoDB''BSON, ...

但这还没有结束。可以直接使用旧的mongo驱动程序。新的mongodb驱动程序提供了类(如MongoDB''Driver(,但它实际上是一个低级API。你不应该直接使用它,你可以,但这不方便。相反,你应该使用MongoDB PHP库,它提供了一个类似于旧的MongoClient类的API。

3. MongoDB

PHP 库 (with mongodb( -> MongoDB''Client

https://docs.mongodb.com/php-library/master/

所以如果你安装了mongodb,你应该安装这个MongoDB PHP库才能使用MongoDB''Client。这个类应该类似于旧的MongoClient,但有一些差异,例如排序和投影。

要安装此库,建议您使用名为Composer的工具,该工具允许您将这些类下载到存储库中。然后使用作曲家提供的自动加载器。

在这里,我们来到了第四个混淆来源,即使您使用的是1.1版本中的最后一mongodb驱动程序,MongoDB PHP库也是从1.0版本开始的!对于那些开发这些东西的人来说,这当然是显而易见的,但对于lambda用户来说很难遵循。疯狂令人困惑的东西。

驱动程序上方还有许多其他库,但我根本不了解它们,所以我不会详细介绍它们(https://docs.mongodb.com/ecosystem/drivers/php-libraries/(。

博士

根据您的PHP版本,阐明要使用的MongoDB驱动程序mongo(旧版(还是mongodb(新(?

  • 使用mongo您可以直接使用MongoClient类。
  • 有了mongodb你还应该安装MongoDB PHP库来使用MongoDB'Client类。

祝你好运!:)

您似乎

尚未启用或安装php_mongo扩展。启用后,重新启动 apache 并检查 phpinfo(( 以查看其是否正确启用。

您使用了正确的命名空间。如他们的文档中所述,客户端的命名空间是 MongoDB'Client .或者,您也可以使用像这样的use语句use MonogoDB'Client