downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Mongo::dropDB> <Mongo::connectUtil
[edit] Last updated: Fri, 25 May 2012

view this page in

Mongo::__construct

(PECL mongo >=0.9.0)

Mongo::__constructCrée un nouvel objet de connexion à une base de données Mongo

Description

public Mongo::__construct ([ string $server = "mongodb://localhost:27017" [, array $options = array("connect" => TRUE) ]] )

Si aucun paramètre n'est passé, la connexion se fera sur "localhost:27017" (ou ce qui a été spécifié dans php.ini pour mongo.default_host et mongo.default_port).

server doit être de la forme:

mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db

La chaine de connexion débute toujours par mongodb://.

Si username et password sont précisés, le constructeur tentera d'authentifier la connexion à la base. Username et password sont optionnels et doivent être suivis d'une @, si renseignés.

Au moins un hôte doit être précisé (port optionnel, par défaut 27017) et plusieurs hôtes vers lesquels se connecter peuvent être passés. Les noms d'hôtes sont séparés par des virgules et le constructeur exécutera sans erreur si au moins un des hôtes peut être connecté. Si il ne peut se connecter à aucun hôte, il enverra une MongoConnectionException.

Enfin, si vous avez précisé un username et un password, vous devez préciser une base de données envers laquelle s'authentifier. Si db n'est pas renseigné, "admin" sera utilisé.

Liste de paramètres

server

Le nom du serveur.

options

Un tableau d'options pour la connexion. Les options disponibles sont:

  • "connect"

    Si le constructeur doit se connecter avant de retourner l'objet. Par défaut TRUE.

  • "timeout"

    Période avant timeout (tentative de connexion à la base). En millisecondes.

  • "replicaSet"

    Nom du pool de réplicats sur lequel se connecter. Si fourni, le maitre sera déterminé en utilisant la commande ismaster sur les serveurs, ainsi le pilote peut se connecter à un serveur qui n'était même pas listé. Voyez l'exemple après pour plus de détails.

  • "username"

    Le nom d'utilisateur peut être spécifié ici, au lieu de l'inclure dans la liste des hôtes. Ceci est utile tout spécialement si le nom d'utilisateur contient un caractère ":". Ce paramètre écrase le nom d'utilisateur défini dans la liste des hôtes.

  • "password"

    Le mot de passe peut être spécifié ici, au lieu de l'inclure dans la liste des hôtes. Ceci est utile tout spécialement si le mot de passe contient le caractère "@". Ce paramètre écrase le mot de passe défini dans la liste des hôtes.

  • "db"

    La base de données utilisée pour l'authentification peut être spécifiée ici, au lieu de l'inclure dans la liste des hôtes. Ce paramètre écrase la base de données fournie dans la liste des hôtes.

Valeurs de retour

Retourne un nouvel objet de connexion à la base de données Mongo.

Erreurs / Exceptions

Emet une exception MongoConnectionException si la connexion échoue avec les identifiants pour la base de données considérée ou si les identifiants sont invalides. Voyez la documentation de MongoConnectionException pour en savoir plus sur les exceptions courantes et leurs causes.

Historique

Version Description
1.2.0

Suppression de l'option persist, toutes les connexions sont desormais persistantes. Le paramètre peut tout de même être utilisé, il sera simplement ignoré.

"persist"

Si la connexion doit être persistante. La chaine représentant la valeur est utilisée comme identifiant de connexion, ainsi deux instances de Mongo qui sont initialisées avec array("persist" => "foobar") vont partager la même connexion à la base, alors que une instance initialisée avec array("persist" => "barbaz") utilisera une connexion différente.

Le paramètre "replicaSet" accepte maintenant une chaine, pas un booléen (même si le booléen est toujours accépté).

1.0.2 Le constructeur a changé pour accepter une tableau. Avant 1.0.2, le constructeur acceptait les paramètres suivants:
server

Nom du serveur

connect

Paramètre optionnel indiquant si le constructeur doit se connecter à la base avant de retourner l'objet. Par défaut TRUE.

persistent

Si la connexion doit être persistante.

paired

Si la connexion doit être pairée.

1.0.9 Ajout de l'option replicaSet.
1.2.0 Ajout des options username et password.

Exemples

Exemple #1 Exemple avec Mongo::__construct() et un pool de réplicats

Cet exemple montre comment se connecter avec le driver à un pool de réplicats. Il suppose un jeu de trois serveurs: sf1.example.com, sf2.example.com et ny1.example.com. Le maitre peut être l'un de ces serveurs.

<?php

// Passer une liste séparée par une virgule de noms de serveurs au constructeur
$m1 = new Mongo("mongodb://sf2.example.com,ny1.example.com", array("replicaSet" => "myReplSet"));

// Vous ne passez qu'un seul serveur, le pilote récupèrera la liste complète et trouvera
// le maitre depuis ce serveur
$m2 = new Mongo("mongodb://ny1.example.com", array("replicaSet" => "myReplSet"));

?>

Si le maitre courant échoue, le pilote calculera quel serveur secondaire deviendra le nouveau maitre et utilisera sa connexion. Le failover ne fonctionnera pas correctement si replicaSet n'est pas spécifié.

Au moins un serveur dans la liste doit fonctionner pour que le pilote se connecte au pool de replica.

Si vous incluez des serveurs depuis deux pools de réplicats distincts, le comportement est alors indéfini.

Voyez la » documentation du coeur sur la réplication.

Exemple #2 Connexion via socket UNIX

Dans les versions 1.0.9+, vous pouvez utiliser un socket du domaine UNIX pour vous connecter à une instance de MongoDB locale. Ceci devrait être plus rapide qu'une connexion réseau.

Dans la version 1.5.0, Le serveur MongoDB ouvre automatiquement un socket à /tmp/mongodb-<port>.sock. Vous pouvez vous y connecter en précisant le chemin dans la chaine de connexion:

<?php

// Serveur MongoDB local sur le port 20000
$m = new Mongo("mongodb:///tmp/mongodb-20000.sock");

?>

Vous pouvez combiner cela avec d'autres connexions:

<?php

// Essaye la connexion socket UNIX, utilise localhost sinon
$m = new MongoDB("mongodb:///tmp/mongodb-27017.sock,localhost:27017");

?>

Exemple #3 Exemple d'authentification Mongo::__construct()

Un utilisateur doit exister dans la base de données admin avant de lancer l'authentification. Vous pouvez créer un utilisateur avec la commande shell Mongo suivante:

> use admin
switched to db admin
> db.addUser("testUser", "testPass");
{
        "_id" : ObjectId("4b21272fd9ab21611d19095c"),
        "user" : "testUser",
        "pwd" : "03b9b27e0abf1865e2f6fcbd9845dd59"
}
>

Après avoir crée un utilisateur, dans notre cas de nom "testUser" et password "testPass", vous pouvez créer une connexion authentifiée:

<?php

$m 
= new Mongo("mongodb://testUser:testPass@localhost");

?>


Mongo::dropDB> <Mongo::connectUtil
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes Mongo::__construct
sonic1000 at gmx dot de 08-Mar-2012 08:46
Please note, that somehow MongoDB will throw an Exception if you try to connect to a string like mongodb://A,B,C and one of the repsets is in revover mode:

_id" : 0,
"name" : "A:27017",
"health" : 1,
"state" : 3,
"stateStr" : "RECOVERING"
Niek at sourcebox dot nl 16-Feb-2012 08:01
After a big crash on our mongo database replica-set we started to investigate why PHP hangs itself when a server seems to disappear. It seems that this library isn't doing a very good job with connecting to a replicate set.

In the official mongo manual it says:
"The driver then connects to all servers on the seed list, perhaps in parallel to minimize connect time .." PHP doesn't do parallel. It tries every seed from the list one at the time. After one fails it goes to the next etc. This is how PHP works and i doubt it can be altered. So the problem starts when you connect like:
new Mongo("mongodb://192.168.0.100,192.168.0.101", array("replicaSet" => "myReplicaSet"));

When the server 192.168.0.100 crashes, all new connections will take at least 20 seconds (20 seconds connection timeout) before it moves to the second server. The webserver will come crashing down with all these hanging PHP instances. (If the server is still up though only the mongo service is down everything does continue to work without the delay though.)

The timeout setting will remedy a bit of this behavior making the connection like: (100 ms timeout)
new Mongo("mongodb://192.168.0.100,192.168.0.101", array("replicaSet" => "myReplicaSet", "timeout" => 100));
All new connections have a additional delay of 100 ms when there is a server crash which is better then the 20000 ms default value. Still not perfect but workable.

This behavior isn't really excepted when reading the manuals and people may think they have an failover mongo. This isn't the case when you are not using the timeout property.
Sid 19-Sep-2011 01:06
Well it looks like specifying the username, and password as an option in the option array DOES NOT work with replica sets properly.  I got a bunch of unauthorized exceptions when trying to do inserts.  Best bet is to specify username and password via the connection string.
rob at limeworks dot com dot au 01-Sep-2011 08:14
Note that even if you authenticate with a database specific user during instantiation of the Mongo class, it's still necessary to select the database before you try and use it.

Might sound common sense, but hopefully it will help someone anyway :D
Julius 03-Aug-2011 09:33
It's worth noting that authentication is not available in replicaSet with sharding before MongoDB version 1.9.1

http://www.mongodb.org/display/DOCS/Security+and+Authentication
arie grapa 12-Apr-2011 10:49
you can set mongo.auto_reconnect=1 in php.ini to cause it to automatically reconnect. This might be the default in future versions
Arkadiy Kukarkin 06-May-2010 08:17
The behavior of persistent connections is somewhat mysterious, but it appears that they remain for the duration of the process with some internal timeout value, and not until the end of script execution as you might expect based on the wording here and in close().

That is, the connection will remain open even once every object that used it is out of scope and can be accessed again with the persist key. This is consistent with the way e.g. DBI does things, but still somewhat confusing when not made explicit. A related issue is that under certain conditions php seems to open multiple connections even using the same key, but that's more of a bug report.
cap at unagon dot com 26-Feb-2010 07:38
Be sure *not* to append a slash at the end of the mongo URL.

$m = new Mongo("mongodb://dbuser:dbpasswd@localhost/");

in my case led to an empty web page and complete crash of the PHP interpreter, no chance to catch this as an exception.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites