4

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

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

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

3 ответа3

7

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

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

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

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

3

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

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

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

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

-1
  • Для начала нам нужно установить 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, которая также используется в вышеупомянутой библиотеке

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .