2014-01-06 67 views
2
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 

嗨蒙戈专家...未捕获的异常 'MongoConnectionException'

我想尝试一下MongoDB的开发。因此,在测试机器(Dell E520 Intel Dual Core 4GB Ram)上安装了centoOS 6.5 64bit,安装了PHP(Apache已经存在)。

然后安装了MongoDB(yum install mongo-10gen mongo-10gen-server),然后安装了“pecl install mongo”(安装正确:channel://pecl.php.net/mongo-1.4.5),添加了扩展= mongo.so到php.ini。

要安装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防火墙冉蒙戈 - 主机本地主机:27017从外壳&连接没有问题

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

这些都是test.php的

<?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"; 
} 
?> 

内容正如你可以看到我hav e尝试了两个 $ m = new MongoClient(); & $ m = new MongoClient(“mongodb:// localhost:27017”);

但我得到同样的错误。我哪里错了?

默认的Apache在这些系统上的设置不会允许请求进行网络连接,这意味着驾驶者将得到“许可被拒绝”:

+1

这听起来像你已经设置了与MongoDB的身份验证。也许RedHat的软件包默认是这样做的? – Derick

+0

我不知道我如何设置身份验证以及如何在没有身份验证的情况下进行测试......您能告诉我如何重写代码以使用MongoDB吗? – JoshG

+0

您的mongod实例仍然可以配置为启用身份验证,即使您可以在上面连接它。要验证它是否已启用,请尝试在您的漫画集合上运行测试查询。如果你没有在mongo shell中验证你的会话,它应该会抛出一个错误。要关闭身份验证,您需要重新启动您的mongod实例。您应该检查您的mongod.cfg文件以查看它是否启用auth = true选项进行身份验证。 –

回答

10

这个问题在http://ca3.php.net/manual/en/mongo.installation.php#mongo.installation.fedora

红帽,Fedora和CentOS的记录当它尝试连接到数据库时发生错误。如果遇到这个问题,尝试运行:

$/usr/sbin目录/ setsebool -P httpd_can_network_connect 1

然后重新启动Apache。 (SELinux也发生此问题。)

感谢您的支持!

希望此主题可以帮助某人避开圈子!

+0

这个答案绝对是专注于。以为我会提到,直到我做了一个尝试和捕捉块显示错误,屏幕简直是空白。一旦我回应了$ e-> getMessage(),我发现服务器获得了Mongo拒绝的权限。 –