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 :
- PHP 5.2 depuis bozktek, qui vient juste de passer à la version 5.2.17 et qui propose une option de compilation FPM (que je n'utilise pas)
- PHP 5.3 depuis ampt
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 !