Setting up PHP on OS X Leopard
5th March 2009In the vein of some of Lorna's articles, this is more a note for myself than anything else. Not everything is explained in detail as it assumes you know how to use a command line...
These are the steps I take to get the Apple supplied PHP working with GD, PDO_MySQL and Xdebug working on OS X 10.5.
/usr/local
Ensure that the following directories exist:
sudo mkdir /usr/local/include
sudo mkdir /usr/local/bin
sudo mkdir /usr/local/lib
sudo mkdir -p /usr/local/man/man1
Run Apache in 32 bit mode
This saves us having to compile our own MySQL as MySQL doesn't offer a "fat" binary
- cd /System/Library/LaunchDaemons
- sudo vim org.apache.httpd.plist
- Immediately after the line containing <array> add:
<string>arch</string> <string>-i386</string> - Reboot
MySQL
- Download the 32bit version of MySQL 5.0.x for OS X 10.5 from mysql.com and install the pkg, the startup item and the pref pane.
- Add /usr/local/mysql/bin to the path: vim ~/.bash_profile and add:
export PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH export EDITOR=vimat top of file. (Note that we set EDITOR whilst we are here so that svn is happy!)
- Set up MySQL root password:
mysqladmin -u root password {new-password} mysqladmin -u root -p{new-password} -h localhost password {new-password} mysqladmin -u root -p reloadQuit Terminal to flush the history to file. Restart Terminal and remove the history file: rm .bash_history so that {new-password} isn't in plain text on the disk.
- Set the correct socket information for PHP. Ensure MySQL is running via the System Preferences panel then:
sudo mkdir /var/mysql sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Rest of Apache setup
- cd /etc/apache2
- sudo vim httpd.conf
- Find #LoadModule php5_module libexec/apache2/libphp5.so and remove the leading #
- Find AllowOverride None within the <Directory "/Library/WebServer/Documents">section and change toAllowOverride All so that .htaccess files will work.
- Restart Apache: sudo apachectl restart
- Open Finder and navigate to /Library/WebServer/Documents/
- Create a new folder called "orig" and place all files currently in the Documents folder into it.
- Create a new file called info.php with <?php phpinfo(); inside it.
- Use Safari to navigate to http://localhost/info.php and check that the PHP version is displayed (5.2.6 at the time of writing).
php.ini
- cd /etc
- sudo cp php.ini.default php.ini
- sudo chmod ug+w php.ini
- sudo chgrp admin php.ini
- vim php.ini (assuming your user is a member of the admin group) and change settings appropriately. Change:
error_reporting = E_ALL | E_STRICT extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20060613"You must set the extension dir correctly. (Commenting the line out also works...)
PHP extensions
The supplied PHP doesn't come with pdo_mysql, pear or gd, so fix it.
- Download the correct version of PHP from http://www.php.net/releases/. (5.2.6 at time of writing)
- Create a directory called src in your home directory and unpack the PHP source. This creates /Users/rob/src/php-5.2.6/ in my case.
pdo_mysql
- cd ~/src/php-5.2.6/ext/pdo_mysql.
- phpize
- MACOSX_DEPLOYMENT_TARGET=10.5 \
CFLAGS='-O3 -fno-common -arch i386' \
LDFLAGS='-O3 -arch i386' \
CXXFLAGS='-O3 -fno-common -arch i386' \
./configure --prefix=/usr --with-pdo-mysql=/usr/local/mysql - make
- sudo make install
- Edit /etc/php.ini and find the extension_dir line and add after it:
extension=mysql.so
- Restart apache: sudo apachectl restart and check in the phpinfo that pdo_mysql is now loaded.
GD
Installing GD onto the stock PHP install that is supplied with OS X is slightly more complicated than you'd expect because you need to install libjpeg first.
Libjpeg
Libjpeg is available from the Independent JPEG Group.
- Download the source code: http://www.ijg.org/files/jpegsrc.v6b.tar.gz
- extract to ~/src
- cd ~/src/jpeg-6b
- cp /usr/share/libtool/config.* .
- ./configure --enable-shared
- sudo make install
- Libjpeg is now installed in /usr/local/lib
GD extension
- cd ~/src/php-5.2.6/ext/gd
- phpize
- MACOSX_DEPLOYMENT_TARGET=10.5 \
CFLAGS='-O3 -fno-common -arch i386' \
LDFLAGS='-O3 -arch i386' \
CXXFLAGS='-O3 -fno-common -arch i386' \
./configure --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6 --with-xpm-dir=/usr/X11R6 - make
- sudo make install
- Edit /etc/php.ini and find the extension_dir line and add after it:
extension=gd.so
- Restart apache: sudo apachectl restart and check in the phpinfo that GD is now loaded.
PEAR
- cd ~/src/.
- curl http://pear.php.net/go-pear > go-pear.php
- Accept defaults, except for installation prefix (1) should be /usr/local
- Check that the include_path in /etc/php.ini is correct and includes the PEAR directory (/usr/local/PEAR).
Xdebug
Can't have a PHP development environment without xdebug!
- sudo pecl install xdebug
- Edit /etc/php.ini and add
zend_extension="/usr/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so"
after the other extension lines.
- Restart apache: sudo apachectl restart and check in the phpinfo that xdebug is now loaded.
PHPUnit
- sudo pear channel-discover pear.phpunit.de
- sudo pear install phpunit/PHPUnit
It all works on this machines, anyway :)
Updatesee Marc Liyanage's PHP5 packages
