Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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 - Fatal编程技术网

MongoDB PHP驱动程序无法连接和验证

MongoDB PHP驱动程序无法连接和验证,php,mongodb,Php,Mongodb,我第一次为MongoDB设置了身份验证。我有两个用户:“admin”(在“admin”数据库中设置为root)和“testUser”(在“testDatabase”中设置为“dbAdmin”) 当我使用mongo shell使用以下命令登录时,一切正常: mongo -u testUser -p abcd1234 --authenticationDatabase testDatabase 在PHP方面,我有以下代码: <?php class DBConnection { cons

我第一次为MongoDB设置了身份验证。我有两个用户:“admin”(在“admin”数据库中设置为root)和“testUser”(在“testDatabase”中设置为“dbAdmin”)

当我使用mongo shell使用以下命令登录时,一切正常:

mongo -u testUser -p abcd1234 --authenticationDatabase testDatabase
在PHP方面,我有以下代码:

<?php
class DBConnection {
    const HOST = '1.1.1.1';
    const PORT = 27017;
    const DBNAME = 'testDatabase';
    const USERNAME = 'testUser';
    const PASSWORD = 'abcd1234';
    private static $instance;
    public $connection;
    public $database;

    private function __construct() {

        if (!extension_loaded('mongo')) die("MongoDB is not installed!");
        try {
            $this->connection = new MongoClient('mongodb://'.self::HOST.':'.self::PORT.'/'.self::DBNAME, array('username' => self::USERNAME, 'password' => self::PASSWORD));
            $this->database = $this->connection->selectDB(self::DBNAME);
        } catch (MongoConnectionException $e) {
            throw $e;
        }
    }

    static public function instantiate() {
        if (!isset(self::$instance)) {
            $class = __CLASS__;
            self:: $instance = new $class;
        }
        return self::$instance;
    }

    public function getCollection($name) {
        return $this->database->selectCollection($name);
    }

    public function execute($code) {
        return $this->database->execute($code);
    }
}
?>

当然,主机(以及数据库名、用户名和密码)会被混淆。我已经多次确认凭证中没有输入错误。我还验证了我可以从远程shell连接到数据库,类似于此脚本的连接方式

尽管如此,我还是经常会遇到这样的错误:

PHP致命错误:未捕获的异常“MongoConnectionException”与 消息“无法连接到:1.1.1.1:27017:身份验证” 对用户名为“testUser”的数据库“testDatabase”失败:中的身份验证失败 /var/www/html/wip/include/mongoConnect.php:17堆栈跟踪: 0/var/www/html/wip/include/mongoConnect.php(17):MongoClient->mongodb://1.1...,数组) 1/var/www/html/wip/include/mongoConnect.php(27):DBConnection->\uu construct() 2/var/www/html/wip/migration/migrate.php(85):DBConnection::instantiate() 3{main}在第17行的/var/www/html/wip/include/mongoConnect.php中抛出

两个用户的凭据都在SCRAM-SHA-1中。
知道是什么导致了这个连接问题吗

您可以尝试更改登录方式

$m=新的MongoClient(“mongodb://${username}:${password}@localhost”)

看看这里:

如我所述,出于安全目的,我删除了真实的主机IP地址。脚本中的实际主机IP指向实际IP地址