Подтвердить что ты не робот

PHP MongoDB: Неустранимая ошибка: класс "MongoClient" не найден

При выполнении следующего кода PHP:

$m = new MongoClient("mongodb://localhost:27017");

Я получаю следующую ошибку:

Неустранимая ошибка: класс 'MongoClient' не найден в (...)

Расширение MongoDB, похоже, установлено правильно (я скопировал php_mongodb.dll в папку ext и обновил php.ini).

Кажется, PHP подтверждает, что расширение работает правильно, так как следующий код подтверждает, что оно загружено:

echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";

Кроме того, phpinfo() показывает, что расширение mongodb было загружено.


ОБНОВЛЕНИЕ: моя проблема до сих пор не решена.

phpinfo() ясно показывает, что драйвер загружен:

enter image description here

Но я все еще получаю ту же фатальную ошибку.

4b9b3361

Ответ 1

TL; DR

Класс MongoClient является частью унаследованного пакета mongo PECL, но больше не является обновленным пакетом mongodb.

В PHP-драйвере MongoDB github repo в выпуске о версии 1.0.0 разработчикам предлагается использовать MongoDB\Driver\Manager вместо MongoClient

Изменения от нашего унаследованного расширения Монго

Что наиболее важно, устаревшие драйверы MongoClient, MongoDB и Классы MongoCollection были устаревшими MongoDB\Driver\Manager class, который является новым шлюзом для подключения и выполнение запросов, команд и операций записи.

Источник: https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0

Итак, вот документация по классу замены и фрагмент кода, который должен заменить ваш:

$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");

Поскольку документация подсказывает это, класс устарел.

Предупреждение Это расширение, которое определяет этот класс, устарело. Вместо, следует использовать расширение MongoDB. Альтернативы этому классу включить:

Менеджер Источник: http://php.net/MongoClient


Из того, что я прочитал в их истории выпуска репозитория github, класс, который вы пытаетесь использовать, устарел начиная с версии mongodb 1.0.0, поэтому в версии 1.6.0 этот класс не является даже часть dll больше.

Это подтверждается этой проблемой на их github

Дикрик прокомментировал 16 апреля

MongoClient - это класс из старого наследия водитель и не должен быть доступен в этом. Новый водитель имеет \MongoDB\Driver\Manager, и сопровождающая библиотека имеет \ MongoDB\Client.

Вам либо нужно установить старое устаревшее расширение (pecl install mongo) и используйте PHP 5.x, или обновите свой код, чтобы использовать этот новый драйвер классы, так как старый драйвер не доступен для PHP 7. Есть руководство по обновлению на http://mongodb.github.io/mongo-php-library/upgrade-guide/

Источник: https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288


Другой способ, предложенный участником MongoDB, приведенным здесь выше, - использовать это расширение pecl: https://pecl.php.net/package/mongo вместо https://pecl.php.net/package/mongodb, но, пожалуйста, также обратите внимание на предупреждение:

Этот пакет был заменен, но все еще поддерживается для ошибок и исправлений безопасности.