<?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>Blog de Guillaume Rossolini &#187; PHP</title>
	<atom:link href="https://blog.developpez.com/g-rossolini/pcategory/php/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/g-rossolini</link>
	<description></description>
	<lastBuildDate>Thu, 18 Sep 2008 18:23:23 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Prévisionnel des sessions de la ZendCon&#8217;08</title>
		<link>https://blog.developpez.com/g-rossolini/p6361/php/previsionnel_des_sessions_de_la_zendcon_08</link>
		<comments>https://blog.developpez.com/g-rossolini/p6361/php/previsionnel_des_sessions_de_la_zendcon_08#comments</comments>
		<pubDate>Thu, 11 Sep 2008 11:12:54 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Voici les sessions qui me paraissent intéressantes pour la ZendCon&#8217;08. J&#8217;essaierai d&#8217;assister à un maximum d&#8217;entre elles et de faire un suivi ici autant que possible : http://g-rossolini.developpez.com/reportages/zendcon-2008/schedule.php Bien sûr, certaines sessions se chevauchent&#8230; Cela me donnera des solutions de repli au cas (improbable) où je m&#8217;ennuie dans certaines d&#8217;entre elles ! Attention, les dates affichées dans mon calendrier sont en zone UTC-7, soit 9 heures avant la zone de Paris.]]></description>
				<content:encoded><![CDATA[<p>Voici les sessions qui me paraissent intéressantes pour la ZendCon&rsquo;08. J&rsquo;essaierai d&rsquo;assister à un maximum d&rsquo;entre elles et de faire un suivi ici autant que possible :</p>
<p>http://g-rossolini.developpez.com/reportages/zendcon-2008/schedule.php</p>
<p>Bien sûr, certaines sessions se chevauchent&#8230; Cela me donnera des solutions de repli au cas (improbable) où je m&rsquo;ennuie dans certaines d&rsquo;entre elles !</p>
<p>Attention, les dates affichées dans mon calendrier sont en zone UTC-7, soit 9 heures avant la zone de Paris.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mise à jour du cours sur les formulaires</title>
		<link>https://blog.developpez.com/g-rossolini/p6211/php/mes-articles/mise_a_jour_du_cours_sur_les_formulaires</link>
		<comments>https://blog.developpez.com/g-rossolini/p6211/php/mes-articles/mise_a_jour_du_cours_sur_les_formulaires#comments</comments>
		<pubDate>Sat, 16 Aug 2008 16:29:18 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;ai finalement pris le temps de relire mon tutoriel sur les formulaires HTML avec PHP. J&#8217;y ai corrigé quelques détails, notamment le type de redirection HTTP à utiliser en réponse à une requête POST : il ne faut pas utiliser un code 204 No content mais plutôt un code de redirection. En recevant un code 204, le client (le navigateur) n&#8217;a aucune raison de suivre les indications du serveur. Il n&#8217;y a pas de contenu, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;ai finalement pris le temps de relire mon <a href="http://g-rossolini.developpez.com/tutoriels/php/formulaires/">tutoriel sur les formulaires HTML avec PHP</a>. J&rsquo;y ai corrigé quelques détails, notamment le type de redirection HTTP à utiliser en réponse à une requête POST : il ne faut pas utiliser un code <em>204 No content</em> mais plutôt un code de redirection.</p>
<p>En recevant un code 204, le client (le navigateur) n&rsquo;a aucune raison de suivre les indications du serveur. Il n&rsquo;y a pas de contenu, voilà tout. Utiliser un code 204 peut sembler correct puisqu&rsquo;il n&rsquo;y a effectivement pas de contenu à l&rsquo;adresse demandée, mais les navigateurs qui suivent la RFC à la lettre ne suivront aucune redirection. Or cela casse tout le site&#8230;</p>
<p>En revanche, en utilisant un code de redirection 3xx, le navigateur a plus de chances de suivre la redirection demandée par le serveur. Mais là encore, il ne faut pas utiliser un code 302 comme le fait une partie des développeurs : ce status a changé de signification entre les versions 1.0 et 1.1, et aucune version ne convient pour répondre à une requête POST. Pour faire court, il est préférable d&rsquo;utiliser ce code :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?php <br />
header('HTTP/1.1 303 See other'); <br />
header('Location: http://...');</div></div>
</blockquote>
<p>Pour les détails, rendez-vous sur le blog de Ben Ramsey : http://benramsey.com/archives/http-status-redirection/</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mise à jour du cours PHP</title>
		<link>https://blog.developpez.com/g-rossolini/p6160/php/mes-articles/mise_a_jour_du_cours_php</link>
		<comments>https://blog.developpez.com/g-rossolini/p6160/php/mes-articles/mise_a_jour_du_cours_php#comments</comments>
		<pubDate>Mon, 04 Aug 2008 01:23:13 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[Mes articles]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je viens de rectifier quelques incorrections dans mon cours PHP, dans la section des Services Web. Je n&#8217;abordais pas le sujet de manière adéquate, certaines confusions classiques n&#8217;étaient pas éclaircies. La distinction entre les types de services Web est maintenant plus nette : SOAP/RPC d&#8217;une part, REST de l&#8217;autre. J&#8217;en ai profité pour ajouter des exemples avec les classes internes de PHP : SoapServer et SoapClient]]></description>
				<content:encoded><![CDATA[<p><img src="http://g-rossolini.developpez.com/alveod-mini.png" alt="logo alveod" title="" /></p>
<p>Je viens de rectifier quelques incorrections dans <a href="http://g-rossolini.developpez.com/tutoriels/php/cours/">mon cours PHP</a>, dans la section des Services Web. Je n&rsquo;abordais pas le sujet de manière adéquate, certaines confusions classiques n&rsquo;étaient pas éclaircies.</p>
<p>La distinction entre les types de services Web est maintenant plus nette : SOAP/RPC d&rsquo;une part, REST de l&rsquo;autre.</p>
<p>J&rsquo;en ai profité pour ajouter des exemples avec les classes internes de PHP : SoapServer et SoapClient <img src="https://blog.developpez.com/g-rossolini/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Premier essai de Knol (Google)</title>
		<link>https://blog.developpez.com/g-rossolini/p6122/php/premier_essai_de_knol_google</link>
		<comments>https://blog.developpez.com/g-rossolini/p6122/php/premier_essai_de_knol_google#comments</comments>
		<pubDate>Sat, 26 Jul 2008 15:13:54 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je viens de mettre en ligne mon premier Knol, reste à voir de quelle qualité (longévité) est ce nouvel outil proposé par Google&#8230; L&#8217;article : http://knol.google.com/k/guillaume-rossolini/php/18nubijrdrzl7/2#view]]></description>
				<content:encoded><![CDATA[<p>Je viens de mettre en ligne mon premier Knol, reste à voir de quelle qualité (longévité) est ce nouvel outil proposé par Google&#8230;</p>
<p>L&rsquo;article : http://knol.google.com/k/guillaume-rossolini/php/18nubijrdrzl7/2#view</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZendCon 2008</title>
		<link>https://blog.developpez.com/g-rossolini/p6043/php/zendcon_2008</link>
		<comments>https://blog.developpez.com/g-rossolini/p6043/php/zendcon_2008#comments</comments>
		<pubDate>Wed, 09 Jul 2008 22:25:41 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est confirmé : sauf contre temps, j&#8217;assisterai à la ZendCon 2008 ! J&#8217;essaierai de faire un reportage photo et/ou vidéo Je vais avoir du mal à choisir les sessions&#8230; À bientôt ici-même du 15 au 18 septembre !]]></description>
				<content:encoded><![CDATA[<p><img src="http://g-rossolini.developpez.com/reportages/zendcon-2008/images/logo.jpg" alt="logo zendcon08" title="" /></p>
<p>C&rsquo;est confirmé : sauf contre temps, j&rsquo;assisterai à la ZendCon 2008 ! J&rsquo;essaierai de faire un reportage photo et/ou vidéo <img src="https://blog.developpez.com/g-rossolini/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /><br />
Je vais avoir du mal à choisir les sessions&#8230;</p>
<p>À bientôt ici-même du 15 au 18 septembre !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Le mode Taint pour PHP</title>
		<link>https://blog.developpez.com/g-rossolini/p5977/php/le_mode_taint_pour_php</link>
		<comments>https://blog.developpez.com/g-rossolini/p5977/php/le_mode_taint_pour_php#comments</comments>
		<pubDate>Thu, 26 Jun 2008 22:50:21 +0000</pubDate>
		<dc:creator><![CDATA[Yogui]]></dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Taint est un fork de PHP initialement proposé par Wietse Venema. Le principe est de marquer chaque variable par un masque de bits afin de savoir si elles sont correctement préparées avant d&#8217;être envoyées vers une sortie comme un document HTML, une requête SQL, une expression rationnelle, une commande système&#8230; Vous n&#8217;êtes pas sans savoir que chaque type de sortie a son propre mécanisme de préparation des variables (échappement) : http://php.developpez.com/faq/index.php?page=securite#securite-injection La problématique de Taint [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Taint est un fork de PHP initialement proposé par Wietse Venema.</p>
<p>Le principe est de marquer chaque variable par un masque de bits afin de savoir si elles sont correctement préparées avant d&rsquo;être envoyées vers une sortie comme un document HTML, une requête SQL, une expression rationnelle, une commande système&#8230; Vous n&rsquo;êtes pas sans savoir que chaque type de sortie a son propre mécanisme de préparation des variables (échappement) :</p>
<p>http://php.developpez.com/faq/index.php?page=securite#securite-injection</p>
<p>La problématique de Taint est de déterminer quelles variables sont envoyées vers une sortie avant d&rsquo;avoir été correctement préparées.<br />
<span id="more-1"></span><br />
Si j&rsquo;utilise <strong>echo</strong> ou <strong>print</strong> sur une variable qui n&rsquo;est pas passée par <strong>htmlentities()</strong> ou <strong>htmlspecialchars()</strong>, Taint s&rsquo;en rend compte et m&rsquo;affiche un message :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?php <br />
ini_set(&quot;taint_error_level&quot;, E_WARNING); <br />
$input = $_GET['input']; <br />
echo &quot;You entered: $input\n&quot;;</div></div>
</blockquote>
<blockquote><p>Warning: echo() [function.echo]: Argument contains data that is not converted with htmlspecialchars() or htmlentities() in C:\Web\online\http\tests\taint\basic.php on line 4<br />
You entered: bouh</p></blockquote>
<p>Ainsi, Taint permet de marquer les variables qui ont été préparées pour un affichage particulier. Par exemple, si j&rsquo;utilise <strong>htmlentities()</strong> sur une variable, Taint marque cette variable avec un masque de bits lui permettant de savoir qu&rsquo;elle est prête à être affichée dans une page Web. Si j&rsquo;utilise <strong>echo</strong> ou <strong>print</strong> sur cette variable, tout se passe bien :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?php <br />
ini_set(&quot;taint_error_level&quot;, E_WARNING); <br />
$input = htmlspecialchars($_GET['input'], ENT_QUOTES); <br />
echo &quot;You entered: $input\n&quot;;</div></div>
</blockquote>
<blockquote><p>You entered: bouh</p></blockquote>
<p>De même, Taint m&rsquo;avertit si j&rsquo;utilise une fonction inappropriée pour préparer mes données :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?php <br />
ini_set(&quot;taint_error_level&quot;, E_WARNING); <br />
$input = isset($_GET['input']) ? htmlspecialchars($_GET['input'], ENT_QUOTES) : ''; <br />
mysql_connect('localhost', 'root', ''); <br />
mysql_select_db('developpez'); <br />
mysql_query(&quot;SELECT * FROM rubrique WHERE nom LIKE '%$input%'&quot;);</div></div>
</blockquote>
<blockquote><p>Warning: mysql_query() [function.mysql-query]: Query contains data that is not converted with mysql_real_escape_string() in C:\Web\online\http\tests\taint\basic.php on line 6</p></blockquote>
<p>Taint n&rsquo;est pas une déclinaison de PHP prévue pour les serveurs en production. Elle est résolument orientée vers les développeurs sur leur machine de développment. N&rsquo;oubliez pas d&rsquo;activer le niveau d&rsquo;erreurs Taint dans <strong>php.ini</strong> ainsi que l&rsquo;affichage des erreurs PHP :</p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">error_reporting = E_ALL | E_STRICT <br />
display_errors = On <br />
taint_error_level = E_WARNING</div></div>
</blockquote>
<p>Une dernière chose : Taint est un fork de PHP car il faut apporter de légères modifications à son code source. Ainsi, toutes les fonctions n&rsquo;ont pas encore été réécrites par Mr Venema. Je suis sûr qu&rsquo;il accepterait volontiers de l&rsquo;aide si certains d&rsquo;entre vous ont confiance en leurs compétences en langage C. Je me ferai un plaisir de vous mette en contact <img src="https://blog.developpez.com/g-rossolini/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /><br />
Voici la RFC de Taint contenant la liste à jour des fonctions réécrites : http://wiki.php.net/rfc/taint</p>
<p>NB1 : Certaines extensions ne suivant pas les recommandatsions du PHP Group pour l&rsquo;écriture de leurs fonctions, elles risquent d&rsquo;être plus complexes à &laquo;&nbsp;teinter&nbsp;&raquo;. Ne vous découragez pas pour autant, car je suis sûr que les mainteneurs de ces extensions accepteraient volontiers un patch résolvant ces problèmes&#8230;<br />
NB2 : Les exemples présentés ici activent display_errors, mais le plus pratique est parfois de cacher les erreurs en ayant une console avec <em>tail -f error.log</em> : à vous de voir <img src="https://blog.developpez.com/g-rossolini/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
