Getting the development environment right at the start is vitally important to productive application development. Here we will setup a flexible “LAMP” development environment on the latest Mac Os X, El Capitan. We will focus on keeping the development platform flexible and stable, centrally managing all system & application dependencies. Within a few minutes, we will hopefully have advanced PHP web applications serving up pages, but with the ability to integrate extra system components specific to your application.
Apple’s native development IDE is XCode, it’s not great for PHP but provides handy tools and installing it kind of tells Apple your computer’s being used for software development and to unlock related features. If you’re starting on a completely fresh system, it’s a good idea to install Apple’s Xcode tools. Open up the Terminal App, e.g.
cmd + space then:
terminal and type:
sudo xcode-select --install sudo xcodebuild -license
You will have to agree to some terms & conditions but prevents later problems using common tools like Git.
Install Apache and PHP7 (or other versions)
Install the amazing and free open-source Homebrew package management system which will make open-source software development far more manageable. If you’re not yet convinced by Homebrew, check out its popularity on GitHub. Install Homebrew as such:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
As of writing, the most recent version of PHP is 7.0, although Mac already has PHP and Apache inbuilt, we will install it using Homebrew to better manage all development services & dependencies – they’ll be all in one place, managed using a standard set of commands. Allowing us to easily upgrade & downgrade PHP, also since Apache (the web server / engine) keeps changing between MacOS releases, we will use Homebrew to manage and keep it consistent.
Fist stop the default Apache service, in the terminal type:
sudo apachectl stop sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null brew install httpd24 --with-privileged-ports brew install php71 [short wait to download files] brew services start homebrew/apache/httpd24
This should take a minute or less and Homebrew is usually really good at providing helpful and clean output info, errors and ways to fix them. For example, it may give you info about where the php.ini file is, (e.g.
/usr/local/etc/php/7.0/php.ini ) or suggest the following command to automatically start PHP7 at login:
brew services start homebrew/php/php70
As mentioned, helpful and clean output info is one of Homebrew’s real strong points, always read what it outputs!
Verify PHP7 installation (optional)
These are a few really useful commands to check everything is working, or diagnose any problems:
php -v PHP 7.0.8 (cli) (built: Jun 23 2016 16:32:40) ( NTS ) Copyright (c) 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies which php /usr/local/bin/php ls -l /usr/local/bin/php lrwxr-xr-x 1 maltronic admin 36 30 Aug 19:20 /usr/local/bin/php -> /usr/local/Cellar/php70/7.0.8/bin/php php -i | grep php.ini Configuration File (php.ini) Path => /usr/local/etc/php/7.0 Loaded Configuration File => /usr/local/etc/php/7.0/php.ini
If for any reason there’s a problem you can manually point
php to the desired version. First, check what Kegs are have installed in your Cellar using:
If no version of php appears, try “tapping” homebrew to enable it to pick up more software kegs then installing php7 like so:
brew tap homebrew/dupes brew tap homebrew/versions brew tap homebrew/homebrew-php brew install php70
You can link to whichever installed PHP version you like, say you wanted to use PHP 5.6 (and have installed it using brew install php56 then create a symbolic link to /usr/local/bin/php:
ln -s /usr/local/Cellar/php56/5.6.23/bin/php /usr/local/bin/php
Enable Debugging (optional)
Stop haphazardly print variables to the screen and become a real pro developer, use debugging! It’s so easy and better for fixing bugs. To install Xdebug and enable IDE debugging using popular IDEs like Netbeans and PHPStorm, install with homebrew:
brew install php70-xdebug
brew install mysql
Just replace “mysql” with “mariadb” (for rest of article). The Homebrew MySQL/MariaDB server should now be running, this can be verified with:
brew services list
brew services lists the Homebrew’s service manager commands. If mysql isn’t already running, type
brew services start mysql
We will keep on using the preinstalled Apache server but edit the Apache config file to enable the PHP7 module. Use Mac’s inbuilt nano editor or another text editor (like Sublime Text):
sudo nano /etc/apache2/httpd.conf
Add the following line:
LoadModule php7_module /usr/local/opt/php70/libexec/apache2/libphp7.so
ctrl + x to quit.
Now, every site we add will be a new VirtualHost in Apache, one of potentially many web applications running on your computer. Whilst you can edit the
/etc/hosts file to enable local domain names, a quick and reliable technique is to use different ports to distinguish websites. First, make sure Apache is checking for Virtual Hosts and that there’s no # commenting out the file:
sudo nano /etc/apache2/httpd.conf
Go right to the bottom of the file (
v is PAGE DOWN) and ensure the following line does not have a
# infront, it should look like the middle line below:
... Include /private/etc/apache2/other/*.conf ... (i.e. no
#, although the
Now edit Apache’s VirtualHost config file, using the nano editor command:
sudo nano /etc/apache2/extra/httpd-vhosts.conf
And add a VirtualHost config for your website:
Listen 81 DocumentRoot "/Users/maltronic/my_php_project/web" ServerName "local.my_php_project" ErrorLog "/var/log/apache2/my_php_project-error.log" Options Indexes FollowSymLinks AllowOverride All Require all granted
Where the directory (“web” above) is the base directory that will appear on your website (i.e. where index.php or an equivalent would sit).
Now, finally, we restart the Apache server to apply our changes:
sudo apachectl restart
Some errors may appear (especially in regards to domain names), these generally don’t matter although if there’s an obvious problem stated you should fix it and re-run the restart command.
As usual, install PHPMyAdmin using Homebrew:
brew install phpmyadmin
And as usual, Homebrew will give some info on any final steps, which in my case means:
sudo nano /etc/apache2/httpd.conf
Then adding to the bottom of the file (ctrl + v is page down in nano):
Alias /phpmyadmin /usr/local/share/phpmyadmin Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted Order allow,deny Allow from all
Install Composer (optional)
Composer is a near universally adopted PHP package manager that enables your PHP applications to use 3rd party libraries and manage their dependencies (very similar to Homebrew but for your PHP application (on any OS), rather than Mac Operating System).
It’s not needed yet, but most professional and open-source projects use it. For consistency let’s install it using Homebrew:
brew install composer
As usual, look at the screen output for any errors and info.
Try loading PHPMyAdmin in a web browser at:
By default the MySQL admin user is: root (with no password).
You now have a fully functioning and extremely flexible LAMP development environment. From here you can easily add additional services like Redis, Memcache, RabbitMQ, other databases and whatever else you would like to use in your project
This guide gets updated based on reader comments. Any problems, please comment below or share on social media if you found this guide useful!