Sometimes a seemingly simple task of installing a package can oftentimes run into unexpected errors and roadblocks that leaves you head scratching, especially dealing with legacy codebases. Because of macOS’s security software, you may run into an error when installing the MongoDB PHP Driver via PECL.
The simplest and recommended way of installing the driver is via PECL, so this needs to be readily available on your Mac.
To perform our driver installation you may need to disable macOSs system integrity protection “csrutils” process. This process ensures that the /usr folder on your mac is not tampered with, disabling write access and therefore throwing an error when attempting to install new software. One such case of this happening is when installing the MongoDB PHP driver.
To temporarily disable csrutils:
CMD + R at reboot. This boots into recovery.csrutils disable
reboot
From here your Mac will reboot with integrity protection disabled.
curl -O http://pear.php.net/go-pear.phar
sudo php -d detect_unicode=0 go-pear.phar
When prompted, enter 1, /usr/local/pear,4, and /usr/local/bin
Verify pear is installed with pear version and we are good to go.
Note: The MongoDB driver requires an openssl installation, however the required software is installed with your Mac provided you run the Xcode development tools. If on Linux however, make sure to install openssl development tools. On Red Hat, run sudo yum install openssl openssl-devel. On Ubuntu, run sudo apt-get install openssl libssl-dev.
Installing the driver now should go without issue. Run the following:
sudo pecl install mongodb
Let the installation process complete. At the end of installation you will be prompted to add the extension=mongodb.so in your php.ini file.
If you are unsure what .ini file you are using in your local web apps, firstly run php --ini. However, you may get something like this:
Configuration File (php.ini) Path: /etc
Loaded Configuration File: (none)
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
If this is the case, create a phpinfo(); page on one of your development sites and take note of the ini file location. Look out for Loaded Configuration File.
Once this is determined, simply add the extension to the file.
sudo vi <path-to-your-php-ini-file>
Now we are done with our installation, boot into recovery mode and enable crsutils again:
csrutils enable
reboot
Provided we have the driver installed, run the following composer command:
sudo php -c <path-to-your-php-ini-file> composer.phar require mongodb
Here we use the -c flag to provide composer with the php.ini file your local websites are using.
Installation completed!
From here you can communicate with MongoDB from within your PHP scripts.
Refer to the PHP library to get familiar with the available operations, starting with the CRUD suite of functions at https://docs.mongodb.com/php-library/current/tutorial/crud/#find-many-documents.