<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GNU Squad &#187; PHP</title>
	<atom:link href="http://blog.gnusquad.org/category/developpement/langages/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gnusquad.org</link>
	<description>Freedom computers</description>
	<lastBuildDate>Tue, 15 Jun 2010 06:04:14 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Visualisez la hiérarchie de vos inclusions PHP avec « Inclued »</title>
		<link>http://blog.gnusquad.org/2009/03/06/visualisez-la-hierarchie-de-vos-inclusions-php-avec-inclued/</link>
		<comments>http://blog.gnusquad.org/2009/03/06/visualisez-la-hierarchie-de-vos-inclusions-php-avec-inclued/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 19:58:14 +0000</pubDate>
		<dc:creator>Sylvain</dc:creator>
				<category><![CDATA[Debian GNU/Linux]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Langages]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Planet Libre]]></category>

		<guid isPermaLink="false">http://blog.gnusquad.org/?p=152</guid>
		<description><![CDATA[L&#8217;extension PECL « Inclued » permet de tracer et d&#8217;enregistrer sous forme hiérarchique, l&#8217;ensemble des inclusions de fichiers durant l&#8217;exécution d&#8217;un script PHP.
Prenons pour exemple le monstrueux WordPress, voici ce que l&#8217;on peut obtenir :

Mis à part le fait que ce genre de graphe est toujours sympa à voir, il permet de se faire une [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;extension <abbr title="PHP Extension Community Library">PECL</abbr> « <em>Inclued</em> » permet de tracer et d&#8217;enregistrer sous forme hiérarchique, l&#8217;ensemble des inclusions de fichiers durant l&#8217;exécution d&#8217;un script PHP.</p>
<p>Prenons pour exemple le monstrueux WordPress, voici ce que l&#8217;on peut obtenir :</p>
<p><a href="http://img527.imageshack.us/img527/4869/inclued185541.png"><img src="http://blog.gnusquad.org/wp-content/uploads/2009/03/wordpress-inclued-tiny1.png" alt="WordPress Inclued" title="WordPress Inclued" width="218" height="160" class="alignnone size-full wp-image-177" /></a></p>
<p>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&#8217;un code :</p>
<ul>
<li>Pourquoi ce fichier est inclut alors qu&#8217;il n&#8217;est pas utilisé ?</li>
<li>Pourquoi ce fichier est inclut ici plutôt que là ?</li>
<li>Pourquoi ce fichier n&#8217;est pas inclus en utilisant les primitives *_once ?</li>
<li>Pourquoi les inclusions proviennent uniquement de ce fichier ?</li>
<li>etc.</li>
</ul>
<p>Passons au vif du sujet ! Pour commencer nous allons installer les paquets nécessaires pour la suite des opérations :</p>
<ul>
<li><em>php5-dev</em> et <em>make</em> pour la compilation de l&#8217;extension</li>
<li><em>php5-cli</em> et <em>graphviz</em> pour la génération des images</li>
</ul>
<pre>
<strong>root@gnusquad</strong>:~# aptitude install php5-dev php5-cli make graphviz
</pre>
<p>Une fois ces paquets installés, téléchargeons l&#8217;extension « <em>Inclued</em> » et décompressons la d&#8217;un trait :</p>
<pre>
<strong>root@gnusquad</strong>:~# wget -q -O - http://pecl.php.net/get/inclued | tar zx
</pre>
<p>Compilons cette dernière :</p>
<pre>
<strong>root@gnusquad</strong>:~# cd inclued-0.1.0
<strong>root@gnusquad</strong>:~/inclued-0.1.0# phpize
<strong>root@gnusquad</strong>:~/inclued-0.1.0# ./configure
<strong>root@gnusquad</strong>:~/inclued-0.1.0# make
</pre>
<p>L&#8217;étape qui suit consiste à indiquer à PHP de charger cette nouvelle extension :</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cp modules/inclued.so /usr/lib/php5/20060613+lfs
<strong>root@gnusquad</strong>:~/inclued-0.1.0# vi /etc/php5/conf.d/inclued.ini

extension=inclued.so
inclued.enabled=on
inclued.dumpdir=/tmp
</pre>
<p>On peut dès lors redémarrer le serveur web, <em>Apache</em> en l&#8217;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 <em>/tmp</em> donc méfiance !</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# /etc/init.d/apache2 restart
</pre>
<p>Sachez qu&#8217;il est également possible d&#8217;activer l&#8217;extension au niveau du serveur web en utilisant les directives <em>php_admin_flag</em> et <em>php_admin_value</em> ce qui permet de limiter l&#8217;extension à un vhost par exemple. Malheureusement, et contrairement à ce qui est indiqué sur le site PHP, il n&#8217;est pas possible d&#8217;utiliser ces directives dans un fichier <em>.htaccess</em>.</p>
<p>Les fichiers générés n&#8217;étant pas directement des images, il faut les convertir à l&#8217;aide d&#8217;un script fourni avec l&#8217;extension que nous enroberons de notre propre script afin de nous faciliter la vie :</p>
<pre>
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cp gengraph.php /usr/local/bin
<strong>root@gnusquad</strong>:~/inclued-0.1.0# cd $_
<strong>root@gnusquad</strong>:/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

<strong>root@gnusquad</strong>:/usr/local/bin# chmod +x $_
</pre>
<p>Voilà, le plus dur est fait, il ne vous reste plus qu&#8217;à aller sur une page web PHP et à générer l&#8217;image :</p>
<pre>
<strong>root@gnusquad</strong>:/usr/local/bin# cd /tmp
<strong>root@gnusquad</strong>:/tmp# ls
inclued.00688.1
<strong>root@gnusquad</strong>:/tmp# gengraph inclued.00688.1
<strong>root@gnusquad</strong>:/tmp# ls
inclued.00688.1.png
</pre>
<p>À lire :</p>
<ul>
<li><a href="http://fr.php.net/manual/en/book.inclued.php">Documentation PHP sur Inclued</a></li>
<li><a href="http://pecl.php.net/package/inclued">Package Inclued sur la PECL</a></li>
</ul>
<p>Mise à jour du 05 mai 2009 : pour effectuer la compilation encore plus simplement, il suffit de taper « <em>pecl install channel://pecl.php.net/inclued-0.1.0</em> » et le tour est joué ! <img src='http://blog.gnusquad.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-152"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gnusquad.org/2009/03/06/visualisez-la-hierarchie-de-vos-inclusions-php-avec-inclued/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
