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() ясно показывает, что драйвер загружен:

введите описание изображения здесь

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

TL; DR

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

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

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

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

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


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

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

  • MongoDB \ Driver \ Менеджер

Источник: http://php.net/MongoClient


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

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

derikr прокомментировал 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


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

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

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

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