Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让MongoDB PHP连接正常工作_Php_Mongodb_Connection - Fatal编程技术网

如何让MongoDB PHP连接正常工作

如何让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 来自

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

这可以工作
$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吗