Depois de atualizar o PHP para a versão 7, por que não posso usar o driver mongodb?

4

Bem, aqui está uma situação estranha que encontrei. Eu tenho usado PHP e MongoDB juntos em um projeto e atualizado o software associado. Após a atualização, atualizei os novos arquivos conf e tudo está bem - exceto quando tento usar a classe MongoClient , recebo o seguinte erro fatal:

Fatal error: Uncaught Error: Class 'MongoClient' not found in /srv/http/test.php

Então meu primeiro instinto foi checar meu /etc/php/php.ini para ter certeza de que o mongodb.so foi corretamente incluído. Eu encontrei depois das outras linhas extension :

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

Com isso marcado, carreguei um script rápido de phpinfo() para verificar se estava usando o arquivo php.ini correto e confirmei que sou. E não apenas isso, o driver mongodb também parece estar carregado corretamente!

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

Então eu reiniciei o httpd e tentei novamente. Sem dados, ainda não é possível encontrar a classe MongoClient . Então, tentei instalá-lo a partir de pecl em vez do gerenciador de pacotes da minha distribuição, e a situação é a mesma descrita acima.

Então aqui está um breve resumo da situação:

  • kernel do Linux 4.3.3
  • Versão do PHP 7.0.1
  • versão 1.1.1 do php-mongodb
  • Parece configurado corretamente e o mongodb está ativado e é mostrado em phpinfo() .
  • Tentei instalar o driver mongodb através do pecl e do gerenciador de pacotes da minha distro.

Outras informações que podem ser úteis:

  • Versão do MongoDB 3.2.0
  • mongod está sendo executado
  • Também tentei reiniciar, sem alterações.
por dotVezz 05.01.2016 / 05:13

3 respostas

7

Bem, encontrei a resposta.

A turma foi alterada. Não é mais \MongoClient e agora é \MongoDB\Driver\Manager

Tudo o que preciso é de um refatorador. O novo driver foi projetado para ser um driver de nível inferior para que funcionalidades de alto nível sejam preenchidas com bibliotecas de espaço de usuário, para que qualquer um atualize para o php7, verifique se você está confortável com o novo driver ou se o espaço do usuário bibliotecas existem quando você faz isso. Espero que esta pergunta / resposta ajude os outros no futuro.

Aqui está uma das grandes bibliotecas do Mongo para usar no PHP agora: biblioteca-mongo-php .

    
por 05.01.2016 / 05:32
3

Como você mencionou, a estrutura de classes para interagir com o MongoDB a partir do PHP7 mudou e você precisaria refatorar seu código (muito dependendo de como ele foi inicialmente planejado e escrito).

Uma solução que você pode querer analisar é link

Eu notei que na maioria dos casos, incluindo a biblioteca do adaptador, tudo o que você precisa fazer é fazer com que seu código PHP5 antigo funcione corretamente.

Então, eu sugiro que você migre seu código para a nova biblioteca PHP do MongoDB ( link ) ou que você use o driver nativo para se beneficiar dos ganhos de velocidade.

    
por 11.07.2016 / 15:42
-1
  • Primeiro, precisamos instalar o MongoDB na máquina através das etapas mencionadas no site oficial do MongoDB
  • O próximo passo é instalar uma unidade do MongoDB para usar com o PHP.
  • O driver MongoDB para o PHP Versão 5.99.99 ou anterior era: pacote / mongo para instalar isso, precisamos usar:

    sudo apt-get install php-pear php5-dev
    
    sudo pecl install mongo
    
  • A partir do PHP 7, este é o novo driver package / mongodb Para instalar esse uso: sudo pecl install mongodb

  • Se você estiver usando o framework Laravel ou projetos com o composer, então esta biblioteca é a mais adequada: link Use a versão 3.0.0 para obter o PHP 7 & Laravel 5 suporta e usa a versão mais antiga 2.2.2 Comando do compositor:

    composer require jenssegers/mongodb
    
  • Se você estiver usando outras estruturas PHP sem compositor, use esta biblioteca: link que também é usado na biblioteca acima mencionada

por 23.02.2016 / 15:18