Pregunta PHP MongoDB: error fatal: Class 'MongoClient' no encontrado


Al ejecutar el siguiente código PHP:

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

Me aparece el siguiente error:

Error fatal: Class 'MongoClient' no encontrado en (...)

La extensión MongoDB parece instalada correctamente (copié php_mongodb.dll a la carpeta ext y actualicé php.ini).

PHP parece confirmar que la extensión se está ejecutando correctamente, ya que el siguiente código confirma que está cargada:

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

También, phpinfo() muestra que se ha cargado la extensión mongodb.

ACTUALIZAR

El problema aún no está resuelto.

phpinfo() muestra claramente que el controlador está cargado:

enter image description here

Pero aún recibo el mismo error fatal.


16
2018-05-16 19:40


origen


Respuestas:


TL; DR

La clase MongoClient es parte del paquete PECL heredado mongo pero ya no de los actualizados mongodb paquete.

En el controlador PHP de MongoDB github repo, la nota de lanzamiento sobre la versión 1.0.0 sugiere a los desarrolladores usar MongoDB\Driver\Manager en lugar de MongoClient

Cambios de nuestra extensión de legado mongo

Lo más significativo es que el controlador heredado MongoClient, MongoDB y   Las clases MongoCollection han quedado obsoletas por el   Clase MongoDB \ Driver \ Manager, que es la nueva puerta de enlace para conectarse   y ejecutar consultas, comandos y operaciones de escritura.

Fuente: https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0


Como la documentación lo está pidiendo, la clase está obsoleta.

Advertencia Esta extensión que define esta clase está en desuso. En lugar,   la extensión MongoDB debería ser utilizada. Alternativas a esta clase   incluir:

  • MongoDB \ Driver \ Manager

Fuente: http://php.net/MongoClient


De lo que leí en su historial de lanzamiento del repositorio github, la clase que está tratando de usar se ha quedado obsoleta ya que la versión de mongodb 1.0.0, entonces, en la versión 1.6.0 usted es, esta clase ni siquiera es parte de la dll nunca más.

Eso es confirmado por este problema en su github

derickr comentado en abril 16

MongoClient es una clase del antiguo legado   controlador y se supone que no debe estar disponible en este. El nuevo controlador   tiene \ MongoDB \ Driver \ Manager, y, la biblioteca que lo acompaña tiene   \ MongoDB \ Client.

O necesita instalar la antigua extensión heredada (instalación pecl)   mongo) y usa PHP 5.x, o actualiza tu código para usar este nuevo controlador   clases ya que el controlador anterior no está disponible para PHP 7. Hay un   guía de actualización en    http://mongodb.github.io/mongo-php-library/upgrade-guide/

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


Aquí está la documentación de la clase de reemplazo y el fragmento de código que debería reemplazar al tuyo:

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

Otra forma, como lo sugiere el miembro de MongoDB citado aquí arriba, es usar esta extensión pecl: https://pecl.php.net/package/mongo en lugar de https://pecl.php.net/package/mongodb pero, por favor, también note la advertencia allí que dice:

Este paquete ha sido reemplazado, pero aún se mantiene para errores y soluciones de seguridad.


48
2018-05-19 11:46