PHP 5.4.7 is the latest stable release of PHP. WordPress has a minimum required version of 5.2.6. Most developers aren’t using the PHP 5.4 branch. Actually, most aren’t even rocking PHP 5.3. This disgusts me.
PHP 5.3 added support for closures. If you come from the world of JavaScript, you know how useful they can be. If you have used PHP 5.3 and closures in classes, you will be happy to know that PHP 5.4 allows you to use $this
in closures in class methods.
If you haven’t messed around with PHP 5.3, you can install these MacPorts to get started:
php5 +apache2+fastcgi+pear php5-apc php5-curl php5-gd php5-http php5-iconv php5-imagick php5-mbstring php5-mcrypt php5-memcached php5-mysql +mysqlnd php5-openssl php5-tidy
If you already have PHP 5.3 and want to upgrade to PHP 5.4, these are some tricks to get you on the right path:
sudo -s // use sudo mode throughout port uninstall php5 // won't work if you have extensions installed, // so uninstall everything that has PHP5 as a dependency first port install php54 cd /opt/local/etc/php54 && sudo cp php.ini-development php.ini
Install a bunch of PHP extensions:
port install php54-apc php54-curl php54-gd php54-http php54-iconv php54-imagick php54-mbstring php54-mcrypt php54-memcached php54-mysql php54-openssl php54-tidy
To use mysqlnd with a local MySQL server, edit /opt/local/etc/php54/php.ini
and set
mysql.default_socket
, mysqli.default_socket
and pdo_mysql.default_socket
to
/opt/local/var/run/mysql5/mysqld.sock
Make sure PHP 5.4.6 is the default PHP binary:
which php
If it’s something like /usr/bin/php
:
cd /usr/bin && sudo rm -rf php sudo ln -s /opt/local/bin/php54 php
You now have PHP 5.4.6 and your extensions, but you no longer have the apache variant.
port install php54-apache2handler cd /opt/local/apache2/modules sudo /opt/local/apache2/bin/apxs -a -e -n php5 mod_php54.so vi /opt/local/apache2/conf/httpd.conf (remove the old php5.so)
You now have PHP 5.4 and the apache handler, but you no longer have the PEAR variant. You can try to make this work:
port install pear-PEAR
Or you can do the following:
cd # curl http://pear.php.net/go-pear.phar -o go-pear.phar sudo php go-pear.phar
You will prompted to specify config vars, we want to change #1 and #4.
Press 1 – Installation base ($prefix) – and enter:
/opt/local/lib/php54
Press 4 – Binaries directory – and enter:
/opt/local/bin
More checks for PEAR:
pear info pear && rm go-pear.phar pear config-set auto_discover 1 // make sure PEAR is in the PHP include path pear config-get php_dir // if you don't see "/opt/local/lib/php54/share/pear" in there php54 -i|grep 'php.ini' // you should see "/opt/local/etc/php54" - if you don't: sudo vi php.ini // change include_path to: include_path = ".:/opt/local/lib/php54/share/pear"
PEAR is installed, let’s install some PEAR stuffs:
// Unit tests pear install pear.phpunit.de/PHPUnit // Documentation generator pear install pear.apigen.org/apigen
Restart Apache:
sudo /opt/local/apache2/bin/apachectl restart
You can start Apache and Memcached, et al by using commands like:
sudo port load apache2 sudo port unload apache2 sudo port load memcached sudo port unload memcached // memcached debugging, start with: memcached -vv