Install and configure multiple PHP versions on Mojave with Homebrew
In this blog series, I take you through the steps I took to create my new setup: a blazingly fast and flexible setup with Apache, automatic DNS setup for .test domains, multiple PHP versions that I can easily switch between, Redis, Opcache, Image Magick, Blackfire and more. Links to the other blogs in this series are at the bottom.
My development setup part 3: Install and configure multiple PHP versions on Mojave with Homebrew
Uninstall any deprecated Homebrew PHP versions and extensions
Before March 2018, Homebrew installed PHP as a Homebrew package. As of March 2018, PHP is part of the homebrew core. If yu have any PHP versions installed from through homebrew from before March 2018, make sure to remove them.
brew update
brew upgrade
brew cleanup
# Check if you have old deprecated Homebrew PHP versions and extensions installed
brew list | grep php
# Uninstall deprecated Homebrew PHP
brew uninstall --force php56 php56-apcu php56-opcache php56-xdebug php56-yaml
# brew uninstall --force php70 php70-apcu php70-opcache php70-xdebug php70-yaml
# Etc.
# Check that no deprecated Homebrew PHP packages are left
brew cleanup
brew list | grep php
# Remove all old PHP configurations
rm -Rf /usr/local/etc/php/*
Install multiple PHP versions through Homebrew
Bu default, Homebrew only supports official non-deprecated PHP versions. If you need to install a PHP version that is already end of life, like PHP 7.0, make sure to run this tap first:
brew tap exolnet/homebrew-deprecated
Now, install all PHP versions you need. Later, we will install a command line tool to easily witch between versions.
brew install php@5.6
brew install php@7.0
brew install php@7.1
brew install php@7.2
brew install php@7.3
Now first close your terminal windows so your .bash_profile is reloaded.
Check the latest installed PHP version is actually running.
php -v
# Shoud return PHP 7.3.0 (cli)...
Now we need to load all PHP versions as Apache modules. Open file /usr/local/etc/httpd/httpd.conf and add a LoadModule statement for every PHP version you have installed under the existing LoadModule
lines. Uncomment the currently running version and comment out the other versions.
#LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so
#LoadModule php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
Now, add index.php as the default file to load in a directory. Search:
DirectoryIndex index.html
And replace with:
DirectoryIndex index.php index.html
SetHandler application/x-httpd-php
Now restart Apache.
sudo apachectl -k stop
sudo apachectl start
To quickly check your local PHP install, create an index.php file inside your localhost webroot (in my case Users/joostvanveen/htdoc
) and make it echo your phpinfo:
<?php phpinfo();
Now, browse to http://localhost and you should see the PHP info page fo your current PHP install.
Switch between Homebrew PHP versions from the command line
Andy Miller has written a handy script that we'll use to easily switch between PHP versions from the command line.
# Download the switcher script to the proper destination
curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
# Make the switcher script writeable
chmod +x /usr/local/bin/sphp
Check if the paths /usr/local/bin and /usr/local/sbin have been added to your bash profile file (~/.profile
, ~/.bash_profile
, or ~/.zshrc
).
echo $PATH
If they have not, you need to add them manually.
Now, you can switch between PHP versions from the command line. You can check PHP info at http://localhost.
sphp 7.2
sphp 7.1
# Etc.
Upgrading PHP with Homebrew
When you want to update the currently active PHP version through Homebrew, do:
brew update
brew upgrade
To upgrade other PHP versions, first switch and then repeat the upgrade process.
Install Mariadb
We will install mariadb with Homebrew:
brew update
brew install mariadb
brew services start mariadb
After installing mariadb, make sure to change the mysql password:
/usr/local/bin/mysql_secure_installation<
Since mariadb is a service, it will start automagically on reboot. Should you ever need to stop or restart it by hand, use one of the common brew services commands:
brew services stop mariadb
brew services start mariadb
brew services restart mariadb
In the next episode we will install the necessary and PHP extensions.
Blogs in this series:
- Choosing a local PHP development setup on Mojave
- Install and configure Apache 2 on Mojave with Homebrew
- Install and configure multiple PHP versions on Mojave with Homebrew
- Installing PHP extensions and services with PECL and Homebrew
Many thanks to the guys at getgrav.org, who wrote a great blog series on this topic: https://getgrav.org/blog/macos-mojave-apache-multiple-php-versions.