Carnet Web de Bastien Jaillot

Switcher entre PHP 5.2 et PHP 5.3 sur Mac OS X et Homebrew

Note publiée le .

J'ai besoin au quotidien de pouvoir coder en PHP. Cela peut aller du tout nouveau framework de tests atoum, symfony 2… à du code pourri développé par d'autres et/ou du Drupal 6. Je n'ai donc pas trop le choix, il me faut PHP 5.2 sur ma machine.

Jusqu'à maintenant j'avais opté pour la facilité avec une installation complètement différente (vm, autre serveur) pour PHP5.3 et ça fonctionnait très bien. Mais c'était une situation stupide et bancale, genre un "proto en prod".

Les outils genre MAMP, Xampp étaient proscrits et j'ai une sainte horreur de MacPort et Fink. J'aime en revanche beaucoup homebrew. Malheureusement, PHP rentre en conflict avec la politique du créateur de ne pas surcharger les libs inclues dans Mac OS X, ce qui est le cas de PHP avec la version 5.3.2 (que je ne compte pas utiliser).

Pour avoir les deux et pouvoir switcher facilement, j'ai donc utilisé des forks git hébergés sur github :

Dans ces deux cas, je n'utilise pas exactement la version proposée, mais *oh joie* d'Homebrew et Git, modifier une Formula est très aisé et tout est sauvegardé / packagé / versionné avec git. Du bon combo gagnant !

La formula de PHP 5.2 proposé plus haut se nomme *php52* alors que celle de PHP 5.3 *php*. C'est gentil, ça évite les conflits.

Pour finir les installation ou plus de détails, je vous invite à lire le dernier billet de mon excellent collègue de Clever Age : Vincent Lemaire, Apache, mySQL et PHP 5.3 avec Homebrew. Ce qui nous intéresse ici c'est de pouvoir switcher entre l'un et l'autre.

Pour passer de PHP 5.2.17 à PHP 5.3.5

bash
# binaries files links
cd `brew --prefix` 
brew unlink php52
brew link php

# apache configuration
cd /tmp 
sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bak
sed -e "s/php\/5.3.5/php52\/5.2.17/g"  /etc/apache2/httpd.conf > httpd.conf.tmp
sudo mv httpd.conf.tmp /etc/apache2/httpd.conf
sudo apachectl restart

Pour passer de PHP 5.3.5 à PHP 5.2.17

# binaries files links
cd `brew --prefix` 
brew unlink php52
brew link php

# apache configuration
cd /tmp 
sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.bak
sed -e "s/php52\/5.2.17/php\/5.3.5/g"  /etc/apache2/httpd.conf > httpd.conf.tmp
sudo mv httpd.conf.tmp /etc/apache2/httpd.conf
sudo apachectl restart

Puis

A vous de voir si vous allez plus loin : configuration php.ini, extension PHP. Mais le principe est là.

Je me suis intégré une version plus complexe de tout ça dans mon workflow de gestion de configuration de ma machine à base de git, fabric, lien logique pour en glander le moins possible, et c'est bien pratique et très élégant !

ps : chasse aux trolls, en python virtualenv c'est vachement plus intelligent ET JE LE SAIS !