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

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

Неустранимая ошибка: необработанная ошибка: класс 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 version 1.1.1
  • Кажется, настроено правильно, mongodb включен и показан в phpinfo().
  • Попытался установить драйвер mongodb через pecl и менеджер пакетов моего дистрибутива.

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

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

person dotVezz    schedule 05.01.2016    source источник


Ответы (1)


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

Класс изменен. Это больше не \MongoClient, а теперь \MongoDB\Driver\Manager

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

Комментатор ianaz ниже опубликовал эту хорошую библиотеку пользовательского пространства для MongoDB: http://mongodb.github.io/mongo-php-library/

person dotVezz    schedule 05.01.2016
comment
они серьезно?! здесь библиотека пользовательского пространства: mongodb.github.io/mongo-php-library. Спасибо :) - person ianaz; 15.02.2016