2014-01-06 70 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拒絕的權限。 –