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