2013-05-27 118 views
2

我揣摩为什么PHP驱动程序无法连接到MongoDB的PHP无法创建连接到MongoDB的

  • PHP 5.3.16版(64位)
  • 的MongoDB:MongoDB的-Linux的x86_64-2.4 0.3
  • OS:CentOS版本5.2(最终)

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

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

  • 发起蒙戈:

蒙戈/ bin中/ mongod的--dbpath =蒙戈/数据--fork --logpath的/ var/wefi /日志/ feederliteRC/mongodb的。日志

所有工作正常,可以连接mongoVUE监视器工具。 (从Windows7的)

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

我安装的驱动程序为PHP:

sudo的PECL安装蒙戈

上: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服务器错误连接到:本地主机:27017:连接被拒绝”

我是否需要添加smoething到php.ini

+1

尝试增加$ E->的getMessage()到您的第一个catch块的输出(你打的那个),你可能知道问题是什么。 – leftclickben

+0

谢谢,请参阅我的编辑 –

+0

您的连接字符串错误,应该是'mongodb:// localhost'尝试看看它是否有所改进 – Sammaye

回答

3

我觉得你的连接应该是这样的:

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

您也可以更好的利用MongoClient因为蒙戈已废弃版本1.3.0。

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

参见更多信息PHP手册: http://nl.php.net/manual/en/mongo.connecting.auth.php

编辑 如果本地主机将无法正常工作使用的IP地址,而不是(感谢马克西姆Shoustin)

对于蒙戈它会成为:

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

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

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

'Mongo()'仍然有效,这不是问题 – Sammaye

+0

@正如我所说的,Sammaye已被弃用。我不说你不能再使用它了。同样是与你仍然可以使用它,但你不应该这样做,因为它已被弃用。最好的方法是使用最后的方法而不是旧的方法。 – Perry

+0

它被弃用,但它仍然有效,你的答案并没有解决问题编辑:好的,我真的看到你修改连接字符串,没有看到最初 – Sammaye

0

我找到了一步一步的指导,但在我看来你做得很对。也许this可以帮助你。在这种情况下,他不使用连接参数可言,但我敢肯定它应该是一个IP或连接字符串临客这样的:

mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 
+0

您拥有的链接不起作用 –

0

今后任何人都喜欢我,得到了与开始时很迷茫MongoDB在2016年。前面提到的连接方法现在已被弃用。

要使用的版本,如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