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 :

WordPress Inclued

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é ! :)

Vus : 295
Publié par Sylvain : 20