Visualisez la hiérarchie de vos inclusions PHP avec « Inclued »
L’extension PECL « Inclued » permet de tracer et d’enregistrer sous forme hiérarchique, l’ensemble des inclusions de fichiers durant l’exécution d’un script PHP.
Prenons pour exemple le monstrueux WordPress, voici ce que l’on peut obtenir :
Mis à part le fait que ce genre de graphe est toujours sympa à voir, il permet de se faire une idée sur la qualité d’un code :
- Pourquoi ce fichier est inclut alors qu’il n’est pas utilisé ?
- Pourquoi ce fichier est inclut ici plutôt que là ?
- Pourquoi ce fichier n’est pas inclus en utilisant les primitives *_once ?
- Pourquoi les inclusions proviennent uniquement de ce fichier ?
- etc.
Passons au vif du sujet ! Pour commencer nous allons installer les paquets nécessaires pour la suite des opérations :
- php5-dev et make pour la compilation de l’extension
- php5-cli et graphviz pour la génération des images
root@gnusquad:~# aptitude install php5-dev php5-cli make graphviz
Une fois ces paquets installés, téléchargeons l’extension « Inclued » et décompressons la d’un trait :
root@gnusquad:~# wget -q -O - http://pecl.php.net/get/inclued | tar zx
Compilons cette dernière :
root@gnusquad:~# cd inclued-0.1.0 root@gnusquad:~/inclued-0.1.0# phpize root@gnusquad:~/inclued-0.1.0# ./configure root@gnusquad:~/inclued-0.1.0# make
L’étape qui suit consiste à indiquer à PHP de charger cette nouvelle extension :
root@gnusquad:~/inclued-0.1.0# cp modules/inclued.so /usr/lib/php5/20060613+lfs root@gnusquad:~/inclued-0.1.0# vi /etc/php5/conf.d/inclued.ini extension=inclued.so inclued.enabled=on inclued.dumpdir=/tmp
On peut dès lors redémarrer le serveur web, Apache en l’occurence, sachant que désormais, chaque accès à un fichier PHP (via le web ou en CLI) générera un fichier dans le répertoire /tmp donc méfiance !
root@gnusquad:~/inclued-0.1.0# /etc/init.d/apache2 restart
Sachez qu’il est également possible d’activer l’extension au niveau du serveur web en utilisant les directives php_admin_flag et php_admin_value ce qui permet de limiter l’extension à un vhost par exemple. Malheureusement, et contrairement à ce qui est indiqué sur le site PHP, il n’est pas possible d’utiliser ces directives dans un fichier .htaccess.
Les fichiers générés n’étant pas directement des images, il faut les convertir à l’aide d’un script fourni avec l’extension que nous enroberons de notre propre script afin de nous faciliter la vie :
root@gnusquad:~/inclued-0.1.0# cp gengraph.php /usr/local/bin root@gnusquad:~/inclued-0.1.0# cd $_ root@gnusquad:/usr/local/bin# vi gengraph #!/bin/bash echo "Generating file $1.png" exec >/dev/null php -d "inclued.enabled=Off" $(dirname $0)/gengraph.php -i $1 -o $1.dot dot -Tpng -o $1.png $1.dot rm $1 rm $1.dot root@gnusquad:/usr/local/bin# chmod +x $_
Voilà, le plus dur est fait, il ne vous reste plus qu’à aller sur une page web PHP et à générer l’image :
root@gnusquad:/usr/local/bin# cd /tmp root@gnusquad:/tmp# ls inclued.00688.1 root@gnusquad:/tmp# gengraph inclued.00688.1 root@gnusquad:/tmp# ls inclued.00688.1.png
À lire :
Mise à jour du 05 mai 2009 : pour effectuer la compilation encore plus simplement, il suffit de taper « pecl install channel://pecl.php.net/inclued-0.1.0 » et le tour est joué !