web-dev-qa-db-fra.com

PHP MongoDB: erreur irrécupérable: la classe 'MongoClient' est introuvable.

Lors de l’exécution du code PHP) suivant:

$m = new MongoClient("mongodb://localhost:27017");

Je reçois l'erreur suivante:

Erreur fatale: La classe 'MongoClient' est introuvable dans (...)

L'extension MongoDB semble correctement installée (j'ai copié php_mongodb.dll Dans le dossier ext et mis à jour php.ini).

PHP semble confirmer que l'extension fonctionne correctement car le code suivant confirme son chargement:

echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";

De plus, phpinfo() indique que l'extension mongodb a été chargée.


[~ # ~] mise à jour [~ # ~] : mon problème n'est toujours pas résolu.

phpinfo() indique clairement que le pilote est chargé:

enter image description here

Mais je reçois toujours la même erreur fatale.

18
Tom

TL; DR

La classe MongoClient fait partie de l’ancien paquet PECL mongo mais plus du paquet mis à jour mongodb .

Sur le repo github du pilote MongoDB PHP, la note de publication relative à la version 1.0.0 suggère aux développeurs d’utiliser MongoDB\Driver\Manager Au lieu de MongoClient.

Modifications de notre extension mongo héritée

Plus important encore, les classes MongoClient, MongoDB et MongoCollection du pilote hérité ont été obsolètes par la classe MongoDB\Driver\Manager, qui est la nouvelle passerelle permettant de connecter et d'exécuter des requêtes, des commandes et des opérations d'écriture.

Source: https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.


Comme la documentation le demande, la classe est obsolète.

Avertissement Cette extension qui définit cette classe est obsolète. Au lieu de cela, l'extension MongoDB doit être utilisée. Les alternatives à cette classe comprennent:

  • MongoDB\Driver\Manager

Source: http://php.net/MongoClient


D'après ce que j'ai lu dans leur historique de publication du référentiel github , la classe que vous essayez d'utiliser est obsolète depuis la version de mongodb 1.0.0, Donc sur la version 1.6.0 vous êtes, cette classe ne fait même plus partie du dll.

Cela est confirmé par ce numéro sur leur github

derickr a commenté le 16 avril

MongoClient est une classe de l'ancien pilote hérité et n'est pas censée être disponible dans celui-ci. Le nouveau pilote a\MongoDB\Driver\Manager et la bibliothèque associée a\MongoDB\Client.

Vous devez soit installer l'ancienne extension existante (pecl install mongo) et utiliser PHP 5.x, soit mettre à jour votre code pour utiliser les classes de ce nouveau pilote car l'ancien pilote n'est pas disponible pour PHP 7. Il existe un guide de mise à niveau à l’adresse http://mongodb.github.io/mongo-php-library/upgrade-guide/

Source: https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288


Voici la documentation de la classe de remplacement et l'extrait de code qui devrait remplacer le vôtre:

$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");

Un autre moyen, suggéré par le membre de MongoDB cité ci-dessus, consiste à utiliser cette extension pecl: https://pecl.php.net/package/mongo au lieu de https: // pecl .php.net/package/mongodb mais veuillez également noter l’avertissement suivant:

Ce paquet a été remplacé, mais est toujours maintenu pour les bogues et les correctifs de sécurité.

61