Mongodb 未捕获异常';MongoConnectionException';

Mongodb 未捕获异常';MongoConnectionException';,mongodb,exception,connection,Mongodb,Exception,Connection,嗨,Mongo专家 我是一个想要尝试MongoDB的开发者。因此,在测试机(Dell E520 Intel双核4GB Ram)中安装了centoOS 6.5 64位,安装了PHP(Apache已经存在) 然后安装MongoDB(yum install mongo-10gen mongo-10gen-server),然后安装“pecl install mongo”(安装确定:channel://pecl.php.net/mongo-1.4.5),在php.ini中添加了extension=mong

嗨,Mongo专家

我是一个想要尝试MongoDB的开发者。因此,在测试机(Dell E520 Intel双核4GB Ram)中安装了centoOS 6.5 64位,安装了PHP(Apache已经存在)

然后安装MongoDB(yum install mongo-10gen mongo-10gen-server),然后安装“pecl install mongo”(安装确定:channel://pecl.php.net/mongo-1.4.5),在php.ini中添加了extension=mongo.so

安装PECL,我安装了其他的东西,如C++编译器和PHP PEAR。php5-dev和php5-cli在yum中不可用,因此安装了php-devel和php-cli(安装的版本为php-devel-5.3.3-27.el6_5.x86_64和php-cli-5.3.3-27.el6_5.x86_64)

我关闭了iptables防火墙,从shell运行了mongo——主机localhost:27017,连接没有问题

Fatal error: Uncaught exception 'MongoConnectionException' with message 
'Failed to connect to: localhost:27017: Permission denied' in 
/var/www/html/test.php:8 Stack trace: #0 /var/www/html/test.php(8): 
MongoClient->__construct() #1 {main} thrown in /var/www/html/test.php 
on line 8
这些是test.php的内容

[root@localhost ~]# mongo --host localhost:27017
MongoDB shell version: 2.4.8
connecting to: localhost:27017/test
> 

此问题记录在

红帽、软呢帽和CentOS:

这些系统上的默认Apache设置不允许请求进行网络连接,这意味着驱动程序在尝试连接到数据库时将出现“权限被拒绝”错误。如果遇到此问题,请尝试运行:

$/usr/sbin/setsebool-p httpd\u can\u network\u connect 1

然后重新启动Apache。(SELinux也出现了此问题。)

谢谢你的支持


希望此线程可以帮助其他人避免陷入圈套!

听起来您已经使用MongoDB设置了身份验证。也许RedHat的软件包默认会这样做?我不确定如何使用设置身份验证以及如何在没有设置身份验证的情况下对其进行测试…您能告诉我如何重写代码以使用MongoDB吗?您的mongod实例仍然可以配置启用了身份验证,即使您能够连接到上面的服务器。若要验证是否启用了身份验证,请尝试在您的Cartons集合上运行测试查询。如果您没有在mongo shell中对会话进行身份验证,则会引发错误。若要关闭身份验证,您需要重新启动mongod实例。您应该检查mongod.cfg文件,查看它是否使用auth=true选项启用身份验证。在mongod.conf中,我发现auth=true和noauth=true都有注释。我取消了noauth的注释,重新启动了mongod…结果相同。然后注释了noauth和未注释的auth,结果仍然相同。嗯,可能您的php不允许连接到套接字?尝试连接到本地端口使用php的
fopen()进行nning
netcat
或者尝试发出一个简单的HTTP GET请求。是否有一个PHP调试器可以在实际引发异常的地方中断?这比猜测容易得多。这个答案绝对正确。我想我也应该提到,在我执行try and catch块以显示错误之前,屏幕只是空白的。一旦我回显$e->getMessage()我看到服务器对Mongo的权限被拒绝。
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);

// connect
$m = new MongoClient();
//$m = new MongoClient("mongodb://localhost:27017");

// select a database
$db = $m->comedy;

// select a collection (analogous to a relational database's table)
$collection = $db->cartoons;

// add a record
$document = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($document);

// add another record, with a different "shape"
$document = array( "title" => "XKCD", "online" => true );
$collection->insert($document);

// find everything in the collection
$cursor = $collection->find();

// iterate through the results
foreach ($cursor as $document) {
    echo $document["title"] . "\n";
}
?>