我在我的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 mongo
但mongodb
从 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。
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
。