PHP

Phing : PHing Is Not GNU make

Au travail, j’ai découvert une extension PEAR pour PHP vraiment utile. Il s’agit de Phing (PHing Is Not GNU make). Phing est un projet servant à construire des projets ou à effectuer différentes étapes de façon automatique.

Pour résumer, C/C++ a son make, Linux a ses scripts bash, Windows a ses batch et PHP a Phing. Phing utilise le langage XML pour formater les scripts.

Je l’ai trouvé simple à prendre en main (en regardant la doc). Il intègre des solutions FTP, SQL (avec PDO), commandes systèmes et les règles de programmation de base (if, …). Pour vous donner une petite idée des performances de Phing, j’ai dû créer aujourd’hui un script permettant la création d’un SVN repository avec, la création sur le serveur ftp du dossier du projet (pour le site web) et pour finir à créer l’utilisateur et la base de données rattachée sur un autre serveur MySQL.

Je pense que j’aurais pu faire l’équivalent en scripts bash sur mon serveur Ubuntu mais on m’a demandé de l’effectuer avec ce langage. Des améliorations de ce script m’ont été demandées donc je vais bien voir ce qu’il est vraiment possible.

Voici justement un petit aperçu de script Phing (fournit dans le quickstart de la documentation).

<?xml version="1.0" encoding="UTF-8"?>
<project name="FooBar" default="dist">
    <!-- ============================================  -->   
    <!-- Target: prepare                               -->
    <!-- ============================================  -->
    <target name="prepare">
        <echo msg="Making directory ./build" />
        <mkdir dir="./build" />
    </target>



    <!-- ============================================  -->
    <!-- Target: build                                 -->
    <!-- ============================================  -->
    <target name="build" depends="prepare">
        <echo msg="Copying files to build directory..." />
        <echo msg="Copying ./about.php to ./build directory..." />
        <copy file="./about.php" tofile="./build/about.php" />
        <echo msg="Copying ./browsers.php to ./build directory..." />
        <copy file="./browsers.php" tofile="./build/browsers.php" />
        <echo msg="Copying ./contact.php to ./build directory..." />
        <copy file="./contact.php" tofile="./build/contact.php" />
    </target>



    <!-- ============================================  -->
    <!-- (DEFAULT)  Target: dist                       --> 
    <!-- ============================================  -->
    <target name="dist" depends="build">
        <echo msg="Creating archive..." />
        <tar destfile="./build/build.tar.gz" compression="gzip">
            <fileset dir="./build">
                <include name="*" />
            </fileset>
        </tar>
        <echo msg="Files copied and compressed in build directory OK!" />
    </target>
</project>

Et pour plus d’infos, je vous invite à aller sur leur site.