<?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>e-Maxime &#187; PHP</title>
	<atom:link href="http://www.maximegarcia.fr/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maximegarcia.fr/blog</link>
	<description>Un autre entrepreneur du Web</description>
	<lastBuildDate>Sat, 26 Mar 2011 18:16:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Optimiser ses CSS côté serveur automatiquement</title>
		<link>http://www.maximegarcia.fr/blog/2010/08/optimiser-ses-css-cote-serveur-automatiquement/</link>
		<comments>http://www.maximegarcia.fr/blog/2010/08/optimiser-ses-css-cote-serveur-automatiquement/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 21:54:58 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=218</guid>
		<description><![CDATA[Optimiser la vitesse de chargement de ses pages Web, ça en devient presque à la mode, surtout depuis le pavé dans la marre jeté par Google. Voici de quoi remuer tout ça, et augmenter nos scores Yslow ou Page Speed &#8230; <a href="http://www.maximegarcia.fr/blog/2010/08/optimiser-ses-css-cote-serveur-automatiquement/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Optimiser la vitesse de chargement de ses pages Web, ça en devient <a href="http://autourduncafe.fr/2010/08/10/les-sites-high-tech-sont-ils-optimises/" target="_blank">presque à la mode</a>, surtout depuis le <a href="http://www.keeg.fr/2010/04/15/google-tient-compte-de-la-vitesse-pour-le-referencement/" target="_blank">pavé dans la marre jeté par Google</a>.</p>
<p>Voici de quoi remuer tout ça, et augmenter nos scores Yslow ou Page Speed (et nous aimons ça). On va chasser les octets superflus, on va s&#8217;attaquer aux CSS.</p>
<p><span id="more-218"></span></p>
<p>Et l&#8217;occasion qui fait le larron, c&#8217;est la sortie de <a href="http://libre.maxbusiness.fr/cssmin/" target="_blank">MAX CssMin</a>, un optimiseur CSS écrit en PHP que je viens de releaser en GNU GPL. Une sortie du placard car cela fait un petit moment que je l&#8217;utilise pour différents projets. Il ne touche pas à la sémantique, que de <a href="http://libre.maxbusiness.fr/cssmin/fonctionnement.html" target="_blank">l&#8217;amélioration de syntaxe</a>. Pour l&#8217;instant, c&#8217;est le meilleur que j&#8217;ai pu essayé. Bon, à la fin, c&#8217;est la guerre des octets, que des micros optimisations, mais j&#8217;en ai encore quelques unes en réserves. La version 0.2 verra une option pour tout mettre sur une seule ligne. Pour l&#8217;instant ça le fait pas encore (vous pouvez en éditant le fichier cssmin et en décommentant la ligne en dessous du commentaire &laquo;&nbsp;Efface les retours à la ligne (à désactiver par défaut)&nbsp;&raquo;).</p>
<p>On va se faire un petit script à placer sur le serveur, lancé par cron chaque nuit qui va optimiser vos fichiers CSS, tout seul.</p>
<p><img class="aligncenter size-full wp-image-234" title="Compte tour" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2010/08/587661_compteur.jpg" alt="" width="400" height="300" /></p>
<p>Aller, on se ssh à son serveur.</p>
<p>Les prérequis (rien de bien extraordinaire, adaptez la commande à votre système de paquet) :</p>
<pre>aptitude install php5-cli unzip</pre>
<p>On commence par installer le MAX CssMin en version script (CLI). Copiez-collez ceci (après avoir lu et compris) dans votre terminal :</p>
<pre>wget http://libre.maxbusiness.fr/files/cssmin/cssmin-0.1.zip
wget http://libre.maxbusiness.fr/files/cssmin/cssmin-0.1.zip.md5
md5sum -c cssmin-0.1.zip.md5
unzip cssmin-0.1.zip
chmod +x cssmin
mv cssmin /usr/local/bin
cssmin --help</pre>
<p>Bonus, ça vérifie même la somme md5 de l&#8217;archive. C&#8217;est installé. Tapez <kbd>cssmin --help</kbd> pour les options courantes.</p>
<p>On va créer un script shell, nommons le css.sh qui va contenir les commandes de minification. C&#8217;est lui qui sera appelé par la tâche cron toutes les nuits. Créons le. Voici son contenu :</p>
<pre>#!/bin/sh
cssmin -rbq /var/www/monsite/css/style.css
cssmin -rbq /var/www/monsite2/css/style2.css</pre>
<p>Explications : -q vous passe en mode quiet (pas de blabla sauf si erreurs), -r c&#8217;est le mode replace (on écrase le fichier CSS par sa version minifiée) et -b c&#8217;est le mode better (on ne fait les changements que si le résultat est meilleur). En l&#8217;occurrence, le mode better vous permettra de ne pas avoir la date de modification du fichier mise à jour chaque nuit (apache s&#8217;en sert pour les instructions de cache aux navigateurs).</p>
<p>Vous placer une ligne comme ça par fichier à optimiser. Je vous conseille d&#8217;essayer en console avant (sans l&#8217;option -q).</p>
<p>On rend ce script exécutable :</p>
<pre>chmod +x css.sh</pre>
<p>Maintenant, on enregistre une tâche cron, réglée pour être lancée pour tous les jours à 03:05. Tapez <kbd>crontab -e</kbd> et ajoutez dont une ligne :</p>
<pre>5 3 * * * /home/mon/chemin/vers/mon/script/css.sh</pre>
<p>Et voilà. Vos fichiers CSS se ré-optimiseront tout seuls, même après vos uploads de nouvelles versions, non optimisées.</p>
<p><a href="http://libre.maxbusiness.fr/cssmin/" target="_blank">MAX CssMin</a> n&#8217;en est qu&#8217;à ses débuts publics, mais on peut déjà faire des choses intéressantes avec. Un bonus pour la fin :</p>
<pre>cat style-1.css style-2.css style-3.css | cssmin &gt; all-min.css</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2010/08/optimiser-ses-css-cote-serveur-automatiquement/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Pi Day : calculer Pi en PHP avec rand()</title>
		<link>http://www.maximegarcia.fr/blog/2010/03/pi-day-calculer-pi-avec-rand/</link>
		<comments>http://www.maximegarcia.fr/blog/2010/03/pi-day-calculer-pi-avec-rand/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 14:42:39 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=186</guid>
		<description><![CDATA[Aujourd&#8217;hui, c&#8217;est le 14 mars. Noté à l&#8217;anglaise, on est le 3/14 et, tenez-vous bien, ça fait le nombre Pi à deux décimales. Vous allez me dire &#171;&#160;il est un peu siphonné lui !&#160;&#187;, mais pour ma défense, quand on &#8230; <a href="http://www.maximegarcia.fr/blog/2010/03/pi-day-calculer-pi-avec-rand/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui, c&#8217;est le 14 mars. Noté à l&#8217;anglaise, on est le 3/14 et, tenez-vous bien, ça fait le nombre Pi à deux décimales. Vous allez me dire &laquo;&nbsp;il est un peu siphonné lui !&nbsp;&raquo;, mais pour ma défense, quand on a fait des mathématiques et de la physique à un niveau un peu poussé, on aime Pi ! Je l&#8217;ai jamais fêté pourtant.</p>
<p>Donc pour cette occasion un peu spéciale, je vais vous présenter une méthode un peu inattendue pour calculer Pi. On va utiliser la fonction rand().</p>
<p><span id="more-186"></span></p>
<p>On va utiliser le hasard et les probabilités. Fuyez pas, vous allez voir, c&#8217;est sympa. C&#8217;est la méthode de Monte-Carlo (vous savez, ses casinos, ses jeux de hasard&#8230;).</p>
<p>Regardons cette figure présentant un quart de disque de rayon 1 :</p>
<p style="text-align: center;"><img class="aligncenter size-full" title="pi-montecarlo" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2010/03/pi-montecarlo.png" alt="Détermination de Pi par la méthode de Monte Carlo" width="300" height="300" /></p>
<p>L&#8217;aire de ce quart de disque est de Pi / 4 et l&#8217;aire totale du carré est de 1.</p>
<p>Le principe est simple : on va tirer des points au hasard. La probabilité (notons la P) que chaque point soit dans ce quart de cercle est donc de P=Pi/4. Et cette probabilité, on va la calculer en faisant un tirage de N points. Il y en aura disons X qui tomberont dans le quart de cercle. On divise X par N et on a notre probabilité P.</p>
<p>Finalement, on a P=Pi/4 et P=X/N donc Pi/4=X/N d&#8217;où <strong>Pi=4*X/N</strong>.</p>
<p>On tire alors un point au hasard. On va utiliser la fonction <em>rand</em> (ou <em>mt_rand</em>, plus rapide et meilleure au niveau distribution aléatoire) pour déterminer ses coordonnées X et Y. Et s&#8217;il vérifie X²+Y² &lt; 1 alors il est dans le quart de cercle. On répète ça un paquet de fois et le tour est joué.</p>
<p>Voyons comment on code ça en PHP. J&#8217;ai optimisé un peu la chose en ne ramenant pas les coordonnées dans [0,1]² ce qui évite des divisions. Le code :</p>
<pre>&lt;?php
$totalDotNumber = 100001;

$inCircleDotNumber = 0;
$maxRand = mt_getrandmax();
$maxRand_pow2 = pow($maxRand, 2);

for ($i=0; $i&lt;$totalDotNumber; $i++) {
&nbsp;&nbsp;&nbsp;&nbsp;if ( (pow(mt_rand(), 2)+pow(mt_rand(), 2) ) &lt; $maxRand_pow2) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inCircleDotNumber++;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

$frequency = $inCircleDotNumber / $totalDotNumber;
$pi = $frequency*4;

echo 'Points tirés : '.$totalDotNumber."\n";
echo 'dont dans le cercle : '.$inCircleDotNumber."\n";
echo 'Fréquence : '.$frequency.' (=Pi/4)'."\n";
echo 'd\'où : Pi = '.$pi."\n";
?&gt;</pre>
<p>On tire 500&nbsp;000&nbsp;points, ça prend 5 secondes et on obtient par exemple Pi=3,14436971126. Bon la précision n&#8217;est pas fameuse, mais on a bien (heu souvent&#8230;) 3,14 et des poussières.</p>
<p>On va s&#8217;arrêter là avec Pi, on va pas chercher à améliorer la chose, c&#8217;était juste pour le principe. La <a title="Méthode de Monte-Carlo" href="http://fr.wikipedia.org/wiki/M%C3%A9thode_de_Monte-Carlo" target="_blank">méthode de Monte-Carlo</a> permet de calculer des intégrales de dimensions supérieure à 1 (avec 2 on a des aires, 3 des volumes, 4 c&#8217;est pour Albert Einstein dont c&#8217;est l&#8217;anniversaire aujourd&#8217;hui&#8230;).</p>
<p>Moi, ça m&#8217;épate. Pas vous ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2010/03/pi-day-calculer-pi-avec-rand/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HipHop, compilateur PHP et bottleneck PHP</title>
		<link>http://www.maximegarcia.fr/blog/2010/02/hiphop-compilateur-php-et-bottleneck-php/</link>
		<comments>http://www.maximegarcia.fr/blog/2010/02/hiphop-compilateur-php-et-bottleneck-php/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 11:43:49 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Je réagis]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Compilateur]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=168</guid>
		<description><![CDATA[Les développeurs de Facebook ont mis au point HipHop for PHP. Pas si loin du compilateur PHP tel que Roadsand ou phc, HipHop réalise une traduction du code source PHP en C++ et se charge de le compiler en embarquant &#8230; <a href="http://www.maximegarcia.fr/blog/2010/02/hiphop-compilateur-php-et-bottleneck-php/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-277" title="Des éléPHPants" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2010/02/elephpant-groupe.head_.jpg" alt="" width="640" height="200" /></p>
<p>Les développeurs de Facebook ont mis au point <strong>HipHop for PHP</strong>. Pas si loin du compilateur PHP tel que <a href="http://www.roadsend.com/home/index.php?pageID=compiler" target="_blank">Roadsand</a> ou <a href="http://www.phpcompiler.org/" target="_blank">phc</a>, <a href="http://developers.facebook.com/hiphop-php/" target="_blank">HipHop</a> réalise une traduction du code source PHP en C++ et se charge de le compiler en embarquant un serveur HTTP léger.</p>
<p>Alors on entend tout et rien à son sujet, alors mettons quelques éléments de compréhension sur la table.</p>
<p><span id="more-168"></span></p>
<p>Optimiser son application / son site est un domaine en soi. On peut mettre en cache les résultats des appels aux bases de données (via la base elle-même ou un autre moyen), mettre en cache des parties ou des pages entières générées&#8230; <a href="http://memcached.org/" target="_blank">Memcached</a> sera votre ami dans bien des cas. Je ne parle même pas d&#8217;une utilisation optimale de plusieurs serveurs HTTP (un pour les données statiques, un autre pour les scripts).</p>
<p>Enfin bref, on arrive vite à une limite, un appel où tout est en cache. Et quand on veut améliorer les performances, il faut se tourner du côté de PHP.</p>
<p>Il est déjà important de savoir comment fonctionne PHP. Quand on appelle un script, il est parsé, puis traduit en opcode lequel opcode est ensuite lancé dans une machine virtuelle qui fera le reste du boulot (traduction en instructions CPU et exécution). Ceci à chaque fois.</p>
<p>On peut évidemment optimiser un peu ça. Il y a principalement les <a href="http://en.wikipedia.org/wiki/List_of_PHP_accelerators" target="_blank">caches d&#8217;opcode</a> (APC, eAccelerator&#8230;). Mais on arrive vite à une autre limite, la machine virtuelle prendra bien un opcode caché, mais elle refera éternellement le même boulot.</p>
<p>L&#8217;idée est alors de compiler le PHP. Passons sur phc qui semble inactif.</p>
<p>On a d&#8217;un côté Roadsand, qui proposent une autre implémentation de PHP et qui vont effectivement traduire votre script en instructions binaires pour le CPU (bref compiler). Et de l&#8217;autre on a HipHop qui va traduire votre script PHP en C++, puis le compiler. Pourquoi j&#8217;ai séparé les deux ? Ils arrivent au même résultat. Mais par des moyens différents. On a un binaire. Selon les possibilités, il intègre son serveur HTTP, ou bien il dialogue via <a href="http://www.fastcgi.com" target="_blank">FastCGI</a> avec un serveur HTTP.</p>
<p>Roadsend permet du runtime eval (eval, include), HipHop non et le sacrifie fièrement. On va pas rentrer dans les détails inutiles ici.</p>
<p>Je passe aussi l&#8217;optimisation au sens propre du code : profilage, blablabla et tout et tout. Ça se fait très bien et permet de voir des défauts d&#8217;architecture.</p>
<p>Bref, voyons ce qui nous a amené ici : l&#8217;optimisation, compiler PHP et les diverses conneries entendues. Ne retenons qu&#8217;une seule chose entendue, qui n&#8217;est pas foncièrement une connerie et qui mérite nuance et explication. Les conneries, elles, elles resteront.</p>
<p>Lu chez <a href="http://maxime.sh/2010/02/hiphop-lhistoire-dun-mal-necessaire/" target="_blank">Maxime Valette</a> :</p>
<blockquote><p>Avant d’en arriver au stade d’avoir besoin de compiler du PHP transformé en C++, il faudrait déjà penser à s’affranchir de son framework qui ne peut que ralentir l’exécution de son site.</p></blockquote>
<p>Bon, un framework, pourquoi ? Si Yahoo a choisi <a href="http://www.symfony-project.org/" target="_blank">Symfony</a>, c&#8217;est pour une bonne raison : le développement. Ils savaient très bien que c&#8217;est une surcharge de PHP. Mais un développement en équipe, agile, reposant sur des briques découplables, testable est plus qu&#8217;un confort. C&#8217;est générique. mais c&#8217;est un gain d&#8217;argent. Un développeur coûte cher. Les serveurs, c&#8217;est pas cher. Seule la bande passante est chère. (comparativement)</p>
<p>Il y a des cas où le service est relativement simple, avec une évolution limitée des fonctionnalités. Dans ce cas, oui, faites sans framework. Il ne sert à rien de sortir le marteau pilon pour écraser la mouche. Vous pouvez, mais ne râlez pas à propos de performance sur la lourdeur du framework. Vous avez fait un choix, celui de penser aux capacités de développement avant tout. Si vous voulez, vous pouvez créer votre propre framework, adapté à votre utilisation, pour combiner le meilleur des deux. Mais quand vous aurez tout optimisé, système de cache et tout et tout, alors PHP sera votre facteur limitant, du fait de votre framework. The bottleneck.</p>
<p>Bon, c&#8217;est assez tranché, mais tout ça pour vous dire que le PHP peut devenir le facteur limitant. Parce que déjà, si quelque chose est en cache, il faut bien à un moment ou à un autre l&#8217;y mettre. Et puis quand tout sort de cache, il y a quand même du code qui s&#8217;exécute.</p>
<p>Pas convaincu ? Essayez de générer un fichier PDF à l&#8217;aide de FPDF. Pas le truc de Mickey, un gros PDF, pleins de pages. Par exemple, 5000 bons de commandes en un seul PDF. Vous allez le sentir le bottleneck, vous allez sentir du PHP pur qui tourne. Récupérer les infos de la base de donnée c&#8217;est du gâteau à côté (c&#8217;est peut-être même déjà en cache ?). Les appels d&#8217;appels de re-appels de fonctions, de méthodes, d&#8217;objets&#8230; c&#8217;est élégant, mais ça a un coût.</p>
<p>Donc, compiler PHP peut-être une porte à ouvrir, si on veut gagner en terme de performance. Facebook en était là. Et c&#8217;est tant mieux, ça complète la voie.</p>
<p><em>Crédit photo : <a href="http://www.flickr.com/photos/dragonbe/3411273755/" target="_blank">DragonBe</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2010/02/hiphop-compilateur-php-et-bottleneck-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Et BOM ! Dans ta face.</title>
		<link>http://www.maximegarcia.fr/blog/2010/01/et-bom-dans-ta-face/</link>
		<comments>http://www.maximegarcia.fr/blog/2010/01/et-bom-dans-ta-face/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 17:36:23 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=141</guid>
		<description><![CDATA[Alors que j&#8217;aidais un peu Robix à refondre le site de locations à Tignes de sa belle maman (réécriture d&#8217;URL, i18n&#8230;), on est tombé sur un os. Un vrai, un dur. Un put&#8230;n d&#8217;espace apparaissait dans nos navigateurs (firefox windows &#8230; <a href="http://www.maximegarcia.fr/blog/2010/01/et-bom-dans-ta-face/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Alors que j&#8217;aidais un peu <a href="http://www.robix-elayce-australia.com/" target="_self">Robix</a> à refondre le site de <a title="Location Tignes" href="http://www.location-vente-tignes.fr" target="_blank">locations à Tignes</a> de sa belle maman (réécriture d&#8217;URL, i18n&#8230;), on est tombé sur un os. Un vrai, un dur. Un put&#8230;n d&#8217;espace apparaissait dans nos navigateurs (firefox windows et linux, ie8&#8230;). Ce n&#8217;était ni un margin, ni un padding&#8230; Et pile à des endroits où il y avait des inclusions en PHP, mais c&#8217;était pas systématique. Comment perdre deux heures de notre vie, qu&#8217;on ne rattrapera jamais plus !<span id="more-141"></span></p>
<p>Cela venait d&#8217;un caractère UTF8 appelé le <strong>BOM</strong> (<strong>Byte Order Mark</strong> &#8211; <strong>U+FEFF</strong>) qui est censé donné l&#8217;ordre de lecture des données. Sauf qu&#8217;en UTF8, il n&#8217;y a qu&#8217;un sens, donc ce BOM ne sert à rien. Du coup, je sais même pas pourquoi il existe. Ils se trouvent au tout début de fichier.</p>
<p>Si ce n&#8217;était que cela, ça irait. Mais voilà, PHP les envoie et les navigateurs les affichent ces cons de BOM. Cela pose donc deux problèmes : un possible envoi de header prématuré avec PHP (génant) et ce fameux espace à la noix dont on a mis 2h à trouver d&#8217;où il sortait.</p>
<p>Les symptômes :</p>
<ul>
<li>Erreur PHP &laquo;&nbsp;headers already sent&nbsp;&raquo; alors que vous avez apparemment rien envoyé au navigateur ;</li>
<li>Vous avez l&#8217;encodage UTF8 de détecté : l&#8217;espace blanc à la c..n (si votre fond est blanc, sinon ça peut être un espace bleu&#8230;);</li>
<li>Vous forcez l&#8217;encodage du navigateur en ISO-8859-1 : <strong>ï»¿</strong> apparait à la place de l&#8217;espace blanc ;</li>
</ul>
<p>Pour résoudre ça, si vous avez l&#8217;option (idiote soit dit en passant) de pouvoir enregistrer en UTF8 avec ou sans BOM dans votre éditeur favori, vous choisirez la version sans BOM.</p>
<p>Sinon, vous sortez votre éditeur héxadécimal et la séquence à éradiquer est <strong>EFBBBF</strong>. En général il se trouve au tout début du fichier. Mais attention, ce caractère de 3 octets est vil et mesquin, avec des copiés-collés, il peut se multiplier et se retrouver pas qu&#8217;au début. (Sous VIM il apparait en tant que <strong>&lt;FEFF&gt;</strong> mais uniquement s&#8217;il n&#8217;est pas au début, s&#8217;il l&#8217;est, on le voit pas).</p>
<p>Il aura fallu que je rapatrie des fichiers PHP UTF8 de Windows pour voir arriver ce genre de merdouille. Robix, Linux, c&#8217;est pour quand ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2010/01/et-bom-dans-ta-face/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PHP : Accès aux variables non déclarées</title>
		<link>http://www.maximegarcia.fr/blog/2009/10/php-acces-aux-variables-non-declarees/</link>
		<comments>http://www.maximegarcia.fr/blog/2009/10/php-acces-aux-variables-non-declarees/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 13:00:48 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=127</guid>
		<description><![CDATA[Quand on accède à des variables non déclarées, cela a un coût en terme de performance. En effet, PHP tente de la trouver, constate qu&#8217;il n&#8217;y arrive pas et lève une erreur de type E_WARNING, et ce même si vous &#8230; <a href="http://www.maximegarcia.fr/blog/2009/10/php-acces-aux-variables-non-declarees/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-277" title="Des éléPHPants" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2010/02/elephpant-groupe.head_.jpg" alt="" width="640" height="200" /></p>
<p>Quand on accède à des variables non déclarées, cela a un coût en terme de performance. En effet, PHP tente de la trouver, constate qu&#8217;il n&#8217;y arrive pas et lève une erreur de type E_WARNING, et ce même si vous ne les affichez pas. Démonstration.</p>
<p><span id="more-127"></span></p>
<p>Exécutons 100 000 fois le code de référence, la variable $variable n&#8217;étant pas déclarée :</p>
<pre>if ($variable=='test')
  { }</pre>
<p>Cela prend en moyenne 180ms.</p>
<p>Voyons le code, amélioré :</p>
<pre>if (isset($variable) &amp;&amp; $variable=='test')
  { }</pre>
<p>100 000 exécutions prennent alors en moyenne 42ms, soit une amélioration de 75% en terme de rapidité d&#8217;exécution.</p>
<p>Ce test donne les même résultats que ce soit une variable ($test), un élément de tableau ($test['test']) ou autre.</p>
<p>PHP est souple au niveau des variables (déclaration, typage), l&#8217;avantage en terme de programmation a un coût en terme de performances.</p>
<p>Si vous voulez améliorer celles de votre app, laissez s&#8217;afficher les erreurs E_WARNING : en effet ce n&#8217;est pas parce qu&#8217;elles ne sont pas affichées par votre configuration de PHP qu&#8217;elles ne sont pas présentes. PHP lèvent ces erreurs quoiqu&#8217;il arrive, donc mieux vaut les voir et les éradiquer.</p>
<p>Déclarez explicitement vos variables, ou testez en premier leur existance via isset() avant d&#8217;y accéder.</p>
<p><em>Crédit photo : <a href="http://www.flickr.com/photos/dragonbe/3411273755/" target="_blank">DragonBe</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2009/10/php-acces-aux-variables-non-declarees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mon éléphant PHP</title>
		<link>http://www.maximegarcia.fr/blog/2009/04/mon-elephant-php/</link>
		<comments>http://www.maximegarcia.fr/blog/2009/04/mon-elephant-php/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 18:28:14 +0000</pubDate>
		<dc:creator>Maxime Garcia</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.maximegarcia.fr/blog/?p=83</guid>
		<description><![CDATA[Je développe en PHP. Il me fallait un assistant, un connaisseur, un pro du PHP, quelqu&#8217;un à qui je puisse confier des tâches sensibles. Alors, cet après-midi, de passage à Ikéa, j&#8217;ai recruté. Voici un éléphpant ou un PHP-léphant comme &#8230; <a href="http://www.maximegarcia.fr/blog/2009/04/mon-elephant-php/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Je développe en PHP. Il me fallait un assistant, un connaisseur, un pro du PHP, quelqu&#8217;un à qui je puisse confier des tâches sensibles. Alors, cet après-midi, de passage à Ikéa, j&#8217;ai recruté.</p>
<p><img class="aligncenter size-full wp-image-84" title="PHP éléphant" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2009/04/php-elephant.jpg" alt="PHP éléphant" width="400" height="312" /></p>
<p>Voici un éléphpant ou un PHP-léphant comme je l&#8217;appelle. Version home-made : 0,50€ à Ikéa. Si recruter était aussi simple&#8230;</p>
<p>Et si vous vous demandez quel est le rapport entre PHP et un éléphant :</p>
<ol>
<li>Je ne pourrais pas vous embaucher</li>
<li>Voilà qui devrait satisfaire votre curiosité :</li>
</ol>
<p><img class="aligncenter size-full wp-image-85" title="Le rapport entre PHP et un éléphant ?" src="http://www.maximegarcia.fr/blog/wp-content/uploads/2009/04/php-elephant-pourquoi.jpg" alt="Le rapport entre PHP et un éléphant ?" width="400" height="75" /></p>
<p><em>PHP-léphant, profile moi ce bout de code s&#8217;il te plait. Merci.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maximegarcia.fr/blog/2009/04/mon-elephant-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

