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.
Related
I have installed Php 7.1.9 on a windows server 2012 machine, if I check the php info I can see that mcrypt is enabled but if I type in shell php -v I have this error:
Unable to load dynamic library 'C:/php/ext\php_mcrypt.dll' - The specified module could not be found.
In fact running a Laravel application I also get some exception related to it.
I have checked ext folder and there is no php_mcrypt.dll .
As you can see here mcrypt is deprecated in favour of OpenSSL. From the Deprecated features in PHP 7.1.x:
The mcrypt extension has been abandonware for nearly a decade now, and was also fairly complex to use. It has therefore been deprecated in favour of OpenSSL, where it will be removed from the core and into PECL in PHP 7.2.
you can use laravel's homestead, it will be a lot easier since it will handle your environment with all the necessary services required by laravel framework.
https://laravel.com/docs/5.5/homestead
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.
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
I have memcached 2.2.0 showing up on phpinfo, but I am unable to implement a project that utilizes this extension. I have been getting this Fatal error: Class 'Memcache' not found. I am running php 5.6.10.
I believe the memcached version might not be compatible with the current php version?
Looks like I needed to install the PHP Extension memcache, where the Memcache Class is located. I had thought memcached was the new memcache, but I need both extensions for the data objects and daemon to work together.
Fatal error:
Class 'Mongo' not found in C:\Apache
Software
Foundation\Apache2.2\htdocs\sample\testdb.php
Can anyone help me out with this issue? Why is that saying so?
The following is the code that I have used. I have created a database named phptest in MongoDB and inserted a document. Then I tried connecting to MongoDB via PHP but it threw this error.
Can anyone help me get rid of this? I have included the php-mongo dll and saved in php.ini file also.
<?php
echo "succeeded!";
$connection = new Mongo();
$db = $connection->test;
$collection = $db->phptest;
?>
Make sure you have the correct php driver installed.
For example if "Thread Safety" is enabled in your php.ini, then make sure you have the "Thread-Safe Mongo Extension" installed and NOT the "Non-Thread-Safe" version.
You're probably using an older version of the Mongo DB driver. The class Mongo has been replaced with MongoClient, since v 1.3.0 of the driver. See this stackoverflow thread :
mongo DB - php driver version
http://www.php.net/manual/en/class.mongo.php