My phpinfo() has the following under the mongodb section
mongodb
mongodb support enabled
mongodb version 1.1.7
mongodb stability stable
libmongoc version 1.3.5
libbson version 1.3.5
Mongod is running, but when I try to instantiate the Mongo class I get
Fatal error: Class 'Mongo' not found in ...
Am I missing a step here? I've set up this same environment before and never had this problem.
Also,
Fatal error: Class 'MongoClient' not found in ... as well
You are confusing the Mongo drivers:
Legacy driver (deprecated): mongo.so
Provides the classes you try to intantiate.
Recent driver: mongodb.so
"provides a minimal API for core driver functionality"
With your installed driver, you cannot use the Classes provided by the legacy driver.
Related
When executing the following PHP code:
$m = new MongoClient("mongodb://localhost:27017");
I get the following error:
Fatal error: Class 'MongoClient' not found in (...)
MongoDB extension seems properly installed (I copied php_mongodb.dll to ext folder and updated php.ini).
PHP seems to confirm that the extension is running properly as the following code confirms it is loaded:
echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";
Also, phpinfo() shows that mongodb extension has been loaded.
UPDATE: my problem is still not solved.
phpinfo() clearly shows that the driver is loaded:
But I am still receiving the same fatal error.
TL;DR
The class MongoClient is part of the legacy PECL package mongo but not anymore of the up-to-date mongodb package.
And since you have the mongodb extension installed, and not the mongo one, this is why you are getting the error
Fatal error: Class 'MongoClient' not found
On MongoDB PHP driver github repo, the release note about the version 1.0.0, is suggesting developers to use MongoDB\Driver\Manager instead of 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.
Source:: https://github.com/mongodb/mongo-php-driver/releases/tag/1.0.0
So, here is the replacement class documentation and the snippet of code that should replace yours :
$m = new MongoDB\Driver\Manager("mongodb://localhost:27017");
As the documentation is prompting it, the class is deprecated.
Warning This extension that defines this class is deprecated. Instead,
the MongoDB extension should be used. Alternatives to this class
include:
MongoDB\Driver\Manager
Source: http://php.net/MongoClient
From what I read on their github repository release history, the class you are trying to use have been obsoleted since the version of mongodb 1.0.0, so, on the version 1.6.0 you are, this class is not even part of the dll anymore.
That is confirmed by 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/
Source: https://github.com/mongodb/mongo-php-driver/issues/300#issuecomment-210820288
Another way, as suggested by the MongoDB member quoted here above is to use this pecl extension: https://pecl.php.net/package/mongo instead of https://pecl.php.net/package/mongodb but please also notice the warning there stating:
This package has been superseded, but is still maintained for bugs and security fixes.
MongoDB(mongo-php-library) and MongoClient(ext-mongo) are different extensions. MongoClient extension is deprecated. If you want to use MongoClient(ext-mongo) related classes, use a wrapper like this one;
https://github.com/mitsh/mongo-php-adapter
Adapter to provide ext-mongo interface on top of mongo-php-library
You don't need to change anything on your project. Just install and include it with composer.
I am trying to configure MongoDB on the AWS server, but when I try to make an API call, I get the following error:
Fatal error: Class 'MongoDB\Driver\Manager' not found in /srv/www/api/releases/20160912135146/vendor/mongodb/mongodb/src/Client.php on line 56
I have done the following:
Install mongodb, following the instructions here -> install mongodb community edition on ubuntu
installed the php mongodb driver using pecl install mongodb
added extension=mongodb.so to php.ini at etc/php5/cli/php.ini
Started the mongodb service
on the server, I can enter the mongo console with $ mongo
What am I missing here, Please?
PS: the API is developed using Phalcon
I finally found a solution to this. Apparently, the apache server uses a special php.ini file, different from etc/php5/cli/php.ini. This file is located in etc/php5/apache2/php.ini. After installing the mongodb driver using pecl install mongodb, your extension should go in etc/php5/apache2/php.ini i.e add extension = mongodb at the end of etc/php5/apache2/php.ini. Good luck
I am trying to setup mongodb + php mongo driver using homebrew
I am trying to setup a composer package which requires mongodb.
The extension seems to be installed, as it appear in both cli and web version as below. But when I hit the webroot I get the error
Fatal error: Class 'MongoClient' not found in
/Users/sakhunzai/Sites/xhgui/public/src/Xhgui/ServiceContainer.php on
line 77
I am able to connect to mongodb and create a database etc. So mongodb is running fine. But It seems there is issue with php extension. To setup xhgui I have brewed as follow:
brew tap tideways/homebrew-profiler
brew install php56-tideways
brew install mongodb php56-mongodb
MongoDB
mongo --version
MongoDB shell version: 3.2.4
Extension
php -i|grep mongo
/usr/local/etc/php/5.6/conf.d/ext-mongodb.ini,
mongodb
mongodb support => enabled
mongodb version => 1.1.6
mongodb stability => stable
libmongoc version => 1.3.5
mongodb.debug => no value => no value
cat /usr/local/etc/mongod.conf
systemLog:
destination: file
path: /usr/local/var/log/mongodb/mongo.log
logAppend: true
storage:
dbPath: /usr/local/var/mongodb
net:
bindIp: 127.0.0.1
There are two kinds of drivers available at pecl
you need to install the mongoDB database driver to access mongoClient
use the following command to install the mongo
brew install php56-mongo
as explained here
You will get something like this in your phpinfo();
I hope this helps. Thanks,
I am trying to connect with MongoDB using PHP, but it throwing Fatal error:
Class 'MongoClient' not found in D:\xamp\htdocs\soap\testmongo.php.
My PHP version is 5.6.12 and installed MongoDB version is 1.1.1.
I again tried to configure MongoDB version 1.2.11-5.4 but its not supporting.
How can I configure this?
MongoDB 2.6 is good for PHP 5.6.12
https://docs.mongodb.org/ecosystem/drivers/php/
There are tons of questions on this topic, but none of them have worked for me. I originally had the mongodb driver installed (and working) using
sudo pecl install mongo
however according to the pecl output this has been deprecated and replaced with
sudo pecl install mongodb
So I installed that, changed mongo.ini to load extension=mongodb.so instead of mongo.so (as instructed to by the output of the above pecl command) . When I load my phpinfo() page it shows that it is loaded
mongodb version 1.0.0
mongodb stability stable
libmongoc version 1.2.0
libbson version 1.2.0
However, when I try to use MongoClient in my PHP page, I get the following error:
Fatal error: Class 'MongoClient' not found in /srv/www/site/functions.php on line 500
I have exhausted all of the 'similar questions' suggested when creating this question, as well as google searches. So I'm hoping someone has some first-hand experience with fixing this because I feel like I'm out of options.
Turns out the class names have changed in the new driver. So MongoClient not existing is a valid error.
new MongoDB\Driver\Manager is the replacement for MongoClient