如何让MongoDB PHP连接正常工作
我的cPanel/WHM CentOS服务器中安装了MongoDB。 我已经安装了PHP驱动程序。 我打开了27017端口 这可以工作如何让MongoDB PHP连接正常工作,php,mongodb,connection,Php,Mongodb,Connection,我的cPanel/WHM CentOS服务器中安装了MongoDB。 我已经安装了PHP驱动程序。 我打开了27017端口 这可以工作$m=newmongodb\Driver\Manager() 这些方法不起作用: $m=newmongo(); $m=新的MongoClient() 这两种情况都会导致致命错误:在…中找不到类“Mongo”和致命错误:在…中找不到类“MongoClient” 有人知道为什么吗 不是重复的。所以Q是针对Windows机器的。我的服务器是Linux/CentOS 来自
$m=newmongodb\Driver\Manager()代码>
这些方法不起作用:
$m=newmongo();
$m=新的MongoClient()代码>
这两种情况都会导致致命错误:在…
中找不到类“Mongo”和致命错误:在…
中找不到类“MongoClient”
有人知道为什么吗
不是重复的。所以Q是针对Windows机器的。我的服务器是Linux/CentOS
来自我的主机提供商的系统管理员:
看起来“mongo”是一个独立于“mongodb”的php模块,“mongodb”是一个较新的模块:
root@host[~/support/642192]#pecl搜索mongo
正在检索数据…0%
.匹配的软件包,channel pecl.php.net:
包装稳定/(最新)本地
mongo 1.6.12(稳定)MongoDB数据库驱动程序(传统)
用于PHP的mongodb 1.1.2(稳定)1.1.2 mongodb驱动程序
您是否需要传统模块“mongo”而不是“mongodb”?以下是您拥有的软件包的pecl页面:
这是遗留模块的一个:
您已经使用了正确的命名空间。因为客户端的名称空间是MongoDB\client
。您也可以使用类似这样的use
语句use MonogoDB\Client
看起来您还没有启用或安装php\u mongo扩展。
启用后,重新启动apache并检查phpinfo()是否正确启用。简短回答
您不能将以下类与新的mongodb
驱动程序一起使用:
$m=新的Mongo();
$m=新的MongoClient();
这与传统的mongo
驱动程序相对应。相反,您应该通过MongoDB PHP库使用MongoDB\Client
长话短说
好的。我对这个故事也感到有些困惑,因为关于Mongo和PHP的文档非常混乱。接下来的选择是发疯、秃顶或两者兼而有之。但我找到了勇气,终于得到了。所以这可能对你有帮助
1.MongoDB驱动程序:mongo vs MongoDB
首先,您必须明确使用哪个MongoDB驱动程序:要么mongo
(旧版)要么MongoDB
(新版)。请注意较小的案例。混淆的第一个原因是,mongo
驱动程序有时被称为MongoDB(遗留)PHP驱动程序
第二个源代码混淆,版本号不符合逻辑,因为mongo
驱动程序有1.5、1.6,但是mongodb
从1.0重新开始。所以,向前走,但向后走,这太疯狂了。。。依我看,他们应该从2.0开始
驱动程序的选择取决于您的PHP版本:
- PHP5.3:您只能使用
mongo
legacy驱动程序(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
legacy驱动程序->类MongoClient,MongoDB(!)
mongodb
driver->classes mongodb\driver,mongodb\BSON
但它还没有结束。旧的mongo
驱动程序可以直接使用。新的mongodb
驱动程序提供了类(例如mongodb\driver),但实际上它是一个低级API。你不应该直接使用它,你可以,但它不方便。相反,您应该使用MongoDB PHP库,它提供了一个类似于旧MongoClient类的API
3.MongoDB PHP库(使用MongoDB)->MongoDB\Client
因此,如果您安装了mongodb
,您应该安装这个mongodb PHP库,以便使用mongodb\Client。这个类应该类似于旧的MongoClient,但是有一些区别,比如排序和投影
要安装此库,建议您使用名为Composer的工具,该工具允许您将这些类下载到repo中。然后使用Composer提供的自动加载器
现在我们来看第四个混淆源,MongoDB PHP库的版本是从1.0开始的,尽管您使用的是1.1版中最后一个MongoDB
驱动程序!这对于那些开发这种东西的人来说是显而易见的,但对于lambda用户来说却很难做到。疯狂混乱的东西
在驱动程序之上还有许多其他库,但我根本不了解它们,因此我将不再深入讨论它们()
TL;博士
根据您的PHP版本,说明要使用哪个MongoDB驱动程序:mongo
(旧版)或MongoDB
(新版)
- 使用
mongo
可以直接使用MongoClient
类
- 使用
mongodb
还应安装mongodb PHP库以使用mongodb\Client
类
祝你好运!:) 可能的重复不是重复。因此,Q代表Windows机器。我的服务器是Linux/centostanks@timhysniu。如果已安装/正确启用,它将是什么样子?我将如何在我的phpinfo()
中说明?它应该作为一个新的扩展类别列出:mongo。在其中,您应该看到mongo的设置,例如:版本:1.4.5,SSL支持:enabled,…好的,谢谢@timhysniu。我有一个mongodb
部分,但没有mongo
部分。我会和系统管理员联系的。希望你给我指出了正确的方向。经过大约一周的努力,你可能最终成为第一个用别针指出这个问题的人。你能读一下我的系统管理员刚才发来的信息,告诉我是否需要旧版mo吗