The default Mac OS X stack
If you are running Mac OS X Snow Leopard, you should already have PHP 5.3.3 installed on your system.
To be sure, open Applications » Utilities » Terminal and check it yourself:
/usr/bin/php -v
You just have to turn on the Apple’s Personal Web Sharing in the System
Preferences and place your projects in $HOME/Sites
folder.
But you will need to install MySQL or any SGBDR/NoSQL Manager by hand (getting the tarballs and fighting with dependencies, configuration and compilation stuff). Installing Apache/PHP modules and libraries can also be a pain. Personally, I rather prefer the MAMP solution or using package managers such as MacPorts or Homebrew. To my point of view, the default Mac OS X stack is only suitable for simple needs.
MAMP: Drag, drop, done.
This is the quick way to get a ready-to-go PHP 5.3 environment on a Mac.
Download MAMP, drag and drop the MAMP
folder into the Applications
folder and that’s all.
You can easily switch between two major PHP versions (PHP 5.2 or PHP 5.3) in a single click thanks to the Applications » MAMP » MAMP application. As the default MAMP PHP version is 5.2, launch the MAMP application, go in the preferences pane and change the current PHP version.
You now have to override your system PATH
.
Edit your $HOME/.profile
or $HOME/.bash_profile
file, then add these lines
at the end:
export PATH=/Applications/MAMP/bin/php5.3/bin:$PATH
Source it:
source $HOME/.profile
Check your PHP version:
php -v
This command should return PHP 5.3.2 (cli)
(or above).
Cook your own stack with MacPorts
MacPorts is the most popular package manager for Mac OS X. Homebrew is also very powerful. With MacPorts, you can install your own stack with a high level of configuration and optimization. Everything is compiled from source and MacPorts manages itself all dependencies. Obviously, this takes time but it’s worth it. Let’s go?
Turn off Apple’s Personal Web Sharing in the System Preferences.
Install MacPorts.
Open a terminal (Applications » Utilities » Terminal).
Update the ports tree:
sudo port -d selfupdate
Install Apache2:
sudo port install apache2
Activate Apache2 to start it automatically at the boot:
sudo port load apache2
Go in your browser and enter the URL: http://localhost. You should see “It works!”.
Install MySQL:
sudo port install mysql5-server
Set up the “mysql” database:
sudo -u _mysql mysql_install_db5
sudo chown -R mysql:mysql /opt/local/var/db/mysql5/
sudo chown -R mysql:mysql /opt/local/var/run/mysql5/
sudo chown -R mysql:mysql /opt/local/var/log/mysql5/
Activate MySQL to start it automatically at the boot:
sudo port load mysql5-server
Set the MySQL’s root password (the current one is empty):
mysqladmin5 -u root -p password <your-password>
Try to log you as root:
mysql5 -u root -p
Then exit the session:
mysql> exit;
Secure the configuration:
/opt/local/bin/mysql_secure_installation5
Install PHP:
sudo port install php5 +apache2 +pear
sudo port install php5-mysql php5-sqlite php5-xdebug php5-mbstring php5-iconv \
php5-posix php5-apc
Register PHP with Apache2:
cd /opt/local/apache2/modules
sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so
Set up the PHP configuration file:
cd /opt/local/etc/php5
sudo cp php.ini-development php.ini
Set up the timezone in /opt/local/etc/php5/php.ini
:
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Paris"
Set up the MySQL default socket:
sudo -i
cd /opt/local/etc/php5
cp php.ini php.ini.bak
defSock=`/opt/local/bin/mysql_config5 --socket`
cat php.ini | sed \
-e "s#pdo_mysql\.default_socket.*#pdo_mysql\.default_socket=${defSock}#" \
-e "s#mysql\.default_socket.*#mysql\.default_socket=${defSock}#" \
-e "s#mysqli\.default_socket.*#mysqli\.default_socket=${defSock}#" > tmp.ini
grep default_socket tmp.ini
mv tmp.ini php.ini
rm php.ini.bak
exit
Edit /opt/local/apache2/conf/httpd.conf
file.
Find these lines:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Then, add index.php
:
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
At the end of the file, add this line:
Include conf/extra/mod_php.conf
Restart Apache2:
sudo /opt/local/apache2/bin/apachectl -k restart
Done.
Adding a VirtualHost
For a MacPorts configuration, edit /opt/local/apache2/conf/httpd.conf
and
uncomment this line:
Include conf/extra/httpd-vhosts.conf
Then edit /opt/local/apache2/conf/extra/httpd-vhosts.conf
.
Remove dummy examples and replace them with your own configuration:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/absolute/path/to/your/project"
ServerName project.localhost
<Directory "/absolute/path/to/your/project">
Options Indexes FollowSymlinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog "logs/project-error_log"
CustomLog "logs/project-access_log" common
</VirtualHost>
Restart Apache2:
sudo /opt/local/apache2/bin/apachectl -k restart
For a MAMP configuration, add your VirtualHost at the end of
Applications/MAMP/conf/httpd.conf
file, then restart the server.
Don’t forget to add your host in /private/etc/hosts
:
127.0.0.1 localhost project.localhost
In the folder of your project, create a phpinfo.php
file:
<?php phpinfo(); ?>
Now, open your browser and go to http://project.localhost/phpinfo.php.
You should see the PHP Info page.