Add and install PHP to macOS Monterey 12 with Homebrew

The latest macOS version Monterey 12 has removed PHP altogether from its operating system, there is a comment in the Apache config file httpd.conf that says:

#PHP was deprecated in macOS 11 and removed from macOS 12

Fortunately you can install PHP and all the different PHP versions including 5.7, 7.4 and 8 with some help from Homebrew.

Install Homebrew

If you don’t have Homebrew installed, install it, here is a guide on how to install Homebrew.

So once you have Homebrew installed on your macOS a particular PHP Homebrew formulae will need to be added from this maintainer, what is great about this, is all PHP versions are available whereas only some versions are available on the default Homebrew formulas.

After Homebrew install, follow the below:

Add the PHP formulae

brew tap shivammathur/php

Choose the PHP version – this example uses 7.4

brew install shivammathur/php/[email protected]

Other options are

Link the PHP Version

brew link --overwrite --force [email protected]

Change your version to match

Restart the Terminal

Run…

php -v

You should now see the new version, to change to another version just repeat the process from the brew install... then unlink and link in the new PHP version by issuing a command like below but with your correct version:

brew unlink php && brew link --overwrite --force [email protected]

Using new PHP in macOS Monterey shipped Apache

If you are using macOS in built shipped Apache, you can use the PHP but it needs to be Code Signed, before Monterey this practice was optional but now it is mandatory. This guide will help you with Code Signing.

(As an alternative to Code Signing and using Apples in-built Apache, you may want instead to use both Apache and PHP from Homebrew and set up the User Sites folder).

After code signing PHP follow the below to complete loading the PHP module with Apples Apache.

sudo nano /etc/apache2/httpd.conf

Find the ‘Loadmodule’ lines and new PHP version path:

Intel Chip

LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so

Apple Chip

LoadModule php7_module /opt/homebrew/opt/[email protected]/lib/httpd/modules/libphp7.so

Restart Apache

sudo apachectl restart

Now the new PHP version will be used.

You could download all the versions and just uncomment the one you want if you intend to swap around (change path prefix depending on Chip used – see above:

#LoadModule php5_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp5.so
#LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so
#LoadModule php_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp.so
#LoadModule php_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp.so

PHP 8 and macOS Apache

One extra step is needed for PHP 8 and macOS bundled Apache:

sudo nano /etc/apache2/httpd.conf

Add the new PHP 8 and comment out the old one.

LoadModule php_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp.so

Go to the end of the file and add:

<FilesMatch .php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Restart Apache

Removing Older Homebrew PHP version (optional)

If you have the older PHP formulas from an older Homebrew installation, you may wish to remove these:

rm -rf $(brew --cellar)/php

Remove old PHP Launch Agents and daemons, if present:

rm -f ~/Library/LaunchAgents/homebrew.mxcl.php*
rm -f /Library/LaunchAgents/homebrew.mxcl.php*
rm -f /Library/LaunchDaemons/homebrew.mxcl.php*

Remove the deprecated homebrew/php tap, if present:

brew untap homebrew/php

Run brew cleanup:

brew cleanup