Install PHP's Built In Extensions in macOS

Should you run into errors related to missing php.h or other .h files, you should check out my post on fixing missing headers on macOS Mojave.

These directions are for working with the native installation of PHP. Your results may vary if you are using a brew, MAMP or otherwise installed version of PHP - I do not recommend this for those cases.

Important: As you are altering the built-in version of PHP, you will need to ensure you have disabled System Integrity Protection before you begin. You can find instructions on how to do this here: How to: Disable macOS System Integrity Protection.

This was previously dedicated to installing the Mcrypt extension specifically, but in reality can be used to install any of the following extensions distributed with the PHP source.

bcmath ftp mcrypt pdo_oci simplexml wddx
bz2 gd mysqli pdo_odbc skeleton xml
calendar gettext mysqlnd pdo_pgsql snmp xmlreader
com_dotnet gmp oci8 pdo_sqlite soap xmlrpc
ctype hash odbc pgsql sockets xmlwriter
curl iconv opcache phar spl xsl
date imap openssl posix sqlite3 zip
dba interbase pcntl pspell standard zlib
dom intl pcre readline sysvmsg
enchant json pdo recode sysvsem
exif ldap pdo_dblib reflection sysvshm
fileinfo libxml pdo_firebird session tidy
filter mbstring pdo_mysql shmop tokenizer

We need to install the required dependencies. If you are not already using Homebrew you will need it.

$ brew install autoconf pkg-config

For certain extensions like mcrypt you may additionally need to install additional libraries such as:

$ brew install libmcrypt

Next we will download the PHP source. Verify the exact version of PHP you are running. This can be retrieved as follows. The version is highlighted.

$ php --version
PHP 7.1.19 (cli) (built: Aug 17 2018 18:03:17) ( NTS )
Copyright (c) 1997-2018 The PHP Group

Now we move into a working directory and download the source making sure to update the following for the version from above.

$ cd /tmp
$ curl -L http://php.net/get/php-{{php-version}}.tar.bz2/from/this/mirror > php.tar.bz2
$ open php.tar.bz2

Now we will compile and test the extension.

$ cd php-{{php-version}}/ext/{{extension}}
$ phpize
$ ./configure
$ make
$ make test
$ sudo make install

If all that goes well, finally we'll need to add the following to our php.ini - I usually add at it at the end of the file.

extension = {{extension}}.so

You can verify your installation with the following:

$ php --info | grep {{extension}}\\.

Lastly, depending on your setup now, you may want to restart Apache.

$ sudo apachectl restart