©
本文档使用 PHP中文网手册 发布
(PECL mongo >= 1.0.0)
Thrown when the driver fails to connect to the database.
There are a number of possible error messages to help you diagnose the connection problem. These are:
No candidate servers found
Thrown when the driver cannot establish a connection to MongoDB (fulfilling the ReadPreferences, if specified).
No server name given.
This error occurs if you pass in "" as the server name, probably because of an typo with string interpolation, e.g., "$servr" instead of "$server".
failed to get host [hostname] or port [portnum] from [server].
This indicated that the server string was malformed. "[hostname]" and "[portnum]" will be as much as the driver could dicipher of it.
Operation in progress
Connecting to the database timed out.
Transport endpoint is not connected
Generally means that the connection string isn't correct, the driver couldn't even find the database server.
couldn't determine master
No server in a replica set connection was identified as the primary.
couldn't get host info for [server]
This indicated that DNS could not resolve the server address you gave. This could easily be caused by a typo, for example, "server" instead of "$server".
Invalid Argument
This can be caused by attempting to connect to a machine that is up but that the database isn't actually running on. Make sure that you've started the database server before connecting.
Permission denied
This means that the socket could not be opened due to permissions issues. On Red Hat variants, this can be caused by a default setting that does not allow Apache to create network connections. You can override this setting by running:
$ /usr/sbin/setsebool -P httpd_can_network_connect 1
If the error message is not listed above, it is probably an error from the C socket, and you can search the web for its usual cause.
[#1] jefffan24+phpcomment at gmail dot com [2013-03-07 16:31:02]
If you have MongoClient class available and use persist option you will have a bad time and get a MongoConnectionException
For example if you have:
<?php
$options = array(
'replicaSet' => false,
'persist' => false,
'connect' => false
);
return new \Mongo('mongodb://...', $options);
?>
This will not work if you have the mongo client class a better way to handle this if your not sure what is on the server this code is running on is the following:
<?php
$options = array(
'replicaSet' => false,
'connect' => false
);
if(!class_exists('MongoClient')){
$options['persist'] = false;
}
return new \Mongo('mongodb:/...', $options);
?>
This will only add it in the case where MongoClient doesn't exist and it needs it. Hope this saves anyone some heart ache.