After upgrading PHP to version 7, why can't I use the mongodb driver?
Solution 1
Well I found the answer.
The class has been changed. It's no longer \MongoClient
, and is now \MongoDB\Driver\Manager
All that I need is a refactor. The new driver is designed to be a lower-level driver for high-level functionality to be filled with userspace libraries, so anyone else upgrading to php7, make sure you check that you'll be comfortable with the new driver, or that the userspace libraries exist when you do it. Hopefully this question/answer helps others in the future.
Here's one of the big Mongo libraries to use for PHP now: mongo-php-library.
Solution 2
As you mention, the class structure to interact with MongoDB from PHP7 has changed and you would need to refactor your code (a lot depending on how it was initially planned and written).
One solution that you might want to look into is https://github.com/alcaeus/mongo-php-adapter
I've noticed that in most cases including the adapter library is all you need to do in order to have your old PHP5 code work properly.
Then I'd strongly suggest that you migrate your code to the new MongoDB PHP Library (https://github.com/mongodb/mongo-php-library) or that you use the native driver to benefit from the speed gains.
Related videos on Youtube
dotVezz
Updated on September 18, 2022Comments
-
dotVezz over 1 year
Well here's an odd situation I've found. I've been using PHP and MongoDB together on a project, and updated the associated software. After the upgrade, I did make sure to update the new conf files and all is well --- except when I try to use the
MongoClient
class, I get the following fatal error:Fatal error: Uncaught Error: Class 'MongoClient' not found in /srv/http/test.php
So my first instinct was to check my
/etc/php/php.ini
to make sure that mongodb.so was correctly included. I found it after the otherextension
lines:extension=mcrypt.so extension=zip.so extension=mongodb.so ; <--- here it is
With that checked, I loaded up a quick
phpinfo()
script to check that I was using the rightphp.ini
file, and confirmed that I am. And not only that, the mongodb driver also appears to be loaded correctly!Loaded Configuration File /etc/php/php.ini mongodb support enabled mongodb version 1.1.1 mongodb stability stable libmongoc version 1.3.1-dev libbson version 1.3.0
So I restarted httpd and tried again. No dice, still can't find the
MongoClient
class. So I tried to install it frompecl
instead of my distribution's package manager, and the situation is the same as described above.
So here's a quick rundown of the situation:
- Linux kernel 4.3.3
- PHP Version 7.0.1
- php-mongodb version 1.1.1
- Yes, 1.1.1 supports php7.
- Seems properly configured, and mongodb is enabled and shown in
phpinfo()
. - Tried installing the mongodb driver through
pecl
and my distro's package manager.
Other info that may be useful:
- MongoDB Version 3.2.0
-
mongod
is running - Also tried rebooting, no change.
-
Bandydan about 8 yearsThanks for that, man, you saved me another day of googling.
-
dotVezz almost 8 yearsOh man, the adapter is a great find.
-
kagami about 7 yearsThe adapter is so great!! Saved my time (although I've already started to refactor the legacy PHP code in our base)
-
Mike Purcell almost 7 yearsI'd suggest not using this adapter as a crutch to avoid refactoring for too long, adding a layer on top of another layer just adds complexity, potential for bugs, and less performant.
-
Tomi almost 7 yearsThanks @mike-purcell ! Your comment makes the last paragraph of my answer more relevant.