Question Après avoir mis à jour PHP vers la version 7, pourquoi ne puis-je pas utiliser le pilote mongodb?


Eh bien voici une situation étrange que j'ai trouvée. J'ai utilisé PHP et MongoDB ensemble sur un projet et mis à jour le logiciel associé. Après la mise à niveau, je me suis assuré de mettre à jour les nouveaux fichiers de configuration et tout va bien - sauf lorsque j'essaie d'utiliser le MongoClient classe, j'obtiens l'erreur fatale suivante:

Erreur fatale: erreur non détectée: la classe 'MongoClient' est introuvable dans /srv/http/test.php

Donc mon premier instinct était de vérifier mon /etc/php/php.ini pour s'assurer que mongodb.so était correctement inclus. Je l'ai trouvé après l'autre extension lignes:

extension=mcrypt.so
extension=zip.so
extension=mongodb.so ; <--- here it is

Avec cette vérification, j'ai chargé un rapide phpinfo() script pour vérifier que j'utilisais le droit php.ini fichier, et a confirmé que je suis. Et pas seulement cela, le pilote mongodb semble également être chargé correctement!

Loaded Configuration File      /etc/php/php.ini

mongodb support                enabled
mongodb                        version      1.1.1
mongodb                        stability    stable
libmongoc                      version      1.3.1-dev
libbson                        version      1.3.0

J'ai donc redémarré httpd et essayé à nouveau. Pas de dés, toujours pas trouvé le MongoClient classe. J'ai donc essayé de l'installer à partir de pecl au lieu du gestionnaire de paquets de ma distribution, et la situation est la même que celle décrite ci-dessus.


Voici donc un rapide aperçu de la situation:

  • Noyau Linux 4.3.3
  • PHP version 7.0.1
  • php-mongodb version 1.1.1
  • Semble correctement configuré et mongodb est activé et affiché dans phpinfo().
  • Essayé d'installer le pilote mongodb à travers pecl et le gestionnaire de paquets de ma distribution.

Autres informations utiles:

  • MongoDB Version 3.2.0
  • mongod est en cours d'exécution
  • Aussi essayé de redémarrer, pas de changement.

4
2018-01-05 04:13


origine




Réponses:


Eh bien, j'ai trouvé la réponse.

La classe a été modifiée. Ce n'est plus \MongoClient, et est maintenant \MongoDB\Driver\Manager

Tout ce dont j'ai besoin est un refactor. Le nouveau pilote est conçu pour être un pilote de bas niveau pour que les fonctionnalités de haut niveau soient remplies de bibliothèques d’espace utilisateur, de sorte que toute personne effectuant une mise à niveau vers php7 vérifie que vous êtes à l'aise avec le nouveau pilote les bibliothèques existent quand vous le faites. J'espère que cette question / réponse aidera les autres à l'avenir.

Voici l'une des grandes bibliothèques Mongo à utiliser pour PHP maintenant: Mongo-php-library.


7
2018-01-05 04:32



Merci pour ça, mec, tu m'as sauvé une autre journée de recherche sur Google. - Bandydan


Comme vous le mentionnez, la structure de classe pour interagir avec MongoDB à partir de PHP7 a changé et vous devez modifier votre code (en fonction de la manière dont il a été initialement planifié et écrit).

Une solution que vous pourriez vouloir examiner est https://github.com/alcaeus/mongo-php-adapter

J'ai remarqué que dans la plupart des cas, la bibliothèque d'adaptateurs est tout ce dont vous avez besoin pour que votre ancien code PHP5 fonctionne correctement.

Ensuite, je vous suggère fortement de migrer votre code vers la nouvelle bibliothèque PHP MongoDB (https://github.com/mongodb/mongo-php-library) ou que vous utilisez le pilote natif pour bénéficier des gains de vitesse.


3
2017-07-11 13:42



Oh man, l'adaptateur est une bonne trouvaille. - dotVezz
L'adaptateur est si grand !! Sauvé mon temps (bien que j'ai déjà commencé à refactoriser le code PHP hérité dans notre base) - Ares Ou
Je suggère de ne pas utiliser cet adaptateur comme une béquille pour éviter de refacturer trop longtemps, l'ajout d'un calque au-dessus d'un autre calque ajoute simplement de la complexité, un potentiel de bogues et moins performant. - Mike Purcell
Merci @ Mike-Purcell! Votre commentaire rend le dernier paragraphe de ma réponse plus pertinent. - Tomi


  • Nous devons d'abord installer MongoDB dans la machine en suivant les étapes mentionnées sur le site officiel de MongoDB.
  • L'étape suivante consiste à installer un lecteur MongoDB à utiliser avec PHP.
  • Le pilote MongoDB pour PHP version 5.99.99 ou antérieure était: paquet / mongo pour installer cela, nous devons utiliser:

    sudo apt-get install php-pear php5-dev
    
    sudo pecl install mongo
    
  • A partir de PHP 7, c'est le nouveau pilote package / mongodb Pour installer cette utilisation: sudo pecl install mongodb

  • Si vous utilisez le framework Laravel ou des projets avec composer, cette bibliothèque est la plus adaptée: https://github.com/jenssegers/Laravel-MongoDB Utilisez la version 3.0.0 pour obtenir le support de PHP 7 et Laravel 5 et utilisez l'ancienne version 2.2.2 Commande Composer:

    composer require jenssegers/mongodb
    
  • Si vous utilisez d'autres frameworks PHP sans compositeur, utilisez cette bibliothèque: https://github.com/mongodb/mongo-php-library qui est également utilisé dans la bibliothèque mentionnée ci-dessus


-1
2018-02-23 14:18