【问题标题】:PHP fails to create connection to mongoDBPHP 无法创建到 mongoDB 的连接
【发布时间】:2013-05-27 08:26:49
【问题描述】:

我试图弄清楚为什么 PHP 驱动程序无法连接到 mongoDB

  • PHP 版本 5.3.16(64 位)
  • MongoDB:mongodb-linux-x86_64-2.4.3
  • 操作系统:CentOS 5.2 版(最终版)

  • 添加链接:mongo -> mongodb-linux-i686-2.4.3

  • 已创建data 文件夹:mkdir /home/max/mongo/data

  • 启动mongo:

mongo/bin/mongod --dbpath=mongo/data --fork --logpath /var/wefi/logs/feederliteRC/mongodb.log

一切正常,可以连接mongoVUE监控工具。 (来自Windows7)

现在,我尝试从 PHP 连接到 BongoDB:

我为 PHP 安装了驱动程序:

sudo pecl 安装 mongo

开:php -i | grep mongo 我明白了:

mongo
mongo.allow_empty_keys => 0 => 0
mongo.chunk_size => 262144 => 262144
mongo.cmd => $ => $
mongo.default_host => localhost => localhost
mongo.default_port => 27017 => 27017
mongo.is_master_interval => 15 => 15
mongo.long_as_object => 0 => 0
mongo.native_long => 0 => 0
mongo.ping_interval => 5 => 5
OLDPWD => /usr/share/pear/doc/mongo
_SERVER["OLDPWD"] => /usr/share/pear/doc/mongo

我添加到php.ininano /etc/php.ini):extension=mongo.so

并重新启动httpd:/etc/init.d/httpd restart

来自代码:

 try {
        // open connection to MongoDB server
        $conn = new Mongo('localhost');
} catch (MongoConnectionException $e) {            
        die('Error connecting to MongoDB server');
        } catch (MongoException $e) {           
        die('Error: ' . $e->getMessage());
    }

PHP 看到 new Mongo 但我得到异常:"Error connecting to MongoDB server

奇怪,mongoDB 运行,PHP 驱动程序工作,但它没有看到 mongoDB。

谁能帮帮我,

[编辑]

“连接到 MongoDB 服务器时出错无法连接到:localhost:27017:连接被拒绝”

我需要给php.ini添加smoething吗?

【问题讨论】:

  • 尝试将 $e->getMessage() 添加到您的第一个 catch 块(您正在点击的那个)的输出中,您可能知道问题所在。
  • 你的连接字符串错误,应该是mongodb://localhost试试看有没有改善

标签: php mongodb


【解决方案1】:

我认为你的连接应该是这样的:

$conn = new Mongo("mongodb://localhost");

您还可以更好地使用 MongoClient,因为 Mongo 从 1.3.0 版开始已弃用。

$m = new MongoClient("mongodb://localhost", array("username" => $username, "password" => $password));

有关更多信息,请参阅 php 手册: http://nl.php.net/manual/en/mongo.connecting.auth.php

编辑 如果 localhost 不起作用,请改用 IP 地址(感谢 Maxim Shoustin)

对于 Mongo,它将是:

$conn = new Mongo("mongodb://127.0.0.1");

或者如果您使用 MongoClient,它将是这样的:

$m = new MongoClient("mongodb://127.0.0.1", array("username" => $username, "password" => $password));

【讨论】:

  • Mongo() 仍然可以使用,这不是问题
  • @Sammaye 正如我所说的,它已被弃用。我不是说你不能再使用它了。 mysql也是如此,你仍然可以使用它,但你不应该这样做,因为它已被弃用。最好是使用最后一种方法而不是旧方法。
  • 它已被弃用但它仍然有效,您的回答并没有解决问题编辑:好的,我实际上看到您修改了连接字符串,最初没有看到
  • @Perry 我已经通过这个命令创建了用户 db.createUser( { user: "root", pwd: "12345", roles: [{ role: "userAdmin", db: "sangi" } ] });并创建了用户,但是当我使用 PHP MongoClient 与此代码 new MongoClient("mongodb://127.0.0.1",array("username" => 'root', "password" => '12345','db '=>'桑吉'));面临同样的错误。
  • 你可以通过cli连接到你的mongodb实例吗?另外看看php.net/manual/en/mongodb-driver-manager.construct.php,因为 MongoClient 已被弃用
【解决方案2】:

我找到了分步指南,但在我看来,您做得对。也许this 可以帮助你。在这种情况下,他根本不使用连接参数,尽管我很确定它应该是 IP 或连接字符串链接:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

【讨论】:

    【解决方案3】:

    对于像我这样在 2016 年开始使用 MongoDB 时感到非常困惑的未来人。前面提到的连接方法现已弃用。

    要连接到具有 3.2 等版本的 MongoDB,您需要:

    $mongo = new Mongo\Driver\Manager('mongodb://localhost'); // if you have MongoDB PHP drivers and no Library
    //Alternatively (recommended)
    $mongo = new Mongo\Client; // for default local connection - MongoDB library required
    

    【讨论】:

      【解决方案4】:

      如果您正在运行 SELinux 并且命令行连接正常但 PHP 连接失败,请尝试以下命令。

      /usr/sbin/setsebool -P httpd_can_network_connect 1

      然后重新启动 Apache。

      https://www.php.net/manual/en/mongo.installation.php

      【讨论】:

        猜你喜欢
        • 2018-02-23
        • 2013-05-24
        • 2023-03-07
        • 2023-03-15
        • 1970-01-01
        • 2012-02-01
        • 2016-07-31
        相关资源
        最近更新 更多