<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.lalex.com/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>LAlex devblog v6 - PHP</title>
  <link>http://blog.lalex.com/</link>
  <atom:link href="http://blog.lalex.com/feed/category/PHP/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Fri, 22 Jan 2010 14:58:33 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>PHP 5.1.0 beta : ca promets !</title>
    <link>http://blog.lalex.com/post/2005/06/13/PHP-510-beta-%3A-ca-promets</link>
    <guid isPermaLink="false">urn:md5:7639fd13290c4d77717d84dbba02e773</guid>
    <pubDate>Mon, 13 Jun 2005 09:34:56 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Une première version de &lt;a href=&quot;http://snaps.php.net/&quot;&gt;PHP 5.1.0 beta&lt;/a&gt; vient d'être publiée dans les snapshots. Au programme, des fonctionnalités qui simplifient la vie, et qui sont donc les bienvenues :&lt;ul&gt;&lt;li&gt;L'intégration par défaut de &lt;strong&gt;la librairie PDO&lt;/strong&gt; : en gros, un accés uniformisé à tous types de base de données. Je ne l'ai jamais utilisée, mais ca faisait partie de ce que je voulais utiliser pour un projet à venir, donc bonne nouvelle pour moi ! :p&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Une &lt;strong&gt;amélioration des performances&lt;/strong&gt; grace à un optimisation de la gestion de la mémoire&lt;br /&gt;
&lt;li&gt;La librairie &lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;PCRE 5.0&lt;/span&gt;&lt;/strong&gt;, histoire de s'amuser encore un peu plus avec les expressions régulières (euh... rationnelles : qwix, si tu me lis ! :mrgreen:)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Des améliorations au niveau des &lt;strong&gt;flux&lt;/strong&gt;, des &lt;strong&gt;webservices (SOAP)&lt;/strong&gt; et de &lt;strong&gt;&lt;a href=&quot;http://www.php.net/~helly/php/ext/spl/&quot;&gt;SPL&lt;/a&gt;&lt;/strong&gt; (librairie standard de PHP, fortement inspirée d'une partie de l'API Java)&lt;br /&gt;
&lt;li&gt;Le support natif de l'&lt;strong&gt;Unicode&lt;/strong&gt;, pour les &quot;international coders&quot; ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
Par contre, toujours aucune info sur l'extension PECL &lt;em&gt;php_treads&lt;/em&gt;, qui continue d'apparaître dans les extensions proposées au niveau des snapshots, alors que de nombreux développeurs réclament à corps et à cris une explication sur la présence de ce module... :\ Wait and see. :o&lt;/p&gt;
&lt;p&gt;A noter qu'une branche PHP 4.4 est également ouverte pour une question de compatibilité entre le Zend Engine 1 et les extensions de PHP 4.3...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2005/06/13/PHP-510-beta-%3A-ca-promets#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2005/06/13/PHP-510-beta-%3A-ca-promets#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/268</wfw:commentRss>
      </item>
    
  <item>
    <title>FlashFestival 2005 : le retour...</title>
    <link>http://blog.lalex.com/post/2005/06/01/FlashFestival-2005-%3A-le-retour</link>
    <guid isPermaLink="false">urn:md5:bc7947088120a4ffaca24b91da280c55</guid>
    <pubDate>Wed, 01 Jun 2005 09:22:56 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;J'ai tellement de choses à dire sur ce week-end que je n'en mettrai que peu :&lt;/p&gt;
&lt;p&gt;Une organisation que j'imagine enorme, qui nous a offert un festival de vraie qualité! Bravo Guylaine! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt; Et merci pour ton invitation qui m'a réellement beaucoup touché!&lt;/p&gt;
&lt;p&gt;Pour rester sur l'organisation, bravo également à DickRivers &quot;The DICK&quot;, ElectroFrog et David! Votre gentillesse n'a d'égal que votre investissement dans le bon déroulement de cet évènement (et c'est pas peu dire!). &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Des codeurs aussi cordiaux que doués. mama, ce fut un réel plaisir de te rencontrer et d'échanger avec toi ces quelques discussions sur bien des sujets. Je crois qu'on est bien restés sur le thême du festival à ce niveau ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;smiley&quot; /&gt; JL, j'espère bien qu'on se recroisera bientôt, et que tu te seras mis à la POO ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_mrgreen.gif&quot; alt=&quot;:mrgreen:&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;For Jared : I think than your code is just like you : simple person, but huge feelings. It was a great moment to code at your side, but also to share a little part your world during those two days!!! I hope we'll can meet again soon, you and your so kind Laurie... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un cadavre exquis des plus géniaux!!! Ca paraît incroyable de voir ce que des codeurs peuvent avoir comme styles de programmation différents. Et pourtant, chez chacun le résultat est là, et pas qu'un peu!&lt;/p&gt;
&lt;p&gt;Des artistes brillants, qui ont développé chez moi un autre regard à poser sur la démarche artistique en général, avec un profond désir de m'y atteler moi-même... Axé sur l'exposition de soi sur la toile, je crois que le thème me touche de trés prés... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_redface.gif&quot; alt=&quot;:$&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Des intervenants bien trop modestes !!! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;smiley&quot; /&gt; Quand j'entend un &lt;a href=&quot;http://www.dunun.com/&quot;&gt;dunun&lt;/a&gt; me dire qu'il &quot;fait ce qu'il peut&quot; et que c'est pas grand chose, je trouve ca trés touchant!&lt;/p&gt;
&lt;p&gt;Une équipe MediaBox en force! Ravis d'avoir découvert les têtes que je ne connaissais alors qu'en avatar! Vous êtes tous des killers les gars! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Un Mike CHAMBERS un peu décevant dans sa présentation de Flash 8. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;smiley&quot; /&gt; Discours commercial et préformaté, aucune réponse claire aux questions que j'ai pu lui poser, un sentiment qu'il existe plein de choses qu'il ne faut pas nous dire... M'enfin, il parait de source sûre qu'il est pas si froid que ca: je comprends parfaitement qu'il est bien obligé de suivre le discours imposé par MM... :roll:&lt;/p&gt;
&lt;p&gt;Bref, je crois que vous aurez compris que j'ai passé un trés, trés, trés, trés bon week-end ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Je n'attends plus maintenant que d'avoir les vidéos/photos/DVDs histoire de graver ca dans mon disque dur, bien qu'une grande partie soit déjà gravée dans ma mémoire! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bon, c'est pas tout ça, mais ca m'a bien motivé pour re-flashouiller un peu plus tout ca! :p&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2005/06/01/FlashFestival-2005-%3A-le-retour#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2005/06/01/FlashFestival-2005-%3A-le-retour#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/266</wfw:commentRss>
      </item>
    
  <item>
    <title>PostgreSQL 8.0 : bonne nouvelle</title>
    <link>http://blog.lalex.com/post/2005/01/25/PostgreSQL-80-%3A-bonne-nouvelle</link>
    <guid isPermaLink="false">urn:md5:39863c87b67ccc04d104a9a4020bee02</guid>
    <pubDate>Tue, 25 Jan 2005 09:39:33 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Pour ceux qui n'auraient pas encore eu la bonne idée de rajouter &lt;a href=&quot;http://www.liguorien.com/blog/index.jsp&quot;&gt;le blog de Liguorien&lt;/a&gt; à leurs bookmarks, je reprend une de ses infos en signalant la sortie de &lt;a href=&quot;http://www.postgresql.org/&quot;&gt;PostegreSQL 8.0&lt;/a&gt;. En plus de fonctionnalités dignes des plus grandes bases de données, PostgreSQL offre maintenant un portage natif sur Windows. Reste la possibilité de créer des triggers en C, Perl, Tcl, Python, et même en PHP grâce à &lt;a href=&quot;http://plphp.commandprompt.com/&quot;&gt;plPHP&lt;/a&gt; ou &lt;a href=&quot;http://gborg.postgresql.org/project/pljava/projdisplay.php&quot;&gt;en Java&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour les fanatiques de phpMyAdmin, il est à signaler que PostgreSQL offre le même type d'outil, nommé &lt;a href=&quot;http://phppgadmin.sourceforge.net/&quot;&gt;phpPgAdmin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour l'avoir utilisé en remplacement d'Oracle pendant un moment, je ne peux que vanter les performances et les fonctionnalités de PostgreSQL ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2005/01/25/PostgreSQL-80-%3A-bonne-nouvelle#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2005/01/25/PostgreSQL-80-%3A-bonne-nouvelle#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/264</wfw:commentRss>
      </item>
    
  <item>
    <title>mysqli : le bonheur de la POO avec MySQL 4.1</title>
    <link>http://blog.lalex.com/post/2005/01/14/mysqli-%3A-le-bonheur-de-la-POO-avec-MySQL-41</link>
    <guid isPermaLink="false">urn:md5:0d9dd05eda1550dcf6450d0290aaf997</guid>
    <pubDate>Fri, 14 Jan 2005 10:28:23 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Comme beaucoup le savent, PHP5 propose une &lt;a href=&quot;http://www.php.net/manual/fr/ref.mysqli.php&quot;&gt;nouvelle extension pour MySQL 4.1&lt;/a&gt;, qui offre le gros avantage de pouvoir programmer ses requêtes soit de manière &quot;standard&quot; (old-style), soit en POO.&lt;/p&gt;
&lt;p&gt;Jugez plutôt de la différence:&lt;br /&gt;
&lt;strong&gt;AVANT&lt;/strong&gt;:&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mysql_connect&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_connect&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalex&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalex&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/mysql_select_db&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_select_db&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalexdb&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mysql_query&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_query&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;SELECT * FROM messages&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$cur&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/mysql_fetch_array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_fetch_array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cur&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;sujet&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/mysql_free_result&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_free_result&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/mysql_close&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;mysql_close&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;strong&gt;APRES&lt;/strong&gt; :&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;?&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt; = &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; mysqli&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;localhost&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalex&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalex&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;lalexdb&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;query&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;SELECT * FROM messages&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$cur&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;fetch_object&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://www.php.net/echo&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cur&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;sujet&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$rst&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cnx&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;close&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
C'est-y pas mieux comme ca ? &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2005/01/14/mysqli-%3A-le-bonheur-de-la-POO-avec-MySQL-41#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2005/01/14/mysqli-%3A-le-bonheur-de-la-POO-avec-MySQL-41#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/263</wfw:commentRss>
      </item>
    
  <item>
    <title>MySQL 4.1 stable (production) disponible</title>
    <link>http://blog.lalex.com/post/2004/10/27/MySQL-41-stable-production-disponible</link>
    <guid isPermaLink="false">urn:md5:f059837baaeebe61cb73cad871c42b96</guid>
    <pubDate>Wed, 27 Oct 2004 23:47:13 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Alors que je commencais à en désespérer, une version &lt;strong&gt;stable&lt;/strong&gt; de MySQL 4.1 est enfin prête, avec le numéro de version 4.1.7 !!! Avec une tendresse toute particulière pour la possibilité de faire des sous-requêtes, et une extension &lt;strong&gt;objet&lt;/strong&gt; de PHP5 optimisée pour MySQL 4.1. Sans oublier les performances revues à la hause ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez foncer le télécharger sur le &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/4.1.html&quot;&gt;site officiel&lt;/a&gt; (ou aller lire &lt;a href=&quot;http://www.mysql.com/news-and-events/press-release/release_2004_32.html&quot;&gt;le communiqué officiel&lt;/a&gt; pour en savoir plus)! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/10/27/MySQL-41-stable-production-disponible#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/10/27/MySQL-41-stable-production-disponible#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/260</wfw:commentRss>
      </item>
    
  <item>
    <title>Utile : conserver l'indentation et création de nom &quot;simples&quot;</title>
    <link>http://blog.lalex.com/post/2004/10/06/Utile-%3A-conserver-lindentation-et-cration-de-nom-simples</link>
    <guid isPermaLink="false">urn:md5:791d87d1036110b04c7ff2accfe86b72</guid>
    <pubDate>Wed, 06 Oct 2004 18:24:15 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Etant donné que je suis plus occupé à réinstaller mon ordinateur et à me réinstaller moi-même qu'à coder (ben oui, je déménage), je ressors quelques lignes de PHP que j'utilise depuis longtemps pour alimenter quelque peu ce blog qui à tendance à roupiller. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La première fonction sert à générer des noms &quot;simples&quot;, pouvant servir à des URL. C'est en fait la fonction que j'utilise pour les adresses de mes pages. Elle élimine les accents, ponctuations et mots de moins de 3 lettres, et remplace les espaces par des tirets :&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; simpleName&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$araccent&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[áåâäàã]#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#ç#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[êéèë]#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[íîïì]#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[óôöòõ]#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[ûüùú]#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#ñ#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[ÿý]#&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#[^&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\w&lt;/span&gt; ]#&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$arnoaccent&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;a&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;c&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;e&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;i&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;o&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;u&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;n&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;y&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#(&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\W&lt;/span&gt;|&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\s&lt;/span&gt;)&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\w&lt;/span&gt;{1,2}(?=&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\W&lt;/span&gt;|&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\s&lt;/span&gt;)#&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;$1$2&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\s&lt;/span&gt;{2,}#&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;# #&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;,&lt;a href=&quot;http://www.php.net/array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot; &amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;-&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;a href=&quot;http://www.php.net/trim&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;trim&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$araccent&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$arnoaccent&lt;/span&gt;, &lt;a href=&quot;http://www.php.net/strtolower&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;strtolower&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;
La deuxième me sert à conserver l'identation du code lorsqu'il est affiché en HTML. Pour cela, la chaine retournée alterne les espaces &quot;normaux&quot; et les espaces insécables HTML &lt;strong&gt;&amp;amp;nbsp;&lt;/strong&gt;. Elle utilise en majorité str_replace pour de meilleures performances. C'est ce code qui est utilisé par ma classe &lt;a href=&quot;http://www.lalex.com/blog/archives/200402/126-dsplay-colorisateur-bbcode-and-co.html&quot;&gt;Colori&lt;/a&gt; :&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; keepHTMLIndent&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;nbsp; &amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;amp;nbsp; &amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$str&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;nbsp; &amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot; &amp;amp;nbsp;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/str_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\t&lt;/span&gt;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;amp;nbsp; &amp;amp;nbsp;&amp;quot;&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt; = &lt;a href=&quot;http://www.php.net/preg_replace&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;/^ {1}/m&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;amp;nbsp;'&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$ret&lt;/span&gt;;&lt;br /&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Et wala, à bientôt ! ^^&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/10/06/Utile-%3A-conserver-lindentation-et-cration-de-nom-simples#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/10/06/Utile-%3A-conserver-lindentation-et-cration-de-nom-simples#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/253</wfw:commentRss>
      </item>
    
  <item>
    <title>Envie de meurtre</title>
    <link>http://blog.lalex.com/post/2004/09/29/Envie-de-meurtre</link>
    <guid isPermaLink="false">urn:md5:c355e9833d1f78d25119f2440fb3e6af</guid>
    <pubDate>Wed, 29 Sep 2004 19:03:01 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Venant d'investir dans un ordinateur de type barebone, je me suis vu confronté à des incompatibilités entre mon ancien matériel et le nouveau. Ayant tout simplement transféré le disque dur d'une machine à l'autre, je n'avais plus qu'à ré-installer windows sur le version actuelle. J'ai fais cette manipulation des dizaines de fois, et ca a toujours fonctionné.&lt;/p&gt;
&lt;p&gt;Mais voila-t-y pas que au démarrage, Windows m'invite gentimment à faire un scandisk pour vérifier mon disque dur. Sachant qu'il va me les briser systématiquement au démarrage, je me dis autant le faire tout de suite. L'erreur qu'il ne fallait pas faire ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_sad.gif&quot; alt=&quot;:(&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;J'écris maintenant depuis ma nouvelle installation, purgée de tous les documents que j'ai créé sur ce disque dur depuis mon précédent formatage (dans les règles celui-là) : classes AS2, articles en cours de rédaction, la totalité de mes images et musiques, mes réalisations pro, bref &lt;strong&gt;TOUS MES FICHIERS DEPUIS DEUX MOIS !!!&lt;/strong&gt; :x&lt;/p&gt;
&lt;p&gt;Je suis sûr que les murs ont eu plus mal que mon crâne ...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/09/29/Envie-de-meurtre#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/09/29/Envie-de-meurtre#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/252</wfw:commentRss>
      </item>
    
  <item>
    <title>Vous êtes arrivé à destination</title>
    <link>http://blog.lalex.com/post/2004/09/24/Vous-tes-arriv-destination</link>
    <guid isPermaLink="false">urn:md5:ee9ccc18aead10775d4563c974fdc071</guid>
    <pubDate>Fri, 24 Sep 2004 13:31:15 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Si vous voyez ce post, cela veut dire que vous venez de rejoindre le nouveau serveur. Vous pouvez détacher vos ceintures et vous relaxer jusqu'à l'arret de l'appareil ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_mrgreen.gif&quot; alt=&quot;:mrgreen:&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bref, vous pouvez vous jeter à nouveau sur les commentaires, et apprécier ce nouvel hébergement. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A ce sujet, l'interface d'administration du serveur est &lt;a href=&quot;http://www.sw-soft.com/en/products/plesk7reloaded/&quot;&gt;Plesk 7&lt;/a&gt; : un nombre incroyable d'options configurables, et une interface assez esthétique en plus ce qui ne gache rien ! Un coup de chapeau à cette application donc ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/09/24/Vous-tes-arriv-destination#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/09/24/Vous-tes-arriv-destination#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/251</wfw:commentRss>
      </item>
    
  <item>
    <title>Pratiques de programmation PHP #1 : La base de données.</title>
    <link>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-1-%3A-La-base-de-donnes</link>
    <guid isPermaLink="false">urn:md5:69a4be7f640f198dbcdecd9dc940d89c</guid>
    <pubDate>Tue, 21 Sep 2004 19:30:02 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Passé maitre &lt;a href=&quot;http://www.lalex.com/blog/archives/200409/202-pratiques-programmation-php-presentation-conventions.html&quot;&gt;dans l'art&lt;/a&gt; &lt;a href=&quot;http://www.lalex.com/blog/archives/200407/177-pratiques-programmation-php-introduction.html&quot;&gt;du teasing&lt;/a&gt;, voici maintenant le vrai début de cette série. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Je rappelle qu'il s'agit là, d'une série sur les bonnes pratiques du PHP, et non pas de tutoriel d'apprentissage. Pour les comprendre, il s'agit donc de déjà savoir faire du PHP avec MySQL, que ce soit à un niveau plus ou moins avancé. Pour cet article, je considère que vous savez déjà créer une BDD, une table, et concevoir un minimum pour avoir quelque chose de fonctionnel (a défaut d'être souple et/ou performant).&lt;/p&gt;
&lt;p&gt;1. Ai-je besoin d'une base de données ?&lt;/p&gt;
&lt;p&gt;La base de données est un système &quot;simple&quot; qui sert a stoquer des données (oui, je suis pas aller le chercher loin ! :$) ... Il s'agit donc de la base sur laquelle repose la plupart des applications dynamiques. Les applications les plus connues utilisant une base de données sont des forums, des blogs ou des boutiques en ligne. Elles permettent non seulement d'enregistrer des données, mais également des les récupérer de manière selective au moyen du &lt;a href=&quot;http://dev.mysql.com/doc/mysql/fr/SQL_Syntax.html&quot;&gt;langage SQL&lt;/a&gt;.&lt;br /&gt;
Mais attention à ne pas faire non plus du tout BDD ! En effet, certaines situations ne nécessite pas de base de données :&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Gestion de fichiers&lt;/span&gt;&lt;/strong&gt; : la plupart des informations d'un fichier sont directement accessibles depuis PHP (nom, taille, date de création/modification). Une BDD qui stockerait des noms de fichiers avec ces informations ne serait qu'une répétition de ce que nous pouvons savoir sans cela (souvenez-vous de &lt;a href=&quot;http://www.lalex.com/blog/archives/200409/202-pratiques-programmation-php-presentation-conventions.html&quot;&gt;la règle d'or&lt;/a&gt; ;)) ! En effet, il devient difficile à ce moment là ce garder une cohérence permanente entre les données. Par exemple, on peut envisager créer un diaporama sans base de données, qui se contenterait d'afficher les images présentes dans un répertoire. Par contre, si l'on veut donner à ces images un titre ou le nom de celui qui a pris la photo, une base de vient nécessaire.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Données de configuration&lt;/span&gt;&lt;/strong&gt; : pour moi, une BDD est axée sur le contenu. Les directives de configuration telles que des chemins racines, la langue d'une application ou autre donnée nécessaire à l'initialisation de celle-ci doivent être regroupées dans un espace qui leur est propre. A priori, il peut s'agir d'un fichier .ini ou XML, mais certainement pas d'une base de données (ou alors une BDD dédiée). Déjà, les paramètres de connexion à une base doivent bien être initialisés quelque part, je préfère alors y mettre l'ensemble des paramètres de l'application. En gros, je dirais qu'une base doit contenir les données qui servent à faire tourner l'application, pas à la lancer ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;2. Créer sa base de données&lt;/p&gt;
&lt;p&gt;2.1 Conventions de nommage et de structure.&lt;br /&gt;
Comme pour le code, il est bon de se tenir à des conventions lorsque l'on crée une base de données. Voici celles que j'utilise : &lt;ul&gt;&lt;li&gt;2.1.1 Utiliser un préfixe pour les noms de table.&lt;br /&gt;
Il s'agit d'un &quot;identifiant&quot; qui permet de regrouper les tables par fonctionnalités. En général, il contient entre 2 et 4 lettres. Par exemple, pour le site d'une boutique appellée &quot;Vraiment Pas Cher&quot;, tous mes noms de tables vont commencer par 'vpc_'. Dans l'optique d'un hébergement partageant plusieurs applications, cela me permet d'avoir plusieurs tables utilisateurs ou articles. En plus de différencier quelle table est utilisée par quelle application uniquement par son nom, c'est aussi utile dans phpMyAdmin pour les regrouper, quand les tables sont affichées par ordre alphabétique ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt; Une seule application de portail pourrait également dissocier les différents types de données gérées : usr_ pour la gestion utilisateurs, cmd_ pour les commandes, prd_ pour les produits, etc...&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;2.1.2 Utiliser des noms sans casse.&lt;br /&gt;
En effet, si aujourd'hui vous vous servez de MySQL, sachez que &lt;a href=&quot;http://dev.mysql.com/doc/mysql/fr/Name_case_sensitivity.html&quot;&gt;la version Windows est insensible à la casse, mais pas la version Linux&lt;/a&gt;. D'autres systèmes ou bases de données peuvent être plus ou moins sensibles à la casse. C'est pourquoi j'utilise systématiquement des noms de table et de champs uniquement en minuscule.&lt;br /&gt;
&lt;li&gt;2.1.3 Utiliser des noms de table sans separation.&lt;br /&gt;
En gros, ca revient à ne pas mettre de underscore ( _ ) dans un nom de table &quot;normale&quot;. Nous verrons plus tard que cette règle possède une exception qui vient la confirmer ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;2.1.4 Noms de table au singulier&lt;br /&gt;
Le nom d'une table doit décrire ce que contient une ligne de cette table. Les noms de tables se doivent donc d'être au singulier.&lt;br /&gt;
&lt;li&gt;2.1.5 Clés primaires.&lt;br /&gt;
Chaque table possède une clé primaire numérique, dont le nom est id_&lt;nomDeLaTable&gt;. Le préfixe dont je parle plus haut n'est pas considéré comme faisant partie du nom de la table. Par exemple, une table supv_voyage aura une clé primaire du nom de 'id_voyage'. En MySQL, la clé primaire aura l'attribut auto_increment. Je me sers du type INT(10) UNSIGNED pour mes clés primaires.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;2.1.6 Langue de la base.&lt;br /&gt;
Personnellement, j'utilise généralement l'anglais dans mes noms de table et de champs, mais le plus important est de rester constant dans la langue que l'on utilise. Nous resterons en français dans les exemples de cet article.&lt;/ul&gt;&lt;br /&gt;
D'autres viendront au cours de l'article pour enrichir celles-ci, au moment où nous aborderons les notions qui justifient ces conventions.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
2.2 Un premier schéma&lt;br /&gt;
Imaginons que l'on décide de créer un jeu en ligne nommé &quot;Maxi Questions&quot;. Ce jeu consiste en des questions sur divers thèmes, et les joueurs peuvent y répondre. A chaque question, un joueur ayant répondu juste gagne 2 point, un joueur ayant répondu faux perd 1 point.&lt;br /&gt;
En prenant compte des données &quot;classiques&quot; dont aurait besoin ce type d'application, nous avons besoin pour l'utilisateur d'un login et d'un mot de passe. Il va nous falloir aussi connaitre son score. Une question a un libellé et un theme. Une réponse consiste en un texte et une correction (juste ou faux). Voyons le &lt;strong&gt;trés mauvais exemple&lt;/strong&gt; duquel nous pouvons partir pour améliorer les choses :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-bad.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;br /&gt;
Voyons maintenant comment modifier ce schéma pour qu'il soit rigoureux et performant :&lt;br /&gt;
2.2.1 Les clés étrangères.&lt;br /&gt;
Dans l'exemple précédent, la table des réponses utilise le pseudo pour savoir quel utilisateur à entré cette réponse. Cela pose plusieurs problèmes : &lt;ul&gt;&lt;li&gt;Tout d'abord, en terme de performances. En effet, effectuer une jointure sur un champ texte est bien plus exigeant que sur un champ numérique.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;En terme de fonctionnalité. Imaginons que pour une raison ou pour un autre, nous décidions d'autoriser plusieurs pseudos identiques s'ils ont des mot de passe différents (a ne pas conseiller, mais il me fallait bien un exemple :P) ... Comment retrouver alors celui qui a répondu ?&lt;/ul&gt;Dans ce cas précis, il est préférable d'utiliser l'id_utilisateur pour faire la liaison entre mxq_reponse et mxq_utilisateur. C'est là qu'intervient une convention suplémentaire : &lt;strong&gt;les clés étrangères se font sur une clé primaire, et portent le nom de cette clé primaire&lt;/strong&gt;.&lt;br /&gt;
Voici ce que donne le schéma à l'issue de cette première étape :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-fk.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;/p&gt;
&lt;p&gt;2.2.2 Regroupement des colonnes&lt;br /&gt;
Voici un des premiers aspects de notre règle d'or : &quot;Ne pas répeter deux fois la même chose !!!&quot; ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;br /&gt;
En effet, le thème d'une question est ici saisi en toutes lettres dans la table question. Or, il se peut tout à fait qu'il existe plusieurs questions qui ont le même thême, c'est même à priori pour ça qu'il existe. Donc, si on ne veut pas répeter plusieurs fois le thême &quot;Nature&quot;, il va falloir le centraliser. Le meilleur moyen est donc de créer une table qui va contenir les thêmes, et faire un clé étrangère dans la table des questions. Cette solution amène plusieurs avantages : &lt;ul&gt;&lt;li&gt;Si l'on veut changer le nom d'un thème, il ne suffit de le modifier qu'une seule fois pour que cela soit appliqué partout.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;On évite les incohérences en entrant à chaque fois le nom du thême pour chaque nouvelle question. Si c'était le cas, nous ne sommes jamais à l'abris d'une faute de frappe, de casse, ou de doublons.&lt;br /&gt;
&lt;li&gt;Si l'on veut faire un formulaire qui permet de choisir un thême, il est bien plus facile de créer une liste déroulante avec le contenu d'une table à part. L'identifiant du thême sera ensuite passé en paramètre au filtre.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Et du coup, on améliore les performances des requêtes : en effet, une comparaison sur un numérique est bien plus rapide que sur une chaine de caractères, de la même manière que pour les clés étrangères.&lt;/ul&gt;Un indice pour détecter les colonnes à externaliser est de savoir quelles vont être les colonnes qui seront selectionnables via une liste déroulante dans les différents formulaires de l'application. Voici le schéma avec les thêmes externalisés :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-ext.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;/p&gt;
&lt;p&gt;2.2.3 Les données déductibles&lt;br /&gt;
Voici encore une déclinaison de la regle d'or. En effet, pourquoi enregistrer le score, alors que nous pouvons le déduire trés facilement en fonction du nombre de réponses fausses et justes ? Le champ score de la table des utilisateurs est donc superflu. Nous pouvons l'enlever sans perdre une seule information :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-noscore.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;br /&gt;
Cette règle toutefois n'est pas systématique : en effet, on peut vouloir changer les attributions de score en cours de jeu, mais conserver les scores tels qu'ils étaient avant l'ancien barême. C'est assez inhabituel de changer les règles en cours de jeu, mais sachez que dans ce cas là, le champ &quot;score&quot; retrouve toute justification.&lt;/p&gt;
&lt;p&gt;2.2.4 Penser aux données statistiques&lt;br /&gt;
Dans toute application, et plus particulièrement s'il s'agit d'une application web, il est indispensable de développer des outils statistiques. Dans notre cas, il peut être utile de savoir la moyenne du nombre de réponse à une question, du nombre d'inscrits pas jour, le temps de réponse moyen à une question, etc...&lt;br /&gt;
C'est pourquoi sur la plupart de mes tables, je crée un champ nommé date_creation, dont la valeur par défaut est la date de création de la ligne (en MySQL : NOW()). Afin de pouvoir obtenir un feedback efficace, je vais donc rajouter ce champ aux tables principales. Ce ne sera pas nécessaire pour la table des thèmes : en effet, il y a peu de chance qu'on ai besoin de savoir quand un thème a été créé. A la rigueur, si l'on veut savoir quand un thème a été utilisé pour la première fois, il suffit de trouver la date de création de la première question de ce thème ...&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-date.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;/p&gt;
&lt;p&gt;2.2.4 Eviter la suppression de données&lt;br /&gt;
La plupart des grosses applications sur des données plus ou moins sensibles évitent au possible de supprimer des données. Il peut s'agir de raisons toutes simples d'archivage de la table elle-même, ou pour éviter d'avoir à supprimer des données d'autres tables que l'on veut conserver et qui sont liées à la table principale. En effet, imaginons qu'on veuille supprimer un utilisateur de la base. Que faire alors de ses réponses ? Si on les conserver, elles deviendront des réponses orphelines. Si on les supprime, les statistiques deviendront complètement fausses.&lt;br /&gt;
Et imaginons que cet utilisateur décide de revenir tout en conservant son score, il serait bien plus facile de l'avoir simplement désactivé. Il suffirait alors de le réactiver pour le réintégrer au jeu.&lt;br /&gt;
C'est pourquoi la plupart des tables succeptibles d'avoir des données ne servant plus possèdent toutes un champ &quot;actif&quot;, qui contiendra 0 ou 1 selon que la ligne est active ou non :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-actif.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;br /&gt;
Il faudra prévoir dans notre application de ne choisir que les lignes actives lorsque cela sera nécéssaire. Par exemple, pour un thème, on peut ne sélectionner que les thèmes actifs lorsque l'on crée une question, mais choisir tous les thèmes quand on consulte l'historique ...&lt;/p&gt;
&lt;p&gt;2.3 Optimisation&lt;br /&gt;
2.3.1 Les indexes &quot;simples&quot;&lt;br /&gt;
Nous avons déjà vu dans le chapitre précédent que le fait d'utiliser des clés étrangères numériques améliore les performances. Il existe un moyen de les améliorer encore plus avec les indexes. Un index consiste à stocker dans un espace accessible rapidement les valeurs d'un colonne. Ainsi, si l'on accède souvent à une colonne indexée, ce sera bien plus rapide que sur une colonne normale. Par exemple, je conseille de créer un index sur toutes les colonnes de clés étrangères avec MySQL. Pour la création d'index, il est facile de le faire avec &lt;a href=&quot;http://www.phpmyadmin.net&quot;&gt;phpMyAdmin&lt;/a&gt;. Pour en créer un à la main, référez vous à &lt;a href=&quot;http://dev.mysql.com/doc/mysql/fr/CREATE_INDEX.html&quot;&gt;la documentation SQL&lt;/a&gt;.&lt;br /&gt;
Dans notre exemple, les indexes seraient positionnés sur &lt;em&gt;mxq_reponse.id_question&lt;/em&gt;, &lt;em&gt;mxq_reponse.id_utilisateur&lt;/em&gt;, &lt;em&gt;mxq_quesiton.id_theme&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;2.3.2 Les indexes uniques&lt;br /&gt;
Encore plus rapide que les indexes dits &quot;simples&quot;, les index uniques peuvent se faire sur une colonne ou un groupe de colonnes qui n'aura pas deux fois la même valeur. Dans notre exemple, si l'on considère qu'un même utilisateur ne peut pas répondre deux fois à la même question, cela signifie que le couple id_question/id_utilisateur n'aura jamais deux fois la même valeur. Une index unique sur ce couple de colonne est donc tout à fait opportun : mxq_reponse.id_utilisateur et mxq_reponse.id_question ! Cet index unique viendra s'ajouter aux indexes simples dont j'ai parlé plus haut. Une coup d'oeil sur &lt;a href=&quot;http://dev.mysql.com/doc/mysql/fr/CREATE_INDEX.html&quot;&gt;la documentation SQL&lt;/a&gt; vous renseignera sur la syntaxe à utiliser (avec l'option &quot;UNIQUE&quot;).&lt;/p&gt;
&lt;p&gt;2.4 Notions supplémentaires&lt;br /&gt;
Les clés étrangères que nous avons vu jusqu'ici permettent de créer une relation 1,N (le 1 étant représenté par un losange blanc, et le N par un rond noir). En gros, cela veut dire qu'un utilisateur peut correspondre à plusieurs (N) réponses, mais qu'une réponse ne peut correspondre qu'à un utilisateur et un seul (1) ... Il s'agit de la cardinalité.&lt;/p&gt;
&lt;p&gt;En plus ce cette cardinalité, il en existe deux autres :&lt;/p&gt;
&lt;p&gt;2.4.1 Les relations &quot;N,N&quot;&lt;br /&gt;
Imaginons que nous voulions implémenter un système de groupes d'utilisateurs. En gros, un utilisateur peut appartenir plusieurs groupes (N), et un groupe peut avoir plusieurs utilisateurs (N) ... On est donc dans le cas d'une cardinalité N,N. Ce type de relation n'existe pas de manière indépendante. Il a besoin d'un table intermédiaire, qu'on peut appeler &quot;Tables N,N&quot;.  C'est là qu'intervient l'exception aux règles de nommage des tables dont j'ai parlé plus haut. En effet, &lt;strong&gt;les tables N,N ont le nom de chacune des deux tables à mettre en relation séparées par un underscore ( _ )&lt;/strong&gt; (l'ordre ayant peu d'importance : celle qui vous parait le plus importante est à mettre en premier) ... Cette table va contenir deux clés étrangères vers les deux tables à relier, ces deux clés étrangères formant un index unique. En effet, un groupe ne peut pas contenir deux fois le même utilisateur ... Le résultat est le suivant :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-groupe.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;br /&gt;
Ce type de relation est utilisé par exemple pour un caddie sur un site de ecommerce : un produit peut-être dans plusieurs caddies, et un caddie peut contenir plusieurs produits.&lt;/p&gt;
&lt;p&gt;2.4.2 Les relations &quot;1,1&quot;&lt;br /&gt;
Par abus de langage, on peut considérer que la relation 0...1,1 rentre également dans le même cadre. Cela signifie qu'une table a une correspondance directe avec aucune ou une seule ligne de l'autre. En pratique, il s'agit d'une clé étrangère associée à un index unique. Cela peut servir lorsque l'on sait que des données d'une table ne seront pas forcément nécessaire pour toutes ses lignes. Imaginons par exemple que certains utilisateurs sont des administrateurs, et qu'ils ont un mot de passe différent pour accéder à la partie administration du site.&lt;br /&gt;
La solution de facilité serait de rajouter un champ 'mot_passe_admin' dans la table utilisateur. Mais &lt;strong&gt;il ne faut pas créer de champs dont la plupart seront vides&lt;/strong&gt;. Il vaut bien mieux créer une table d'administrateur, reliée à la table utilisateur. Nous savons alors que chaque utilisateur à alors une correspondance dans la table adimnistrateur (s'il est admin) ou aucune (s'il est simple joueur). Voilà ce que cela donne :&lt;br /&gt;
&lt;quote&gt;&lt;div align=&quot;center&quot;&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/09/21/blogpics/phptips-1/question-admin.gif&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/quote&gt;&lt;br /&gt;
L'index unique (non visible sur le schéma) sert à s'assurer que l'utilisateur n'aura pas deux mot de passes possibles pour la partie administration. Par similitude avec les tables question/theme, on voit bien que si l'index unique n'existait pas, on pourrait avoir plusieurs lignes administrateur correspondant à un seul utilisateur ...&lt;/p&gt;
&lt;p&gt;Les schémas de base de données qui illustreront les articles sont fait avec un outil OpenSource performant que je vous conseille : &lt;a href=&quot;http://www.fabforce.net/dbdesigner4/&quot;&gt;DBDesigner&lt;/a&gt; (Window &amp; Linux). Il est optimisé pour MySQL, mais peut servir d'outil de conception pour tout type de base.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-1-%3A-La-base-de-donnes#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-1-%3A-La-base-de-donnes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/250</wfw:commentRss>
      </item>
    
  <item>
    <title>Pratiques de programmation PHP #0 : Présentation et conventions.</title>
    <link>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-0-%3A-Prsentation-et-conventions</link>
    <guid isPermaLink="false">urn:md5:f06d58f54c5e6dc9b5f891f5c75dd98f</guid>
    <pubDate>Tue, 21 Sep 2004 16:08:16 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Plus de deux mois après &lt;a href=&quot;http://www.lalex.com/blog/archives/200407/177-pratiques-programmation-php-introduction.html&quot;&gt;l'introduction sur cette série d'articles&lt;/a&gt; sur les pratiques de programmation en PHP, voici le premier opus de présentation.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color:#00118C&quot;&gt;&lt;span style=&quot;font-size:14px&quot;&gt;&lt;strong&gt;Conventions&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Afin de réduire les lourdeurs du texte, je parlerai de BDD pour dire &quot;Base de Données&quot;, et de POO pour &quot;Programmation Orientée Objet&quot;. Les autres abréviations seront précisées au début de chaque article.&lt;/p&gt;
&lt;p&gt;La plupart des pratiques qui seront abordées seront valables pour PHP4, et les spécificités de PHP5 qui seront abordées seront différenciées visiblement dans les articles. Le moteur de BDD utilisé sera &lt;a href=&quot;http://www.mysql.com/&quot;&gt;&lt;strong&gt;MySQL&lt;/strong&gt;&lt;/a&gt;, le plus fréquemment utilisé avec PHP (bien que PHP5 propose maintenant une intégration avec &lt;a href=&quot;http://www.zend.com/php5/articles/php5-sqlite.php&quot;&gt;SQLite&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color:#00118C&quot;&gt;&lt;span style=&quot;font-size:14px&quot;&gt;&lt;strong&gt;Avant de commencer&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;La règle d'or qui vous suivra durant toute votre lecture sera : &quot;&lt;strong&gt;NE PAS REPETER PLUSIEURS FOIS LA MEME CHOSE !!!&lt;/strong&gt;&quot;. Si vous ne voyez pas déjà à quoi je fais allusion, ne vous inquiétez pas, vous aurez l'occasion de la revoir très souvent dans les différents articles qui suivront. En effet, si la règle reste la même, elle peut prendre bien des formes différentes selon la situation.&lt;/p&gt;
&lt;p&gt;Je vous rappelle à nouveau qu'il s'agit là de &lt;strong&gt;mes&lt;/strong&gt; pratiques, et aucunement d'une méthode universelle à suivre absolument. Seulement cela peut poser à mon avis de bonnes bases pour un code efficace et clair : en tout cas, ça marche pour moi ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_razz.gif&quot; alt=&quot;:P&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color:#00118C&quot;&gt;&lt;span style=&quot;font-size:14px&quot;&gt;&lt;strong&gt;Et maintenant ?&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Voici un petit aperçu des domaines qui seront abordés. Cette liste est susceptible d'évoluer durant la rédaction en fonction des besoin et remarques qui seront exprimés dans les commentaires ou de mes envies :&lt;ul&gt;&lt;li&gt;La base de données&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;L'organisation des fichiers de travail et du code&lt;br /&gt;
&lt;li&gt;Ergonomie et astuces diverses&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;La POO&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;La première partie pratique que nous aborderons est donc la base de données ... a très bientôt ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-0-%3A-Prsentation-et-conventions#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/09/21/Pratiques-de-programmation-PHP-0-%3A-Prsentation-et-conventions#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/249</wfw:commentRss>
      </item>
    
  <item>
    <title>API Java pour PHP5</title>
    <link>http://blog.lalex.com/post/2004/07/26/API-Java-pour-PHP5</link>
    <guid isPermaLink="false">urn:md5:f93720c8c7d2d87bdaea6b03e21142b5</guid>
    <pubDate>Mon, 26 Jul 2004 16:23:05 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Des p'tits gars biens futés ont lancés l'idée de re-créer l'API de Java pour PHP5, en se servant de la similarité évidente entre les deux syntaxes. Non content d'avoir eu la grande idée, ils l'ont mise en pratique et l'équipe de &lt;a href=&quot;http://www.japha.net/&quot;&gt;japha&lt;/a&gt; met dors et déjà à disposition le package &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=87463&amp;package_id=91133&quot;&gt;japha 2.0.0 pour PHP 5.0.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;L'interêt de ce type de programme est que l'API de Java est déjà trés largement éprouvée, et qu'elle peut maintenant être utilisée dans PHP, lui apportant ainsi sa robustesse et surtout sa propreté OO ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Merci &lt;a href=&quot;http://www.nexen.net/news/gen.php/2004/07/25/3264,0,0,0,0.php&quot;&gt;Nexen&lt;/a&gt; pour l'info ! ^^&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/07/26/API-Java-pour-PHP5#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/07/26/API-Java-pour-PHP5#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/232</wfw:commentRss>
      </item>
    
  <item>
    <title>Hébergeur(s) PHP5 : OVH sur les rangs</title>
    <link>http://blog.lalex.com/post/2004/07/21/Hbergeurs-PHP5-%3A-OVH-sur-les-rangs</link>
    <guid isPermaLink="false">urn:md5:49baa9d39da8882d7229b13353326170</guid>
    <pubDate>Wed, 21 Jul 2004 23:10:37 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;OVH a été parmi les premiers hébergeurs français (à ma connaissance) à proposer de tester PHP5 avec la version PHP5 beta1. Aujourd'hui, les offres &lt;a href=&quot;http://www.ovh.com/fr/mutualise/plans/&quot;&gt;Plan Pack&lt;/a&gt; proposent la version finale de PHP 5.0.0 via l'extension &lt;em&gt;.php5&lt;/em&gt; !&lt;/p&gt;
&lt;p&gt;Si vos connaissez d'autres hébergeurs qui ont déjà sauté le pas, n'hésitez pas à les donner dans les commentaires ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/07/21/Hbergeurs-PHP5-%3A-OVH-sur-les-rangs#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/07/21/Hbergeurs-PHP5-%3A-OVH-sur-les-rangs#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/231</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP 5 est enfin la !!!</title>
    <link>http://blog.lalex.com/post/2004/07/14/PHP-5-est-enfin-la</link>
    <guid isPermaLink="false">urn:md5:e883adc86291916e8178776afd8f8957</guid>
    <pubDate>Wed, 14 Jul 2004 12:40:30 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Chantez et dansez, le tant attendu &lt;a href=&quot;http://www.php.net&quot;&gt;PHP 5&lt;/a&gt; est enfin disponible !!! Il est donc maintenant possible de coder avec san arrière pensée ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;La dernière question qui se pose est de savoir comment va se dérouler la transition. En effet, pour des problèmes de compatibilité ascendante avec l'ancienne version, notamment avec la programmation POO, l'adoption de cette nouvelle mouture risque de ne pas se faire sans douleur. Alors quel choix vont être fait par les hébergeurs ? Garder la compatibilité et ainsi se couper de la nouvelle notation ? Ou forcer l'adoption de la nouvelle notation, et ainsi obliger à transformer tout son code ? :o&lt;/p&gt;
&lt;p&gt;A priori, il y a de grandes chances que l'on passe par une phase de transition avec une extension .php5, avec les .php qui restent en PHP4 ... Quoi qu'il arrive, c'est toujours ca de pris : l'avenir du langage est maintenant entre les mains des hébergeurs ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/07/14/PHP-5-est-enfin-la#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/07/14/PHP-5-est-enfin-la#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/226</wfw:commentRss>
      </item>
    
  <item>
    <title>Pratiques de programmation PHP : Introduction</title>
    <link>http://blog.lalex.com/post/2004/07/08/Pratiques-de-programmation-PHP-%3A-Introduction</link>
    <guid isPermaLink="false">urn:md5:61e54431317c192f7b98ad582fc4a232</guid>
    <pubDate>Thu, 08 Jul 2004 18:22:36 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Une fois la &lt;a href=&quot;http://www.lalex.com/blog/archives/200406/175-marre-des-codeurs-petite-semaine.html&quot;&gt;colère passée&lt;/a&gt;, je me suis mis en tête de faire une série de posts concernant ce que je considère comme des bonnes pratiques en programmation PHP/MySQL, histoire de ne pas me poser en tant que &quot;raciste envers les débutants&quot;.:P Ca peut aider si l'on débute, ou tout simplement donner des trucs auxquels on n'a pas forcément pensé. Bon, évidemment, ca restera mes pratiques, celles que j'utilise au quotidien, mais je pense avoir déjà pas mal vadrouillé dans les méandres du codage PHP pour pouvoir donner mon humble avis, d'autant que de nombreuses astuces découlent plus du bon sens que de l'apprentissage. Cela aura également l'avantage de pouvoir être complété et/ou rectifié par vos commentaires : pourquoi pas faire une compilation à la fin de la série ? &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Si certaines sont instaurées depuis un bon nombre d'années par les différentes normes qui se sont naturellement installées dans les communautés de développement, d'autres sont aussi venues par la pratique. Un peu comme pour les Design Pattern, il s'agit là de solutions génériques élaborées pour répondre à un problème spécifique.&lt;/p&gt;
&lt;p&gt;J'aborderai dans cette rubrique différents aspects de la conception de sites web dynamiques, de la conception de la base de données à l'organisation du code et des différents fichiers, en passant par des trucs et astuces de lisiblité ou de performances, et la POO.&lt;/p&gt;
&lt;p&gt;Une rubrique ActionScript pourrait également faire son apparition ensuite. De nombreux points communs existent entre les différents langages de programmation, et donc certaines pratiques sont utilisés partout. Mais la première série restera axée sur le PHP.&lt;/p&gt;
&lt;p&gt;Wait and see. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/07/08/Pratiques-de-programmation-PHP-%3A-Introduction#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/07/08/Pratiques-de-programmation-PHP-%3A-Introduction#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/224</wfw:commentRss>
      </item>
    
  <item>
    <title>Multi-threading en PHP : vers une solution ? (MAJ)</title>
    <link>http://blog.lalex.com/post/2004/06/15/Multi-threading-en-PHP-%3A-vers-une-solution-MAJ</link>
    <guid isPermaLink="false">urn:md5:54d6274e71dcaa1c11c407adced06d22</guid>
    <pubDate>Tue, 15 Jun 2004 10:01:32 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;PHP a beau être un langage qui n'a pas à rougir de la comparaison avec les &quot;gros&quot; langages tels que Java, il lui manque néamoins quelques fonctionnalités avancées qui simplifieraient la vie du codeur, et éventuellement pourraient améliorer les performances de manières significative.&lt;/p&gt;
&lt;p&gt;Parmi ces fonctionallités &quot;manquantes&quot;, le multi-threading est probablement la plus importante à mon sens. Sur les plateforme de type UNIX, il est possible de dupliquer un processus grace à l'utilisation de &lt;strong&gt;l'extension PCNTL&lt;/strong&gt; et son instruction &lt;a href=&quot;http://fr.php.net/manual/fr/function.pcntl-fork.php&quot;&gt;pcntl_fork()&lt;/a&gt;, mais pas de créer plusieurs threads. Pour information, le thread est la plus petite entité en terme d'instruction processeurs. Les différents threads d'un processus sont répartis en terme de traitement par le processeur afin de simuler leurs executions simultanées.&lt;/p&gt;
&lt;p&gt;Vraisemblablement, le problème a déjà commencé à être abordé par des codeurs du &lt;a href=&quot;http://www.php.net&quot;&gt;PHP Group&lt;/a&gt;, et ce depuis un bon moment. PHP5 ne gérant pas nativement le multi-threading, il s'agit donc d'une &lt;a href=&quot;http://pecl.php.net&quot;&gt;extension PECL&lt;/a&gt;. Pour rappel, PECL est un sytème d'extensions la plupart du temps codées en C/C++, et compilées à la manière des extensions &quot;natives&quot; de PHP (MySQL, Oracle, Sockets : celles que l'on active dans le php.ini). On trouve ainsi dans la liste de ces extensions de quoi gérer le format zip, ou se connecter à un serveur POP3...&lt;br /&gt;
Pour les experts en C/C++ qui veulent éventuellement y toucher, ou développer leurs propres extensions natives, vous trouverez sur le site de PECL &lt;a href=&quot;http://pecl.php.net/support.php#tutorials&quot;&gt;les instructions nécessaires à un tel codage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Attention à ne pas confondre ces possibilités d'extension avec les &lt;a href=&quot;http://pear.php.net&quot;&gt;extensions PEAR&lt;/a&gt;, qui elles sont codées en PHP. Pour les flasheurs, ca correspond à la différence entre les classes fournies avec Flash, codées en AS, et les classes &lt;em&gt;&quot;intrinsic&quot;&lt;/em&gt;, natives au Player Flash. En PHP, il est possible d'en rajouter étant donné que tout se passe sur le serveur ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pour revenir à nos moutons, on trouve dans le repository CVS du PHP Group, une extension en cours de développement nommée &lt;a href=&quot;http://cvs.php.net/pecl/threads/&quot;&gt;php_threads&lt;/a&gt; ... que l'on retrouve dans les extensions PECL des &lt;a href=&quot;http://snaps.php.net&quot;&gt;Snapshots PHP&lt;/a&gt; que ce soit pour la branche stable (4.3.x) ou la branche instable (5.0.x), compilée &lt;a href=&quot;http://snaps.php.net/win32/PECL_UNSTABLE/&quot;&gt;sous forme de dll pour Windows&lt;/a&gt;. N'étant pas expert de l'utilisation des threads, je ne me suis pas encore risqué à l'utiliser, mais pour ceux qui s'y connaissent déjà, voici les fonctions que l'on retrouve dans la source en C de l'extension :&lt;ul&gt;&lt;li&gt;thread_start&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;thread_include&lt;br /&gt;
&lt;li&gt;thread_set&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;thread_get&lt;br /&gt;
&lt;li&gt;thread_mutex_init&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;thread_mutex_destroy&lt;br /&gt;
&lt;li&gt;thread_lock&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;thread_lock_try&lt;br /&gt;
&lt;li&gt;thread_unlock&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
Affaire à suivre donc ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MAJ&lt;/strong&gt; : J'ai trouvé sur le web une autre initiative pour l'implémentation des Threads en PHP, dont la syntaxe me plait beaucoup plus. Elle est faite pour coller complètement à la &lt;a href=&quot;http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html&quot;&gt;syntaxe Java&lt;/a&gt;, avec une approche Objet. Il suffit pour créer un thread de dériver la classe Thread justement ... Les sources sont disponibles au &lt;a href=&quot;http://sitten-polizei.de/php/threads-0.1alpha.tar.gz&quot;&gt;téléchargement&lt;/a&gt;, mais aucune version compilée à priori, ni aucune page dédiée, ou doc. A voir &lt;a href=&quot;http://sitten-polizei.de/php/threads/tests/?file=mythread.php&quot;&gt;l'exemple&lt;/a&gt;, c'est quand-même beaucoup plus convivial qu'un ensemble de fonctions. N'étant qu'un début d'essai de prémice, ce module a de grandes chances d'être &lt;strong&gt;hautement instable&lt;/strong&gt; (lire le README). &lt;strong&gt;A utiliser avec précautions&lt;/strong&gt; donc ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;A voir les sources, l'API du Zend Engine semble vraiment assez accessible, et pour un développeur trés calé, il ne devrait pas être si difficile que ca de finir le travail entamé je pense (faudrait que je me remette au C/C++ moi :P). Il n'y a pas de volontaires ? Ce serait le bonheur de pouvoir avoir une implémentation stable des threads ... ^^&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/06/15/Multi-threading-en-PHP-%3A-vers-une-solution-MAJ#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/06/15/Multi-threading-en-PHP-%3A-vers-une-solution-MAJ#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/219</wfw:commentRss>
      </item>
    
  <item>
    <title>PHP5 : entrainez-vous sur la RC3 !</title>
    <link>http://blog.lalex.com/post/2004/06/08/PHP5-%3A-entrainez-vous-sur-la-RC3</link>
    <guid isPermaLink="false">urn:md5:55f64ed91c5ae59c8ca3a25ea9b074b7</guid>
    <pubDate>Tue, 08 Jun 2004 13:45:13 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;La nouvelle (et normalement dernière) Release de PHP avant la version finale est aujourd'hui disponible sur le site officiel de PHP : &lt;a href=&quot;http://www.php.net/&quot;&gt;http://www.php.net/&lt;/a&gt;. Peu de changements, et donc on en vient logiquement à se dire qu'on est vraiment trés près d'un version finalisée ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En attendant de voir cette version trés attendue sur votre hébergeur préféré, vous pouvez toujours commencer à vous familiariser avec PHP5 en participant au &lt;a href=&quot;http://www.zend.com/php5/contest/contest.php&quot;&gt;Zend PHP5 Contest&lt;/a&gt;, concours de programmation destiné à mettre en avant les nouvelles possibilités offertes par cette mouture de PHP. A la clef, des lots assez sympathiques, comme un Ordinateur portable, ou des mini iPod si vous participez en équipe ! Vous pouvez choisir de développer un des sujets proposés, ou bien choisir votre propre thème.&lt;/p&gt;
&lt;p&gt;Personnellement, j'ai déjà mon projet en tête, et je commence à modéliser un peu le moteur que je m'apprête à développer ! Un indice : nom de code &quot;Pomme&quot; &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_wink.gif&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/06/08/PHP5-%3A-entrainez-vous-sur-la-RC3#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/06/08/PHP5-%3A-entrainez-vous-sur-la-RC3#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/218</wfw:commentRss>
      </item>
    
  <item>
    <title>Abstraction de bases de données avec PEAR</title>
    <link>http://blog.lalex.com/post/2004/05/21/Abstraction-de-bases-de-donnes-avec-PEAR</link>
    <guid isPermaLink="false">urn:md5:18bc5fdf1bbe700f5d49d684d96e0d28</guid>
    <pubDate>Fri, 21 May 2004 11:25:07 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Avec l'arrivée de PHP5, SQLite devient désormais la base de données par défaut associée au langage. Elle offre de nombreux avantages, notamment des performances accrues dans les tâches les plus courantes, mais également la possibilité de se passer d'un serveur de base de données, en stockant ses données dans des fichiers. La transition va donc certainement être longue pour passer d'un système à l'autre (pour peu que les développeurs veuillent le faire), et va nécessiter une reprise importante de tout le code déjà fait concernant les accés aux données. :o&lt;/p&gt;
&lt;p&gt;Même sans cela, il peut être trés pratique de ne pas se limiter à une seule base de données lorsque l'on développe une application dynamique, afin de pouvoir la porter facilement sur différents systèmes. Un des principes de base de la POO qui est à l'origine de la plus grande part des design patterns est d'&lt;strong&gt;encapsuler ce qui peut varier&lt;/strong&gt;. Ainsi, on peut considérer que le moteur de base de données fait partie des paramètres variants d'une application ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://pear.php.net&quot;&gt;PEAR&lt;/a&gt; nous offre une solution avec un package livré par défaut nommé &lt;a href=&quot;http://pear.php.net/package/DB&quot;&gt;DB&lt;/a&gt;. Il s'agit d'une couche logicielle supplémentaire, qui permet d'accéder directement à n'importe quelle base parmi celle supportées, sans se préoccuper du moteur qui tourne derrière. On peut envoyer et récupérer le résultats de requêtes SQL de manière totalement transparente, et de manière plus ou moins avancée.&lt;/p&gt;
&lt;p&gt;Le package permet également d'automatiser les tâches à répétition, et même de générer automatiquement des requêtes d'insertion (INSERT) ou de mise à jour (UPDATE) directement à partir d'un tableau associatif par exemple. Vous trouverez plus d'informations sur &lt;a href=&quot;http://pear.php.net/manual/fr/package.database.php&quot;&gt;la documentation du package&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/05/21/Abstraction-de-bases-de-donnes-avec-PEAR#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/05/21/Abstraction-de-bases-de-donnes-avec-PEAR#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/210</wfw:commentRss>
      </item>
    
  <item>
    <title>Un serveur de sockets entièrement développé en PHP5</title>
    <link>http://blog.lalex.com/post/2004/05/06/Un-serveur-de-sockets-entirement-dvelopp-en-PHP5</link>
    <guid isPermaLink="false">urn:md5:a59d7e9015522a7c2917527a1fc26a83</guid>
    <pubDate>Thu, 06 May 2004 16:06:39 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Un site présenté dans la catégorie &quot;Jeux&quot; du &lt;a href=&quot;http://www.flashfestival.net/2004/&quot;&gt;FlashFestival 2004&lt;/a&gt; représente un chat graphique agrémenté d'un petit jeu bien sympathique, duquel j'ai parfois du mal à décrocher : il s'agit de &lt;a href=&quot;http://www.chimboz.com&quot;&gt;Chimboz&lt;/a&gt;. La particularité de ce site est que son serveur multi-utilisateur est codé en PHP. Du coup, l'envie de m'y remettre m'a pris ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Histoire aussi de me mettre un peu à la nouvelle syntaxe de PHP5, j'ai effectué un mix improbable du patServer dont j'ai déjà parlé dans &lt;a href=&quot;http://www.lalex.com/blog/archives/200403/139-serveur-socket-multiutilisateur-php.html&quot;&gt;ce ticket&lt;/a&gt;, et de la &lt;a href=&quot;http://pear.php.net/package-info.php?package=Net_Server&quot;&gt;version PEAR&lt;/a&gt; de ce même serveur auquel j'ai appliqué ma propre vision du code. J'y utilise les notions de méthodes statiques et de classes abstraites. J'ai implémenté une méthode &lt;em&gt;broadcastEvent&lt;/em&gt; (on sait d'où ca vient :P) qui envoie des évenements à un objet de callback (seulement un seul pour l'instant, je réfléchis à l'utilité de ne pas limiter le nombre d'écouteurs, ce qui serait d'ailleurs trés simple à modifier) ...&lt;/p&gt;
&lt;p&gt;Une classe &lt;strong&gt;SockServerManager&lt;/strong&gt; agit en tant que Factory pour la création de nouveaux serveurs. Pour l'instant, elle se contente de créer une nouvelle instance d'un serveur et de la retourner, mais je prévois de lui faire stocker des références vers chaque serveur crée, et de lancer elle même un serveur avec son propre callback, qui pourra servir à l'administration de tous les serveurs lancés, dans le but de créer une interface d'administration en Flash. &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;L'utilisation de l'instruction &lt;em&gt;socket_select&lt;/em&gt; me permet déjà de ne traiter que les sockets qui ont recu une information, sans toucher aux autres, mais je prévois aussi de me pencher sur tout ce qui est gestion des flux dans PHP, avec l'utilisation de sockets non-bloquants pour faire du pseudo multi-threading ... A ce propos, voici un article d'&lt;a href=&quot;http://www.developerfusion.com/show/28/1/&quot;&gt;introduction au TCP/IP&lt;/a&gt; que j'ai trouvé trés interessant.&lt;/p&gt;
&lt;p&gt;Voila, l'archive contient toutes les classes nécessaires. Attention, le .bat de lancement utilise le chemin complet du php.exe de PHP5, il faut donc le changer si votre version n'est pas installée dans C:\php5\php.exe ... Et il faut également activer l'extension des sockets dans votre php.ini ! Vous n'avez plus qu'à créer votre propre callback, qui peut intercepter les évenements &lt;em&gt;onStart&lt;/em&gt;, &lt;em&gt;onShutdown&lt;/em&gt;, &lt;em&gt;onConnect&lt;/em&gt;, &lt;em&gt;onConnectionRefused&lt;/em&gt;, &lt;em&gt;onReceiveData&lt;/em&gt; et &lt;em&gt;onClose&lt;/em&gt; ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;a href=&quot;http://download.lalex.com/devblog/SockServer.zip&quot; title=&quot;Download SockServer.zip&quot;&gt;::Télécharger SockServer.zip::&lt;/a&gt;&lt;/p&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/05/06/Un-serveur-de-sockets-entirement-dvelopp-en-PHP5#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/05/06/Un-serveur-de-sockets-entirement-dvelopp-en-PHP5#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/206</wfw:commentRss>
      </item>
    
  <item>
    <title>Expressions régulière pour détecter une chaine de caractères</title>
    <link>http://blog.lalex.com/post/2004/04/27/Expressions-rgulire-pour-dtecter-une-chaine-de-caractres</link>
    <guid isPermaLink="false">urn:md5:977b6981964d9d06f9d8c2bc774e36af</guid>
    <pubDate>Tue, 27 Apr 2004 16:16:34 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Durant la réalisation de mon colorisateur de code, un problème qui s'est posé à moi a été la détection de chaine de caractères dans un code source. Le point de blocage essentiel était qu'un chaine de caractère peut être délimitée par une double quote, mais contenir des double quotes échappées, qui ne marquent pas la fin de la chaîne .... Sachant qu'une double quote précédée d'un antislash n'est pas forcément échappée, si cet antislash est lui-même échappé ... par un antislash qui peut lui-même être échappé, etc... 8O&lt;/p&gt;
&lt;p&gt;N'ayant pas trouvé de solution à ce problème, je gérait donc uniquement l'échappement de la double quote, ou l'échappement du l'anti-slash précédent. En fait, je gérait le fait qu'il y ait soit un, soit deux antislash avant une double quote (c'est bon, tout le monde suit la ? :P)&lt;/p&gt;
&lt;p&gt;La solution est en fait tout simple, et elle m'est apparue en parcourant une mailing list dédiée à Python, que je ne retrouve plus ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_redface.gif&quot; alt=&quot;:$&quot; class=&quot;smiley&quot; /&gt; En fait, une chaîne de caractère consiste en :&lt;br /&gt;
&lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_arrow.gif&quot; alt=&quot;:arrow:&quot; class=&quot;smiley&quot; /&gt; un caractère de début (ici, la double quote ou la simple quote)&lt;br /&gt;
&lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_arrow.gif&quot; alt=&quot;:arrow:&quot; class=&quot;smiley&quot; /&gt; une série de caractères qui sont soit un antislash et un caractère (un caractère échappé quoi), soit un caractère différent du délimiteur de départ&lt;br /&gt;
&lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_arrow.gif&quot; alt=&quot;:arrow:&quot; class=&quot;smiley&quot; /&gt; un délimiteur de fin, identique à celui de départ&lt;/p&gt;
&lt;p&gt;Ce qui nous donne en pratique :&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$pattern&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;#((&amp;quot;&lt;/span&gt;|&lt;span style=&quot;color: #ff0000;&quot;&gt;')(?:(?:&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;.)|(?:[^&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;2]))*?&lt;span style=&quot;color: #000099; font-weight: bold;&quot;&gt;\\&lt;/span&gt;2)#is&amp;quot;; &lt;br /&gt;
echo preg_replace($pattern, &amp;quot;[string:begin]$1[string:end]&amp;quot;, $str); &lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
Et voilà, toutes les chaines de caractères apparaissant dans la variable $str seront encadrées par [string:begin]...[string:end]8)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://blog.lalex.com/post/2004/04/27/picts/regex.gif&quot; border=&quot;0&quot; align=&quot;right&quot;/&gt;Quelqu'un me disait récemment &quot;En fait, c'est vachement puissant les expressions régulières&quot; ... Ben oui ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_biggrin.gif&quot; alt=&quot;:D&quot; class=&quot;smiley&quot; /&gt; Pour la peine, je rajoute en bas de mon menu une petite image trouvée chez &lt;a href=&quot;http://www.ericd.net&quot;&gt;ericd&lt;/a&gt; : &lt;strong&gt;&lt;em&gt;&quot;MM PLEASE GIVE US FLASH REGEX&quot;&lt;/em&gt;&lt;/strong&gt; C'est vrai qu'un support natif des expressions régulières dans Flash serait un pur bonheur... Un bel effort existe déjà avec la &lt;a href=&quot;http://www.jurjans.lv/flash/RegExp.html&quot;&gt;classe de Pavils Jurjans&lt;/a&gt;, portée en AS2 par &lt;a href=&quot;http://www.person13.com/blog/archives/000016.html&quot;&gt;par Joey Lott&lt;/a&gt;, mais c'est pas encore ca, notamment en terme de performances ... &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/04/27/Expressions-rgulire-pour-dtecter-une-chaine-de-caractres#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/04/27/Expressions-rgulire-pour-dtecter-une-chaine-de-caractres#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/202</wfw:commentRss>
      </item>
    
  <item>
    <title>Plusieurs version de PHP sur un même serveur web</title>
    <link>http://blog.lalex.com/post/2004/04/26/Plusieurs-version-de-PHP-sur-un-mme-serveur-web</link>
    <guid isPermaLink="false">urn:md5:23ff28ef2e7c878d97c0bdfe76f46a42</guid>
    <pubDate>Mon, 26 Apr 2004 11:56:41 +0000</pubDate>
    <dc:creator>-Alexandre LEGOUT aka LAlex-</dc:creator>
        <category>PHP</category>
            
    <description>    &lt;p&gt;Avec l'arrivée des premières versions de PHP5, il peut être bien pratique d'installer sur un serveur web de développement plusieurs versions de PHP. En effet, avec les modifications profondes de PHP5 en terme de POO, une même syntaxe peut être fonctionnelle ou non. De plus, un paramêtre de configuration du fichier php.ini de PHP5 permet d'assurer la compatibilité ascendante, mais il est peu pratique de modifier le fichier à chaque fois que l'on veut basculer d'une version à l'autre ...&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.miasmatik.net/&quot;&gt;Miasmatik.Net&lt;/a&gt; nous offre une solution pour les serveurs Windows (Apache et IIS) pour simplifier le développement avec plusieurs versions de PHP dans un &lt;a href=&quot;http://miasmatik.maladoc.org/doc.php?d=6&quot;&gt;trés bon article&lt;/a&gt; (attention, cette URL temporaire risque de  changer) ... Il suffit alors d'accéder au serveur local avec la bonne URL pour choisir sa version ! &lt;img src=&quot;http://common.lalex.com/themes/devblog/smilies/icon_cool.gif&quot; alt=&quot;8)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.lalex.com/post/2004/04/26/Plusieurs-version-de-PHP-sur-un-mme-serveur-web#comment-form</comments>
      <wfw:comment>http://blog.lalex.com/post/2004/04/26/Plusieurs-version-de-PHP-sur-un-mme-serveur-web#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.lalex.com/feed/atom/comments/201</wfw:commentRss>
      </item>
    
</channel>
</rss>