L’automatisation des opérations répétitives dans un projet de développement peut être résolu de multiples manières allant du simple script lancé à la main au système d’intégration continue.

La plupart des langages ont standardisés leurs outils, make pour C, Ant pour Java… PHP bénéficie lui aussi d’un tel outil : Phing.

Phing est un projet Open Source très inspiré de Ant. Le concept est assez simple. Un fichier XML décrit une série d’actions possibles pouvant ou non être dépendantes les unes des autres et une ligne de commande permet de déclencher ces actions.

Utilisation de Phing

Un exemple rapide. Nous voulons vérifier que la syntaxe des fichiers PHP de notre projet est bien respectée, qu’aucune erreur ne s’y est glissée, le fichier XML ressemble alors à ça :

Fichier build.xml

<?xml version=“1.0” encoding=“UTF-8”?>
<project name=“premier_projet” default=“lint”>
<target name=“lint” description=“Vérifie la syntaxe PHP”>
<phplint>
<fileset dir=“/home/mon_projet/src/”>
<include name=“**/*.php”/>
<exclude name=“lib/Zend/**/*.php”/>
</fileset>
</phplint>
</target>
</project>

Enregistrez ce fichier avec le nom build.xml (le fichier par défaut utilisé par phing) dans le dossier build de votre projet, par exemple

/home/mon_projet/build/

Ouvrez une console et lancez ensuite la commande phing depuis le dossier du fichier build.xml

Commande

cd /home/mon_projet/build/
phing

Le fichier build.xml est très explicite, cette commande va donc vérifier, pour tous les fichiers PHP de mon dossier source a l’exclusion de ceux de la bibliothèque Zend, que leur syntaxe est bien respectée.

Autre exemple, pour générer automatiquement la documentation de classes PHP.

Fichier build.xml

<?xml version=“1.0” encoding=“UTF-8”?>
<project name=“premier_projet” default=“doc”>
<target name=“doc” description=“Génère la documentation”>
<phpdoc title=“API Documentation”
                destdir=“/home/mon_projet/api”
                sourcecode=“no”
                output=“HTML:Smarty:PHP”>
<fileset dir=“/home/mon_projet/src/”>
<include name=“**/*.php”/>
<exclude name=“lib/Zend/**/*.php”/>
</fileset>
</phpdoc>
</target>
</project>

Commandes

cd /home/mon_projet/build/
phing

Phing tout comme Ant gère la dépendance des tâches. Dans notre cas, si nous voulons générer la documentation après la vérification syntaxique. Il suffit de modifier notre fichier build.xml comme suit :

Fichier build.xml

<?xml version=“1.0” encoding=“UTF-8”?>

<project name=“premier_projet” default=“build”>
<target name=“lint” description=“Vérifie la syntaxe PHP”>
<phplint>
<fileset dir=“/home/mon_projet/src/”>
<include name=“**/*.php”/>
<exclude name=“lib/Zend/**/*.php”/>
</fileset>
</phplint>
</target>

<target name=“doc” description=“Génère la documentation”>
<phpdoc title=“API Documentation”
                destdir=“/home/mon_projet/api”
                sourcecode=“no”
                output=“HTML:Smarty:PHP”>
<fileset dir=“/home/mon_projet/src/”>
<include name=“**/*.php”/>
<exclude name=“lib/Zend/**/*.php”/>
</fileset>
</phpdoc>
</target>

<target name=“build”
        depends=“lint, doc”
        description=“Vérifie la syntaxe PHP et génère la documentation” />
</project>

Commande

phing

La commande phing va automatiquement séquencer les 2 tâches lint et doc car la tâche build dépends d’elles.
Si nous voulons seulement générer la documentation il suffit de taper la commande suivante.

Commande

phing doc

Phing est très puissant. Il permet de gérer des tâches conditionnelles, des tâches spécifiques PHP comme l’analyse de code par le compilateur Zend, le lancement de tests unitaires classiques ou avec Selenium. Il sait aussi piloter des tâches plus génériques comme l’update de dépôt SVN ou l’exécution de commandes externes. La liste longue et complète des tâches disponibles se trouve dans la documentation de Phing.

Installation de Phing

Pour installer Phing, le plus simple est d’utiliser PEAR. Sous Ubuntu tapez les commandes suivantes en mode super utilisateur.

Installation de PEAR, la bibliothèque d’extensions à PHP

apt-get install php-pear

Installation de Phing

pear channel-discover pear.phing.info
pear install phing/phing