Historically, I’ve always preferred to use Apple’s built-in Apache 2.2 and PHP 5.x that comes with Leopard. However, after trying to compile PHP 5.3 from scratch and connect it with Apache, I decided to just use the MacPorts installer instead. That did mean giving up control of a finely-tuned Apache installation, but in the end, I think I’ve ended up with a better localhost system.
- Install MacPorts
Also, make sure that your MacPorts install is completely up-to-date with:
sudo port -d selfupdate
Now, I’ve never used MacPorts to install PHP or Apache before, so I’m starting with a clean slate. If you’ve already installed PHP or Apache with MacPorts, your steps may be different. As always, your mileage may vary. For me, I develop several open-source projects, so I need things that others may not. Adjust these steps as necessary.
- Using “Web Sharing” in your Sharing Preferences should be turned off. Currently this points to the (old) Apple Apache installation, although we’ll change that later.
- From Terminal, install PHP 5.3 + Apache, and some other stuff. This will likely take quite a while. I’m installing SQLite, MySQL, and PostgreSQL because of my work on CacheCore, so you may or may not need those.
mysqlndis the new PHP Native Driver for MySQL and is supposed to be better, so we’ll use that. We also need to enable non-default settings for cURL.
sudo port install curl +ssl+ipv6+ares+idn+gss+openldap+sftp_scp \ php5 +apache2+fastcgi+pear
You can see all available options by running
port variants php5
- The new Apache configuration file is stored at
/opt/local/apache2/conf/httpd.confwhile the old one was at
/etc/apache2/conf/httpd.conf. Take a moment to copy over any settings you’ll want to maintain into the new Apache installation.
- You’ll also want to include your extra settings. Toward the bottom of your
httpd.conffile, add the following line:
# All settings Include conf/extra/*.conf
- If you don’t have an SSL certificate, rename your SSL configuration:
cd /opt/local/apache2; sudo mv conf/extra/httpd-ssl.conf conf/extra/httpd-ssl.conf-disabled
- You’ll also want to enable PHP in Apache:
sudo mv conf/extras-conf/mod_php.conf conf/extra/mod_php.conf
- The new PHP configuration file is stored at
/opt/local/etc/php5/php.iniwhile the old one was at
/etc/php.ini. Take a moment to copy over any settings you’ll want to maintain into the new PHP installation.
- You’ll need to tell Apache to enable PHP support. Open your new
httpd.conffile, find where the extensions are loaded (with
LoadModule), and add this to the end of the line:
LoadModule php5_module modules/libphp5.so
- Restart Apache. If you were using
apachectlbefore, it still points to the old Apache, so we’ll want to point specifically to the new one.
sudo /opt/local/apache2/bin/apachectl restart
At this point, PHP 5.3 with Apache 2.2 and the new
mysqlnd extension are all installed.
- I generally prefer to have lots more stuff installed locally so that I can worry more about developing and less about installing. Because of this, I also install a few other things.
sudo port install memcached \ php5-apc \ php5-curl \ php5-gd \ php5-http \ php5-iconv \ php5-imagick \ php5-mbstring \ php5-memcache \ php5-mysql \ php5-openssl \ php5-postgresql \ php5-sockets \ php5-sqlite \ php5-tidy \ php5-xdebug
- Restart Apache with:
sudo /opt/local/apache2/bin/apachectl restart
Replacing older versions
Now, we want to continue using our command-line PHP scripts and the “Web Sharing” checkbox in the Sharing Preference Pane, so let’s make sure that those are all pointing to the new locations instead. We’ll be backing up and redirecting
- Open up your Sharing Preference Pane, and disable Web Sharing
- Run the following command on the Terminal:
sudo mv /usr/bin/php /usr/bin/php.bak && sudo ln -s /opt/local/bin/php /usr/bin/php; \ sudo mv /usr/sbin/apachectl /usr/sbin/apachectl.bak && sudo ln -s /opt/local/apache2/bin/apachectl /usr/sbin/apachectl; \ sudo mv /usr/sbin/httpd /usr/sbin/httpd.bak && sudo ln -s /opt/local/apache2/bin/httpd /usr/sbin/httpd; \
- Re-enable Web Sharing in the preference pane.
Lastly, I like to set up some shortcuts so that I can access all of my important localhost stuff from one place. I’ll create a new directory called
www-config and then I’ll place symlinks into it for quick access to Apache and PHP configuration files.
sudo mkdir /www-config && \ cd /www-config && \ sudo ln -s /opt/local/apache2/bin/apachectl /www-config/apachectl && \ sudo ln -s /opt/local/apache2/conf/ /www-config/httpd-conf && \ sudo ln -s /opt/local/apache2/logs/ /www-config/logs && \ sudo ln -s /opt/local/var/db/php5/ /www-config/php-ini && \ sudo ln -s /opt/local/etc/php5/php.ini /www-config/php.ini