После обновления PHP до версии 7, почему я не могу использовать драйвер mongodb?

Ну вот странная ситуация, которую я обнаружил. Я использовал PHP и MongoDB вместе в проекте и обновил соответствующее программное обеспечение. После обновления я удостоверился, что обновил новые файлы conf и все хорошо - кроме случаев, когда я пытаюсь использовать MongoClient класс, я получаю следующую фатальную ошибку:

Неустранимая ошибка: Uncaught Ошибка: класс 'MongoClient' не найден в /srv/http/test.php

Так что мой первый инстинкт был проверить мой /etc/php/php.ini чтобы убедиться, что mongodb.so был правильно включен. Я нашел это после другого extension линии:

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

С этим проверил, я быстро загрузил phpinfo() скрипт, чтобы проверить, что я использовал право php.ini файл, и подтвердил, что я. И не только это, драйвер mongodb также, кажется, загружен правильно!

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

Поэтому я перезапустил httpd и попробовал снова. Нет кости, до сих пор не могу найти MongoClient учебный класс. Поэтому я попытался установить его с pecl вместо менеджера пакетов моего дистрибутива, и ситуация такая же, как описано выше.


Итак, вот краткое изложение ситуации:

  • Ядро Linux 4.3.3
  • Версия PHP 7.0.1
  • php-mongodb версия 1.1.1
  • Кажется, правильно настроен, и Mongodb включен и отображается в phpinfo(),
  • Пробовал устанавливать драйвер mongodb через pecl и менеджер пакетов моего дистрибутива.

Другая информация, которая может быть полезна:

  • MongoDB версия 3.2.0
  • mongod бежит
  • Также попробовал перезагрузку, без изменений.

3 ответа

Решение

Ну, я нашел ответ.

Класс был изменен. Это больше не \MongoClientи сейчас \MongoDB\Driver\Manager

Все, что мне нужно, это рефакторинг. Новый драйвер предназначен для низкоуровневого драйвера для высокоуровневой функциональности, которая будет заполняться библиотеками пользовательского пространства, поэтому любой, кто обновляется до php7, обязательно должен убедиться, что вы будете довольны новым драйвером или что пользовательское пространство библиотеки существуют, когда вы делаете это. Надеюсь, этот вопрос / ответ поможет другим в будущем.

Вот одна из больших библиотек Mongo, которую можно использовать для PHP: mongo-php-library.

Как вы упомянули, структура классов для взаимодействия с MongoDB из PHP7 изменилась, и вам потребуется реорганизовать ваш код (многое зависит от того, как он изначально планировался и был написан).

Одним из решений, которое вы можете рассмотреть, является https://github.com/alcaeus/mongo-php-adapter

Я заметил, что в большинстве случаев для правильной работы старого кода PHP5 необходимо включить библиотеку адаптеров.

Тогда я настоятельно рекомендую перенести ваш код в новую PHP-библиотеку MongoDB ( https://github.com/mongodb/mongo-php-library) или использовать собственный драйвер, чтобы получить выгоду от увеличения скорости.

  • Для начала нам нужно установить MongoDB на машине, выполнив действия, указанные на официальном сайте MongoDB.
  • Следующим шагом является установка диска MongoDB для использования с PHP.
  • Драйвер MongoDB для PHP версии 5.99.99 или более ранних был: package/mongo, чтобы установить его, нам нужно использовать:

    sudo apt-get install php-pear php5-dev
    
    sudo pecl install mongo
    
  • Начиная с PHP 7, это новый пакет драйверов / mongodb. Для установки используйте: sudo pecl install mongodb

  • Если вы используете каркас Laravel или проекты с composer, то эта библиотека является наиболее подходящей: https://github.com/jenssegers/Laravel-MongoDB Используйте версию 3.0.0 для получения поддержки PHP 7 и Laravel 5 и в противном случае используйте более старая версия 2.2.2 Команда Composer:

    composer require jenssegers/mongodb
    
  • Если вы используете другие PHP-фреймворки без composer, используйте эту библиотеку: https://github.com/mongodb/mongo-php-library которая также используется в вышеупомянутой библиотеке

Другие вопросы по тегам