Woodgate.fr

Julien Ramel

Ingénieur Recherche & Développement, passionné par le Web et ses technologies. Responsable Technique de Wax Interactive Suisse. Lyonnais expatrié à Lausanne.


Compiler une extension PHP pour MAMP



Compiler une extension PHP peut parfois être pratique, parfois nécessaire. Dans mon cas je voulais tester Gearman, un outil de "job queues" (au même titre que RabbitMQ). Je voulais pouvoir l'utiliser avec PHP et le choix de l'extension PHP me paraissait le plus logique, le plus fiable et le plus rapide.

J'ai pour habitude de travailler en local sur mon Mac avec MAMP et en production sur un serveur Debian, et donc je souhaitais compiler l'extension Gearman de PHP sur mon MAMP pour mon développement. Hors ce n'est pas aussi simple qu'il n'y paraît.


1) Installer Homebrew

Homebrew, c'est d'après ses auteurs "the missing package manager for OS X", et je peux le confirmer. Équivalent d'un "apt-get" sur une Debian, c'est un outil particulièrement pratique. Vous pouvez sauter cette étape si Homebrew est déjà installé sur votre machine.

http://brew.sh

Pour installer Homebrew, il suffit d'exécuter la commande suivante :

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Puis je teste son installation :

brew -v

2) Installer autoconf

C'est une étape nécessaire, heureusement c'est très simple à réaliser avec Homebrew :

brew install autoconf

3) Télécharger les sources de PHP

MAMP est livré avec plusieurs versions de PHP. La première chose à faire est de décider sur quelle version on va vouloir compiler notre extension. Pour ma part je vais compiler avec la dernière version disponible à la date de cet article et gérée par MAMP, à savoir PHP 5.5.14.

Je vais la chercher ici : http://ch1.php.net/get/php-5.5.14.tar.gz/from/a/mirror

Je l'extrais, renomme le dossier en php et je le colle à l'emplacement suivant :

/Applications/MAMP/bin/php/php5.5.14/include/

4) Configurer les sources PHP

Étape très simple mais indispensable sans quoi "php-config" ne sera par exemple pas disponible, je le fais grâce aux commandes suivantes :

cd /Applications/MAMP/bin/php/php5.5.14/include/php/
./configure

5) Préparer l'environnement de compilation

Cela se fait avec la commande phpize mais il faut bien penser à le faire avec le binaire fourni avec la version de PHP qui est inclue dans MAMP sans quoi le système le fera avec la version de PHP livrée par défaut, ce qu'on ne veut absolument pas.

Plus d'infos sur phpize : http://php.net/manual/fr/install.pecl.phpize.php

Je retourne donc dans le dossier de mon extension avec cd puis j'exécute la commande suivante :

/Applications/MAMP/bin/php/php5.5.14/bin/phpize

6) Configuration et compilation de l'extension

Une fois l'environnement de compilation préparé, il ne me reste qu'à compiler. Pour cela je lance les commandes suivantes :

./configure --with-php-config=/Applications/MAMP/bin/php/php5.5.14/bin/php-config
make
sudo make install

Si tout va bien, la compilation s'exécute et génère un fichier gearman.so (dans mon cas) situé dans le répertoire "modules" de mon extension.


7) Copie de l'extension dans MAMP

L'étape suivante est de copier le fichier généré dans le répertoire des extensions de notre version de PHP sur MAMP.

Chez moi, il se trouve à cet endroit :

/Applications/MAMP/bin/php/php5.5.14/lib/php/extensions/no-debug-non-zts-20121212/

Ce dossier contient déjà d'autres extensions comme opcache.so, pdo_mysql.so, etc.


8) Activation de l'extension sur MAMP

Sur MAMP 2, je dois ensuite simplement ajouter l'appel à l'extension dans le php.ini de ma version de PHP.

Pour ma version de PHP, il s'agit du fichier :

/Applications/MAMP/bin/php/php5.5.14/conf/php.ini

J'ajoute mon extension à la suite de celles déjà définies dans le fichier. Chez moi c'est ligne 541 :

extension=gearman.so

Je ferme le fichier et je m'apprête à relancer Apache pour que les modifications soient prises en compte.

Mise à jour - Sur MAMP 3, il est nécessaire de passer par l'éditeur de modèles intégré : Fichier > Modifier modèle > PHP > php.5.5.14 php.ini. Sans ça, MAMP écrase le fichier php.ini préalablement modifié.


9) Redémarrage de MAMP et vérification de l'installation

Pour être sûr que l'extension a bien été installée et chargée correctement, je lance la console PHP via le menu de MAMP :

Journal > PHP

Puis je redémarre Apache. Je n'ai pas d'erreur, c'est un bonne nouvelle ! Je teste quand même l'installation de l'extension avec l'affichage de PHPInfo dans un fichier :

<?php
phpinfo();
?>

Et voilà le résultat :

Gearman

Notre extension est maintenant utilisable avec PHP !


comments powered by Disqus