Space Cat, Prince Among Thieves

Install PHP's Built In Extensions in macOS

Update: This has now been verified to work in macOS Mojave all the way back to at least Mavericks if not older as well. Let me know should any problems arise.

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.

This was previously dedicated to installing the Mcrypt extenison 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 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 additonal 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{{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

Comment by: Kevin on

Where is php.ini?

Comment by: Jonathan on

Jonathan GravatarThank you for this. I must've tried half a dozen different guides doing all sorts of strange things in my attempts to install mcrypt. This guide was the most clear, concise, and easy to follow. I am not certain what PEAR is being used for though.

Comment by: Jesse G. Donat on

Jesse G. Donat GravatarGood catch! The PEAR piece was left over from an older version of the guide that utilized PEAR's `pecl` command. I have updated the guide accordingly.

Comment by: Anant on

Anant GravatarThank you , steps are pretty simple and its working

Comment by: kmabas on

kmabas GravatarDon't forget disable SIP in El capitan and earlier and if "phpize" doesn't work, is because you need to install xcode cli tools

Comment by: DMITRY LOBURETS on

DMITRY LOBURETS GravatarGreat thank you! This is the only thing after an hour of googling which help to me!

Comment by: Umberto on

Umberto GravatarHello there.

I would like to point some additional steps I had to do to get it set:
1. copy /etc/php.ini.default to /etc/php.ini
2. locate the (in my case it was in

Comment by: Umberto on

Umberto GravatarHello there.

I would like to point some additional steps I had to do to get it set:
1. copy /etc/php.ini.default to /etc/php.ini
2. locate the
3. add the line below to php.ini:
extension = /usr/local/Cellar/php56-mcrypt/5.6.30_4/

After that I would have opencart running well

Comment by: Jose Aurorah on

Jose Aurorah GravatarI am getting on the last stage
sudo make install
/bin/sh /tmp/php-5.5.38/ext/mcrypt/libtool --mode=install cp ./ /tmp/php-5.5.38/ext/mcrypt/modules
cp ./.libs/ /tmp/php-5.5.38/ext/mcrypt/modules/
cp ./.libs/mcrypt.lai /tmp/php-5.5.38/ext/mcrypt/modules/
Libraries have been installed in:

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
during execution

See any operating system documentation about shared libraries for
more information, such as the ld(1) and manual pages.
Installing shared extensions: /usr/lib/php/extensions/no-debug-non-zts-20121212/
cp: /usr/lib/php/extensions/no-debug-non-zts-20121212/#INST@12920#: Operation not permitted
make: *** [install-modules] Error 1

Email address will never be publicly visible.

See my Tweet about comment formatting.