2016-05-16 9 views
13

Podczas wykonywania następujących kodu PHP:PHP MongoDB: Fatal error: Class 'MongoClient' Nie znaleziono

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

mi się następujący błąd:

Fatal error: Class 'MongoClient' not found in (...)

MongoDB przedłużenie wydaje się poprawnie zainstalowane (I skopiowane php_mongodb. dll do folderu ext i zaktualizowanego pliku php.ini).

PHP wydaje się potwierdzać, że rozszerzenie działa poprawnie jak poniższy kod potwierdza, że ​​jest załadowany:

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

Również phpinfo() pokazuje, że MongoDB rozszerzenia został załadowany.

UPDATE

Problem nadal nie rozwiązany.

phpinfo() wyraźnie pokazuje, że sterownik jest załadowany:

enter image description here

Ale nadal pojawia się ten sam błąd krytyczny.

+2

MongoDB = MongoClient –

+0

http://php.net/MongoDB http://php.net/MongoClient –

+0

Wielkie dzięki za wyjaśnienie tego! Jak mogę zainstalować bibliotekę MongoDB dla PHP w systemie Windows (oficjalne instrukcje dotyczą tylko systemu Linux)? – Tom

Odpowiedz

44

TL; DR

Klasa MongoClient jest częścią starego pakietu PECL mongo, ale nie jest już aktualnym pakietem mongodb.

Na MongoDB PHP github kierowca repo, notatki uwalnianiu o wersji 1.0.0, sugeruje programistom używać MongoDB\Driver\Manager zamiast MongoClient

Changes from our legacy mongo extension

Most significantly, the legacy driver's MongoClient, MongoDB, and MongoCollection classes have been obsoleted by the MongoDB\Driver\Manager class, which is the new gateway for connecting and executing queries, commands, and write operations.

Źródło: https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0


W dokumentacji monituje go, klasa jest przestarzała.

Warning This extension that defines this class is deprecated. Instead, the MongoDB extension should be used. Alternatives to this class include:

  • MongoDB\Driver\Manager

Źródło: http://php.net/MongoClient


Z tego co czytałem on their github repository release history klasa próbujesz użyć zostały zastąpione od wersji mongodb 1.0.0, tak, od wersji 1.6.0 jesteś, klasa nie jest już częścią dll.

Potwierdza to this issue on their github

derickr commented on Apr 16

MongoClient is a class from the old legacy driver and is not supposed to be available in this one. The new driver has \MongoDB\Driver\Manager, and, the accompanying library has \MongoDB\Client.

You either need to install the old legacy extension (pecl install mongo) and use PHP 5.x, or update your code to use this new driver's classes as the old driver is not available for PHP 7. There is an upgrade guide at http://mongodb.github.io/mongo-php-library/upgrade-guide/

Źródło: https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288


Oto the replacement class documentation i fragment kodu, który powinien zastąpić je:

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

Innym sposobem, jak sugerowane przez członka MongoDB cytowany tu powyżej jest użycie tego rozszerzenia pecl: https://pecl.php.net/package/mongo zamiast https://pecl.php.net/package/mongodb ale proszę zauważyć również ostrzeżenie tam stwierdzające!

This package has been superseded, but is still maintained for bugs and security fixes.

+1

Jesteś Bogiem posłać! – Radmation

+0

Wielkie dzięki, wiele stron mówi się, że są "przestarzałe" i odnoszą się do innej strony, która również jest przestarzała. Przykłady w podręczniku PHP pokazują "$ m = nowy MongoClient()", który już nie działa, ja też spróbowałem mojej szansy z "$ m = new MongoDB()", który również nie działa. To rozwiązało mój problem. Dzięki. – endo64

+0

Dziękuję bardzo. – cpap

Powiązane problemy