Updating to PHP5.3 with MacPorts
Previously, I wrote about using two versions of PHP with macports . In it I covered installing PHP4 and PHP5. Since then PHP5.3 has been released as a stable release. However, I needed to maintain my PHP5.2 installation as I have a number of client projects that are on servers using PHP5.2. So to reduce version insanity I wanted to keep 5.2.x around as well.
Backup config files
The first step to updating PHP for me is always to backup my config files. I’ve been stung a few times by updating PHP to new minor versions, which in turn upgrades Apache2 which blows up all my config files. This made me sad the first time it happened. So everytime since then I’ve always made a backup just in case apache2 got updated and my config files got blown up.
Uninstall PHP 5.2 and install PHP 5.3
The fine people at macports have added a php52
package, so the first step I took was deactivating & uninstalling all my php5
packages. Once they were dead and gone I installed PHP 5.3 via the php5
package. Once installed I thought I was all set, but I was wrong. Seems that all the database driver sets have been removed from the core PHP5 package. So make sure you install the database drivers you need. I needed php5-mysql
, php5-sqlite
, and php5-postgresql
.
Install PHP 5.2
First step I did was to deactivate php5
so no activation conflicts showed up. I then installed the php52
with the required variants. After this step I had PHP 5.2, 5.3 and 4.4.9 installed and ready to go. All that was needed was updating my php-switch
script, from the last post. So here is the updated copy with support for all 3 PHP’s
xDebug
My love for xDebug has not waned either, so getting xDebug setup needed to be done. Once again I copied the xDebug binaries from ActiveState into their respective directories /opt/local/lib/php5
for PHP5.3 and /opt/local/lib/php52
for PHP5.2, which you will need to make. However, since the php5
and php52
port share the same config file, I used symlinks modified by my php-switch script to point /opt/local/lib/php/extensions/linked
at the correct binaries. In my php.ini file I linked the xDebug extension to the symlink address (/opt/local/lib/php/extensions/linked/xdebug.so), so that it is correct for both PHP 5.2 and PHP 5.3.
Switch Script
Last time I posted my php-switch
script, and got good feedback about it, so once again I’ll post the updated script.
- #!/usr/bin/env bash
- /opt/local/apache2/bin/apachectl stop
- case "$1" in
- 'php4')
- /opt/local/bin/port deactivate php5
- /opt/local/bin/port deactivate php52
- /opt/local/bin/port activate php4
- cp /opt/local/apache2/conf/httpd.php4.conf /opt/local/apache2/conf/httpd.conf
- ;;
- 'php52')
- rm /opt/local/lib/php/extensions/linked
- /opt/local/bin/port deactivate php4
- /opt/local/bin/port deactivate php5
- /opt/local/bin/port activate php52
- ln -s /opt/local/lib/php52/extensions /opt/local/lib/php/extensions/linked
- cp /opt/local/apache2/conf/httpd.php5.conf /opt/local/apache2/conf/httpd.conf
- ;;
- 'php5')
- rm /opt/local/lib/php/extensions/linked
- /opt/local/bin/port deactivate php4
- /opt/local/bin/port deactivate php52
- /opt/local/bin/port activate php5
- cp /opt/local/apache2/conf/httpd.php5.conf /opt/local/apache2/conf/httpd.conf
- ln -s /opt/local/lib/php5/extensions /opt/local/lib/php/extensions/linked
- ;;
- esac
- /opt/local/apache2/bin/apachectl start
Unlike last time, this one has to create some links for the extension directories. This is because of the shared php.ini file between PHP5.2 and PHP5.3. Once again I have this file in /opt/local/bin/php-switch
and made it world executable. So there you go, multiple PHP versions and an easy way to switch between them.
Update There was an issue with the original script I posted. By deleting /opt/local/lib/php/extensions you lost all your database extensions. I’ve update the switch script and instructions to make this not happen.
Correction: That should be php5-postgresql not php5-postgresql83.
Otherwise, a great guide, Mark.
Graham Weldon on 9/8/09
Graham: Thanks, updated :)
mark story on 9/8/09
Which debug client do you use for xdebug?
Thanks for this article!
Rafael Vega on 4/28/10