<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.llaumgui.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>Le blog de llaumgui - Balise - optimisation</title>
  <link>http://www.llaumgui.com/</link>
  <atom:link href="http://www.llaumgui.com/feed/tag/optimisation/rss2" rel="self" type="application/rss+xml"/>
  <description>Linux en général, Fedora en particulier...</description>
  <language>fr</language>
  <pubDate>Wed, 03 Dec 2008 15:54:44 +0100</pubDate>
  <copyright>http://creativecommons.org/licenses/by-nc-nd/2.5/</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>llaumgui.com à l'heure Solar</title>
    <link>http://www.llaumgui.com/post/llaumgui.com-%C3%A0-l-heure-Solar</link>
    <guid isPermaLink="false">urn:md5:882c1430491fba0ef5145b2e56de0998</guid>
    <pubDate>Wed, 05 Nov 2008 20:36:00 +0100</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Geek Attitude</category>
        <category>Dotclear</category><category>Fedora</category><category>MooTools</category><category>optimisation</category><category>thème</category>    
    <description>    &lt;p&gt;Derrière ce jeu de mots à  0,3€ (2 balles pour ceux qui compte encore en Francs), ce petit billet annonce plusieurs mises à jours sur mon blog :&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Mise à jour vers &lt;a hreflang=&quot;fr&quot; href=&quot;http://www.dotclear.net/&quot; title=&quot;Prenez le contrôle de votre blog !&quot;&gt;Dotclear&lt;/a&gt; 2.1 : Finger in the nose et &lt;a href=&quot;http://www.dotclear.net/blog/post/2008/11/01/Sortie-de-Dotclear-2.1&quot; hreflang=&quot;fr&quot; title=&quot;Sortie de Dotclear 2.1&quot;&gt;les nouvelles fonctionnalités du moteur de blog annoncent des futures mises à jour encore plus simples&lt;/a&gt; ;-).&lt;/li&gt;
&lt;li&gt;Mise à jour vers &lt;a href=&quot;http://mootools.net/&quot; hreflang=&quot;en&quot; title=&quot;MooTools is a compact, modular, Object-Oriented JavaScript framework designed for the intermediate to advanced JavaScript developer&quot;&gt;MooTools&lt;/a&gt; 1.2.1 ainsi que &lt;a href=&quot;http://mootools.floor.ch/blog/?p=23&quot; hreflang=&quot;en&quot;&gt;FormCheck 1.4rc6&lt;/a&gt;, le tout vite fait grâce à &lt;a href=&quot;http://www.llaumgui.com/themes/nodoka/js/compressor.sh&quot;&gt;mon scripts de compression JS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Et pour finir, sans doute le plus visible, comme le thème de ce blog est fortement inspiré de &lt;a style=&quot;font-style: italic;&quot; hreflang=&quot;en&quot; href=&quot;http://fedoraproject.org/wiki/Artwork/NodokaTheme&quot; title=&quot;Artwork/NodokaTheme&quot;&gt;Nodoka&lt;/a&gt;, le thème de &lt;a href=&quot;http://fedoraproject.org/&quot; hreflang=&quot;fr&quot;&gt;Fedora&lt;/a&gt;, j'en ai aussi profité pour habiller le bandeau avec le thème de Fedora 10 : Solar (d'où le jeu de mots)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et comme j'avais les mains dans le cambouis, j'en ai profité pour gagner quelques points sur &lt;a href=&quot;http://developer.yahoo.com/performance/&quot; hreflang=&quot;en&quot; title=&quot;Exceptional Performance&quot;&gt;l'échelle d'optimisation de Yahoo&lt;/a&gt;: en passant le grade C avec 70% (si t'as pas compris, c'est pas grave). Sur ce, je pense que je peux sereinement aller manger &lt;img src=&quot;/themes/default/smilies/wink.png&quot; alt=&quot;;-)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/llaumgui.com-%C3%A0-l-heure-Solar#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/llaumgui.com-%C3%A0-l-heure-Solar#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/460</wfw:commentRss>
      </item>
    
  <item>
    <title>ezoescript et ezoecss : 2 bonnes surprises dans ezoe</title>
    <link>http://www.llaumgui.com/post/ez-publish-ezoescript-et-ezoecss-2-bonnes-surprises-dans-ezoe</link>
    <guid isPermaLink="false">urn:md5:41840323ade6a09f5d2fb127cccd39ee</guid>
    <pubDate>Fri, 13 Jun 2008 21:08:00 +0200</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>CSS</category><category>eZ Publish</category><category>ezoe</category><category>javascript</category><category>optimisation</category><category>php</category>    
    <description>&lt;p&gt;Pour ceux qui ont suivi &lt;a href=&quot;http://www.llaumgui.com/post/Optimiser-ses-javascripts-%3A-le-cas-de-mootools&quot; hreflang=&quot;fr&quot; title=&quot;Optimiser ses javascripts : le cas de mootools&quot;&gt;mon précédent billet sur l'optimisation des javascripts&lt;/a&gt;, vous l'aurez compris : je suis sensibilisé à l'optimisation des sites web et notamment (entre autre) à la préconisation &lt;a href=&quot;http://developer.yahoo.com/&quot; hreflang=&quot;en&quot;&gt;Yahoo! Developer Network&lt;/a&gt; :&amp;quot;&lt;a href=&quot;http://developer.yahoo.com/performance/rules.html#minify&quot; hreflang=&quot;en&quot;&gt;Minify JavaScript and CSS&lt;/a&gt;&amp;quot;.
Cette préconisation suggère de réduire les CSS et les javascript en nombre et en poids. Dans le meilleur des cas, il faudrait donc n'avoir qu'une feuille CSS et qu'un fichier Javascript de poids raisonable.&lt;/p&gt;


&lt;p&gt;Pour &lt;a href=&quot;http://www.llaumgui.com/post/Le-planet-de-Fedora-Fr-sous-eZ-Publish&quot; hreflang=&quot;fr&quot; title=&quot;Le planet de Fedora-Fr sous eZ Publish&quot;&gt;la migration du planet Fedora-Fr sous eZ Publish&lt;/a&gt;, j'avais pour intention de développer une extension &lt;a href=&quot;http://ez.no/&quot; hreflang=&quot;en&quot; title=&quot;eZ Publish Open Source Enterprise Content Management System&quot;&gt;eZ Publish&lt;/a&gt; intégrant un minifier JS/CSS. J'étais parti pour utiliser &lt;a href=&quot;http://code.google.com/p/jsmin-php/&quot; hreflang=&quot;en&quot; title=&quot;This is a fast, low-overhead port of Douglas Crockford's JSMin JavaScript minifier to PHP. It requires PHP 5 or higher&quot;&gt;JSMin&lt;/a&gt; qui, certes est moins &lt;em&gt;puissant&lt;/em&gt; que &lt;a href=&quot;http://developer.yahoo.com/yui/compressor/&quot; hreflang=&quot;en&quot; title=&quot;Yahoo! UI Library: YUI Compressor&quot;&gt;YUI&lt;/a&gt; ou &lt;a href=&quot;http://dean.edwards.name/packer/&quot; hreflang=&quot;en&quot;&gt;packer&lt;/a&gt; mais qui offre le double avantage d'être full &lt;a href=&quot;http://php.net/&quot;&gt;php&lt;/a&gt; (YUI utilise JAVA) et surtout de ne pas trop altérer le source à grands coups d'&lt;a href=&quot;http://www.w3schools.com/jsref/jsref_eval.asp&quot; hreflang=&quot;en&quot;&gt;eval&lt;/a&gt; (comme le fait packer).&lt;/p&gt;


&lt;p&gt;Mais au final, j'ai fait le choix de ne pas utiliser le système de design d'eZ Publish et de continuer à stocker le design (CSS, images, JS) de chaque sous-domaine (www, planet, forums, doc, etc..) dans un sous domaine commun (common). Au final, que vous soyez sur le planet, l'accueil ou sur les forums de &lt;a href=&quot;http://www.fedora-fr.org&quot; hreflang=&quot;fr&quot; title=&quot;Site de support de la distribution Linux Fedora&quot;&gt;fedora-fr&lt;/a&gt;, vous ne téléchargerez qu'une fois les images et les feuilles de styles.&lt;/p&gt;    &lt;p&gt;Bref, comme vous l'aurez compris, j'avais laissé tomber la chose... Puis en furetant dans &lt;a href=&quot;http://svn.ez.no/svn/extensions/eztinymce/trunk/ezoe/&quot;&gt;le code source&lt;/a&gt; de &lt;a href=&quot;http://ez.no/developer/forum/extensions/call_for_testers_new_online_editor&quot; hreflang=&quot;en&quot; title=&quot;Call for testers: new Online Editor&quot;&gt;la future version&lt;/a&gt; d'&lt;a href=&quot;http://ez.no/doc/extensions/online_editor/4_x&quot; hreflang=&quot;en&quot; title=&quot;The eZ Publish Online Editor (OE for short) is an extension that allows you to create formatted pages using an intuitive interface&quot;&gt;online editor&lt;/a&gt; : ezoe pour les intimes; je suis tombé sur la classe &lt;a href=&quot;http://svn.ez.no/svn/extensions/eztinymce/trunk/ezoe/autoloads/ezoepacker.php&quot;&gt;ezoepacker&lt;/a&gt;. À la lecture du &lt;a href=&quot;http://svn.ez.no/svn/extensions/eztinymce/trunk/ezoe/autoloads/eztemplateautoload.php&quot;&gt;templateautoload&lt;/a&gt; j'ai déduit qu'ezoe proposait 2 &lt;a href=&quot;http://ezpedia.org/wiki/en/ez/template_operators&quot; hreflang=&quot;en&quot; title=&quot;Template Operators&quot;&gt;opérateurs de template&lt;/a&gt; forts sympatiques : &lt;strong&gt;ezoescript&lt;/strong&gt; et &lt;strong&gt;ezoecss&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;Pour faire court, ezoescript et ezoecss remplacent la syntaxe classique d'eZ, qui avait pour résultat de multiplier les CSS et les JS :&lt;/p&gt;

&lt;code class=&quot;html4strict&quot;&gt;{section name=JavaScript loop=ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ) }&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;a href=&quot;http://december.com/html/4/element/script.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;script&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;language&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;JavaScript&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;src&lt;/span&gt;=&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;concat&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'javascript/'&lt;/span&gt;,$:item &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;|ezdesign&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
{/section}&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;a href=&quot;http://december.com/html/4/element/style.html&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;style&lt;/span&gt;&lt;/a&gt; &lt;span style=&quot;color: #000066;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
{section var=css_file loop=ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' )}&lt;br /&gt;
&amp;nbsp; &amp;nbsp; @import url({concat( 'stylesheets/',$css_file )|ezdesign});&lt;br /&gt;
{/section}&lt;br /&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;&lt;em&gt;On notera au passage que &lt;a href=&quot;http://developer.yahoo.com/performance/rules.html#css_top&quot; hreflang=&quot;en&quot; title=&quot;Put Stylesheets at the Top &amp;amp; Put Scripts at the Bottom&quot;&gt;contrairement à ce que préconise Yahoo&lt;/a&gt;, le JS est chargé avant le CSS...&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Bref, tout ça est remplacé par :&lt;/p&gt;
&lt;code class=&quot;html4strict&quot;&gt;{ezoescript( &amp;nbsp; &amp;nbsp;ezini( 'JavaScriptSettings', 'JavaScriptList', 'design.ini' ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; true, 'text/javascript', 'javascript', 3 )}&lt;br /&gt;
{ezoecss( &amp;nbsp; &amp;nbsp; &amp;nbsp; ezini( 'StylesheetSettings', 'CSSFileList', 'design.ini' ),&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; true, 'all', 'text/css', 'stylesheet', 3 )}&lt;/code&gt;


&lt;h2&gt;ezoecss&lt;/h2&gt;

&lt;p&gt;ezoecss va récupérer toutes les CSS pour n'en faire qu'une. Cette dernière sera stockée dans le cache et sera de la forme 1 ligne par feuille CSS.&lt;/p&gt;


&lt;h2&gt;ezoescript&lt;/h2&gt;

&lt;p&gt;Malheureusement ezoescript n'est pas un vrai minifier JS au sens strict du terme. En effet, point de code sur une seule ligne ni de renommage des variables et fonctions. ezoescript se contente de supprimer les sauts de ligne et les commentaires avant de stocker le fichier en cache. L'avantage c'est qu'il ne présente aucune contrainte de codage pour fonctionner (jusqu'au niveau 2 du moins). J'ai cependant émis sur les forums la suggestion de le coupler à un vrai minifier et &lt;em&gt;André R&lt;/em&gt;. ne semble pas fermé à ce genre d'idée...&lt;/p&gt;



&lt;p&gt;Déçu de ne pas pouvoir faire joujou avec ces 2 opérateurs sur fedora-fr, je les ai utilisé sur un projet professionnel sur lequel j'avais une problématique forte d'optimisation. Je doit avouer être satisfait du résultat.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Remarque :&lt;/strong&gt; Si vous utilisez les réécriture d'url, attention à rajouter les lignes qui vont bien dans votre virtualhost.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/ez-publish-ezoescript-et-ezoecss-2-bonnes-surprises-dans-ezoe#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/ez-publish-ezoescript-et-ezoecss-2-bonnes-surprises-dans-ezoe#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/434</wfw:commentRss>
      </item>
    
  <item>
    <title>IPBSDK et la (mauvaise) gestion des attachements</title>
    <link>http://www.llaumgui.com/post/ipbsdk-et-la-mauvaise-gestion-des-attachements</link>
    <guid isPermaLink="false">urn:md5:279b18d9cb54f26ad58f1a5ce6cb198d</guid>
    <pubDate>Fri, 23 Sep 2005 15:51:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>cache</category><category>IPB</category><category>IPBSDK</category><category>optimisation</category><category>php</category>    
    <description>&lt;p&gt;Plus j'avance dans le débugage du &lt;a href=&quot;http://ipbsdk.sourceforge.net&quot; hreflang=&quot;en&quot;&gt;IPBSDK&lt;/a&gt; et le développement de mon portail, plus je me rends compte qu'il n'y a pas de cohésion entre les différentes fonctions qui compose ce SKD.
En effet, prenons l'exemple de la gestion des attachements qui fait 1 requête par attachement alors qu'il est si simple d'utiliser une fonction récupérant tout les attachements d'un message... Le pire est que cette fonction existe ! Mais les 2 ne sont pas reliées. Rassurez vous, je vous livre mon code à rajouter dans la classe &lt;a href=&quot;http://www.llaumgui.com/post/heritage-du-ipbsdk-1-theorie&quot; hreflang=&quot;fr&quot;&gt;MySDK&lt;/a&gt;.&lt;/p&gt;    &lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Get a post's attachments&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Gestion d'une mise en cache.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @author Guillaume Kulakowski &amp;lt;guillaume_AT_llaumgui_DOT_com&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @author Pita &amp;lt;peter@randomnity.com&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @since 1.11&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param integer $postid The post id to check&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param boolean $override Whether to override permissions or not.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return array Post's attachments&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; get_post_attachments&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$postid&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$override&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&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;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$query&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$override&lt;/span&gt; == &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$query&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot; AND attach_approved=1&amp;quot;&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&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; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot; &amp;nbsp; &amp;nbsp;SELECT *&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FROM ibf_attachments&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WHERE attach_pid='&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$postid&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;'&amp;quot;&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$query&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get_num_rows&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: #cc66cc;&quot;&gt;0&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&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;$row&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;fetch_row&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$return&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$row&lt;/span&gt;; &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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;_cache&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'post_attachments'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$postid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$return&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Get HTML code for outputting an attachment image.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Utilisation d'un cache.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @author Guillaume Kulakowski &amp;lt;guillaume_AT_llaumgui_DOT_com&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @since 1.11&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param integer $postid The post id to check&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param integer $id The attachment id to be parsed.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param boolean $override Whether to override permissions or not.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return string HTML code&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @see attachment_info(), attachment_thumb()&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; attachment_image&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$pid&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$id&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$override&lt;/span&gt;=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* On récupère tous les attachements du poste :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&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;$this&lt;/span&gt;-&amp;gt;_cache&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'post_attachments'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&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; &amp;nbsp; &amp;nbsp; &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;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get_post_attachments&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$pid&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Ancien sysèmeme, au cas où :&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&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;$this&lt;/span&gt;-&amp;gt;_cache&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'post_attachments'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;attachment_info&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$id&lt;/span&gt;,&lt;span style=&quot;color: #0000ff;&quot;&gt;$override&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_is_image'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; == &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &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: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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;span style=&quot;color: #b1b100;&quot;&gt;foreach&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;_cache&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'post_attachments'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$pid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$value&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$value&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_id'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; == &lt;span style=&quot;color: #0000ff;&quot;&gt;$id&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$value&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/*&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;* Gestion des miniatures :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&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;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_thumb_location'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$out&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;lt;img src=&amp;quot;'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;board_url&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'/uploads/'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_location'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;quot; alt=&amp;quot;'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_file'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;quot; /&amp;gt;'&lt;/span&gt;; &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: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$out&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;lt;a href=&amp;quot;'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;board_url&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'/index.php?act=Attach&amp;amp;type=post&amp;amp;amp;id='&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_id'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;board_url&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'/uploads/'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_thumb_location'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;quot; class=&amp;quot;attach&amp;quot; alt=&amp;quot;'&lt;/span&gt;.&lt;span style=&quot;color: #0000ff;&quot;&gt;$att&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'attach_file'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;.&lt;span style=&quot;color: #ff0000;&quot;&gt;'&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;'&lt;/span&gt;; &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: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$out&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&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;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/ipbsdk-et-la-mauvaise-gestion-des-attachements#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/ipbsdk-et-la-mauvaise-gestion-des-attachements#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/49</wfw:commentRss>
      </item>
    
  <item>
    <title>Quels services désactiver sous Fedora Core 4</title>
    <link>http://www.llaumgui.com/post/quels-services-desactiver-sous-fedora-core-4</link>
    <guid isPermaLink="false">urn:md5:e30726bc0ec3129ce44140cd578d1981</guid>
    <pubDate>Fri, 26 Aug 2005 04:17:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Linux</category>
        <category>Fedora</category><category>Fedora Core 4</category><category>optimisation</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://fedora.redhat.com/&quot; hreflang=&quot;us&quot;&gt;Fedora Core&lt;/a&gt; 4 est configuré par défaut pour lancer plus de services qu'il en a besoin.&lt;br /&gt;
Dans &lt;a href=&quot;http://fedoranews.org/mediawiki/index.php/Fedora_Weekly_News_Issue_10#Which_Services_Can_I_Disable.3F&quot; hreflang=&quot;us&quot;&gt;son édition hebdomadaire n°10&lt;/a&gt;, &lt;a href=&quot;http://www.fedoranews.org&quot; hreflang=&quot;us&quot;&gt;Fedora News&lt;/a&gt; publie un excellent article de &lt;a href=&quot;http://fedoranews.org/mediawiki/index.php/Tejas_Dinkar&quot; hreflang=&quot;us&quot;&gt;Tejas Dinkar&lt;/a&gt; intitulé &amp;quot;&lt;em&gt;&lt;a href=&quot;http://fedoranews.org/mediawiki/index.php/Which_Services_Can_I_Disable%3F&quot; hreflang=&quot;us&quot;&gt;Which Services Can I Disable?&lt;/a&gt;&lt;/em&gt;&amp;quot;.&lt;/p&gt;    &lt;p&gt;Malheureusement en anglais, l'article est cependant facile d'accès et permet de mieux comprendre certain services et de se rendre compte qu'au final ils ne nous servent pas ou peu.&lt;br /&gt;
J'ai ainsi pu alléger mon système de quelques services via le gestionnaire de services (&lt;em&gt;Environnement de bureau / Paramètres de système / Paramètres de serveur / Services&lt;/em&gt;).&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt;&lt;a href=&quot;http://www.llaumgui.com/public/images/linux/configuration%20du%20service.png&quot;&gt;&lt;img src=&quot;http://www.llaumgui.com/public/images/linux/.configuration%20du%20service_s.jpg&quot; alt=&quot;Gestionnaire de services&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Au final, le gain n'est pas si négligeable que ça... Pour ma station de travail, ne reste plus que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;acpid&lt;/li&gt;
&lt;li&gt;anacron&lt;/li&gt;
&lt;li&gt;auditd&lt;/li&gt;
&lt;li&gt;crond&lt;/li&gt;
&lt;li&gt;cups&lt;/li&gt;
&lt;li&gt;cups-config-daemon&lt;/li&gt;
&lt;li&gt;firestarter (A la place d'iptables)&lt;/li&gt;
&lt;li&gt;haldaemon&lt;/li&gt;
&lt;li&gt;kudzu&lt;/li&gt;
&lt;li&gt;lm_sensors&lt;/li&gt;
&lt;li&gt;messagebus&lt;/li&gt;
&lt;li&gt;netfs&lt;/li&gt;
&lt;li&gt;network&lt;/li&gt;
&lt;li&gt;ntpd (J'aime avoir l'heure juste)&lt;/li&gt;
&lt;li&gt;nvidia-glx (J'ai une carte graphique Nvidia) &lt;/li&gt;
&lt;li&gt;smb&lt;/li&gt;
&lt;li&gt;sshd&lt;/li&gt;
&lt;li&gt;syslog&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/quels-services-desactiver-sous-fedora-core-4#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/quels-services-desactiver-sous-fedora-core-4#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/39</wfw:commentRss>
      </item>
    
  <item>
    <title>IPB-SDK, les guests et le cache</title>
    <link>http://www.llaumgui.com/post/ipb-sdk-les-guests-et-le-cache</link>
    <guid isPermaLink="false">urn:md5:f64765ff10c4e0f42c26dc25ab0fde02</guid>
    <pubDate>Tue, 31 May 2005 19:44:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>cache</category><category>IPB</category><category>IPBSDK</category><category>optimisation</category><category>php</category><category>XPerience-Fr</category>    
    <description>&lt;p&gt;Ayant recodé le système de débug pour mon site, j'ai analysé les requêtes MySQL. J'ai effectué l'analyse logué en membre et délogué comme simple invité. La logique voudrait qu'un membre demande plus de requête du fait qu'il interroge sa boite de message privé, récupère ses infos, etc. Hors sous IPB-SDK c'est l'inverse.&lt;/p&gt;    &lt;p&gt;Le listing des requêtes faite ressortir une requête identique qui se répète plusieurs fois (5 fois dans mon cas) :&lt;/p&gt;

&lt;code class=&quot;sql&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; m.*, me.signature, me.avatar_size, me.avatar_location, me.avatar_type, me.vdirs,&lt;br /&gt;
me.location, me.msnname, me.interests, me.yahoo, me.website, me.aim_name, me.icq_number,&lt;br /&gt;
g.*, cf.*&lt;br /&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; ibf_members m&lt;br /&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;LEFT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;JOIN&lt;/span&gt; ibf_groups g &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;ON&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;m.mgroup=g.g_id&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;LEFT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;JOIN&lt;/span&gt; ibf_pfields_content cf &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;ON&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;cf.member_id=m.id&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;LEFT&lt;/span&gt; &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;JOIN&lt;/span&gt; ibf_member_extra me &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;ON&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;me.id=m.id&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; m.id=&lt;span style=&quot;color: #ff0000;&quot;&gt;'0'&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Le constat est rapide. Il n'y a pas de membre à l'id = 0. La requête retourne rien donc alimente le cache avec rien. De ce fait une interrogation du cache ne retourne rien et ré-effectue la requête.
La fonction concernée par ce problème et la fonction &lt;strong&gt;get_advinfo()&lt;/strong&gt; que j'ai redéfinie pour qu'elle tienne compte des invités.&lt;/p&gt;

&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/**&lt;br /&gt;
* Grabs detailed information on a member.&lt;br /&gt;
* Modification : Gestion des guest.&lt;br /&gt;
* @author Guillaume Kulakowski &amp;lt;guillaume_AT_llaumgui_DOT_com&amp;gt;&lt;br /&gt;
* @author Pita (conversion to 2.0) &amp;lt;peter@randomnity.com&amp;gt;&lt;br /&gt;
* @author Cow &amp;lt;khlo@global-centre.com&amp;gt;&lt;br /&gt;
* @param integer $memberid&lt;br /&gt;
* @return array Member Information, or FALSE on failure&lt;br /&gt;
* @see get_info(),get_avatar(),get_raw_sig(),get_photo(),get_member_pips(),get_member_icon(),get_num_new_posts(),get_skin_id()&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; get_advinfo&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&lt;/span&gt; = &lt;span style=&quot;color: #ff0000;&quot;&gt;''&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;
&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;!&lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;member&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'id'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Gestion des guests non présentes de base ! :&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&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;$memberid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; || &lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&lt;/span&gt; == &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$cache&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get_cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'get_advinfo'&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&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; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$cache&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&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 m.*, me.signature, me.avatar_size, me.avatar_location, me.avatar_type, me.vdirs,&lt;br /&gt;
me.location, me.msnname, me.interests, me.yahoo,&lt;br /&gt;
me.website, me.aim_name, me.icq_number,&lt;br /&gt;
g.*, cf.*&lt;br /&gt;
FROM ibf_members m&lt;br /&gt;
LEFT JOIN ibf_groups g ON (m.mgroup=g.g_id)&lt;br /&gt;
LEFT JOIN ibf_pfields_content cf ON (cf.member_id=m.id)&lt;br /&gt;
LEFT JOIN ibf_member_extra me ON (me.id=m.id)&lt;br /&gt;
WHERE m.id='&amp;quot;&lt;/span&gt; . &lt;a href=&quot;http://www.php.net/intval&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;intval&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;$memberid&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&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;&lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;get_num_rows&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;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #0000ff;&quot;&gt;$info&lt;/span&gt; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;fetch_row&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;&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;save_cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'get_advinfo'&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$memberid&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;$info&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$info&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;FALSE&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&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;Dans le cas d'&lt;a href=&quot;http://www.xperience-fr.net&quot; hreflang=&quot;fr&quot;&gt;XPerience-Fr&lt;/a&gt;, cette fonction étant utilisée plusieurs fois, j'économise ainsi 5 requêtes MySQL sur la page d'accueil. Vous pouvez en gagner plus ou moins selon votre code.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Cache ipbSDK vs cache IPB</title>
    <link>http://www.llaumgui.com/post/cache-ipbsdk-vs-cache-ipb</link>
    <guid isPermaLink="false">urn:md5:c43e1e49d40397e0622564560966b59a</guid>
    <pubDate>Sat, 28 May 2005 11:19:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>cache</category><category>IPB</category><category>IPBSDK</category><category>optimisation</category><category>php</category>    
    <description>&lt;p&gt;Afin d'afficher 2 blocs d'informations supplémentaires sur ma page d'accueil, je me suis mis à étudier les requêtes MySQL engendrées par le ipbSDK afin d'en réduire leur nombre et de pouvoir en mettre 2 de plus pour mes 2 blocs :).
Et la surprise :&lt;/p&gt;    &lt;code class=&quot;sql&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; ibf_cache_store &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; cs_key &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;IN&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;'banfilters'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'settings'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'group_cache'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'systemvars'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'skin_id_cache'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'forum_cache'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'moderators'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'stats'&lt;/span&gt;, &lt;span style=&quot;color: #ff0000;&quot;&gt;'languages'&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;

&lt;code class=&quot;sql&quot;&gt;&lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt; cs_value &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;FROM&lt;/span&gt; ibf_cache_store &lt;span style=&quot;color: #993333; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt; cs_key = &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;stats&amp;quot;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;A quoi sert de charger les informations issue du cache IPB (1ère requête), si la fonction get_board_stats() ne les utilise pas ???!!!
La réponse est malheureusement simple, le cache ipbSDK (&lt;strong&gt;$this-&amp;gt;_CACHE&lt;/strong&gt;) et celui d'IPB (&lt;strong&gt;$GLOBALS&lt;a href=&quot;http://www.llaumgui.com/post/'ibforums'&quot; title=&quot;'ibforums'&quot;&gt;'ibforums'&lt;/a&gt;-&amp;gt;cache&lt;/strong&gt;) sont différents... J'ai d'abord pensé charger le cache IPB dans celui du SDK:&lt;/p&gt;

&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;_cache = &lt;span style=&quot;color: #0000ff;&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;cache&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Mais quel intêret de 2 cache identique ?
Et de plus je trouvais que leur vocations étaient différentes car le cache du SDK pouvais contenir des informations sur le membres et non pas uniquement sur le forum... J'ai donc modifié la fonction get_board_stats() pour qu'elle interroge non pas le cache ipbSDK mais celui d'IPB. Bilan, 1 requêtes de gagnée !!!&lt;/p&gt;

&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/**&lt;br /&gt;
* Obtenir les statistiques de mon forums.&lt;br /&gt;
* Modification : Liaison avec le cache IPB au lieu de celui du SDK.&lt;br /&gt;
* @author Guillaume Kulakowski &amp;lt;guillaume_AT_llaumgui_DOT_com&amp;gt;&lt;br /&gt;
* @author Pita (conversion to 2.0) &amp;lt;peter_AT_randomnity.com&amp;gt;&lt;br /&gt;
* @author Cow &amp;lt;khlo_AT_global-centre.com&amp;gt;&lt;br /&gt;
* @return array Board Statistics&lt;br /&gt;
*/&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; get_board_stats&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;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// 1 : Je cherche dans le cache IPB :&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; !&lt;a href=&quot;http://www.php.net/empty&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;empty&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;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'stats'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; &lt;a href=&quot;http://www.php.net/is_array&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;is_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;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'stats'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&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: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #b1b100;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'stats'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #b1b100;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&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;'SELECT cs_value FROM ibf_cache_store WHERE cs_key = &amp;quot;stats&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$row&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; = &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;DB&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;fetch_row&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$stats&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= &lt;a href=&quot;http://www.php.net/unserialize&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;unserialize&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/stripslashes&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;stripslashes&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;$row&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'cs_value'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&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; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'ibforums'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;cache&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;'stats'&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt; &amp;nbsp; &amp;nbsp; = &amp;nbsp;&lt;span style=&quot;color: #0000ff;&quot;&gt;$stats&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &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;$stats&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;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;A noter que la modification utilise ma &lt;a href=&quot;http://www.llaumgui.com/post/heritage-du-ipbsdk-1-theorie&quot; hreflang=&quot;fr&quot;&gt;classe MySQL&lt;/a&gt; et que je n'ai pas modifié la fonction du SDK mais que je l'ai redéfinie.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/cache-ipbsdk-vs-cache-ipb#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/cache-ipbsdk-vs-cache-ipb#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/28</wfw:commentRss>
      </item>
    
  <item>
    <title>Bien débuter le développement d'une application web niveau sécurité</title>
    <link>http://www.llaumgui.com/post/bien-debuter-le-developpement-dune-application-web-niveau-securite</link>
    <guid isPermaLink="false">urn:md5:a68eba55e4edf8feb8e5795599b97c9a</guid>
    <pubDate>Sun, 01 May 2005 23:02:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>MySQL</category><category>optimisation</category><category>php</category><category>sécurité</category>    
    <description>&lt;p&gt;Suite à &lt;a href=&quot;http://ipb2.ipbr-fr.com/index.php?showtopic=1053&quot; hreflang=&quot;fr&quot;&gt;une discutions sur les forums d'IPBR-Fr&lt;/a&gt; initiée par Darken, et à la critique émise lors de &lt;a href=&quot;http://www.llaumgui.com/post/boutique-en-ligne-autopsie-dune-faille-de-securite&quot; hreflang=&quot;fr&quot;&gt;mon précédent billet&lt;/a&gt; : je me demande, comment bien partir dans le développement d'application web (Ou mod IPB) du point de vu sécurité ?
En effet, la question de la sécurité doit être pensé lors du développement et non après coup.&lt;/p&gt;    &lt;h2&gt;I. Ne plus utiliser de fonction dévaluées :&lt;/h2&gt;
&lt;p&gt;php est un langage en perpétuelle évolution. Certaines vieilles fonctions sont toujours supportées dans les dernières versions mais sont fortements dévaluées... Pour des raisons de sécurité et de compatibilité dans les futures versions, éviter de telles fonctions se révèle une bonne chose.&lt;br /&gt;
Ainsi, par exemple, on préfèrera &lt;span style=&quot;color: blue;&quot;&gt;$_SESSION['TOTO']&lt;/span&gt; à &lt;span style=&quot;color: blue;&quot;&gt;session_register()&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;II. register_global = Off  :&lt;/h2&gt;
&lt;p&gt;L'un des point de sécurité les plus important celon moi.&lt;br /&gt;
Depuis php 4.2, register_global prend la valeur off et &lt;a href=&quot;http://www.php.net&quot; hreflang=&quot;us&quot;&gt;php.net&lt;/a&gt; préconise de le laisser comme ça. Malheureusement trop de script ne tourne pas en environnement register_global = off, ce qui fait que les serveurs professionnels tourne sous On. Cela n'est pas grave en soit si vous avez développé votre application en Off car elle sera sécurisée.&lt;/p&gt;
&lt;p&gt;Imaginez que vous utilisiez une variable $login pour identifier un visiteur de votre site et que vous n'ayez pas travaillé dans un environnement registerglobal = On. Si $login n'est pas présent dans la session, php ira le chercher dans le cookie puis dans les supers variables POST et GET... Comment savoir d'où est affectée cette variable dans ce cas là ?&lt;/p&gt;
&lt;p&gt;La réponse est simple, si vous devez chercher cette variable dans la session, faite &lt;strong&gt;$_SESSION['login']&lt;/strong&gt;, dans un cookie : &lt;strong&gt;$_COOKIE['login']&lt;/strong&gt; et dans &lt;strong&gt;$_POST&lt;/strong&gt; et &lt;strong&gt;$_GET&lt;/strong&gt; pour les autres supers variables. Ainsi, vous saurez exactement d'où provient la valeur prise par une variable et pourrez la contrôler.&lt;/p&gt;
&lt;h2&gt;III. Typage de variable :&lt;/h2&gt;
&lt;p&gt;Le point fort de php est d'être facile à apprendre et entreprendre. De ce fait, il n'y a pas de typage des variables à proprement parler...&lt;br /&gt;
De cette facilité, née une faille de sécurité dont l'une des principales conséquences sont les injonctions SQL (Objet d'un prochain billet).&lt;br /&gt;
Forcer le typage des variables issues notamment de $_GET et surtout celle qui ne sont pas des chaînes de caractère se révèle donc indispensable.&lt;br /&gt;
Ainsi si notre variable $login représente un identifiant entier nous la récupèrerons ainsi :&lt;/p&gt;
&lt;div style=&quot;color: blue; text-align: center;&quot;&gt;$login_id = intval(@$_GET['login'])&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;La sécurité dans le domaine du web est devenue un point primordial de tout développement. Au risque de me répéter, cette question doit être abordée lors de l'analyse/conception de votre application.&lt;br /&gt;
Quel variables dois je récupérer à partir de super variables ? Comment dois je passer certaines informations de page en page ? Cookies ou sessions ? Sont autant de question non négligeable.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/bien-debuter-le-developpement-dune-application-web-niveau-securite#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/bien-debuter-le-developpement-dune-application-web-niveau-securite#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/27</wfw:commentRss>
      </item>
    
  <item>
    <title>php, base de données et couche d'abstraction 2 (Compteur de requêtes)</title>
    <link>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-2-compteur-de-requetes</link>
    <guid isPermaLink="false">urn:md5:5714171ee74200622479dfc9abc20f7c</guid>
    <pubDate>Tue, 18 Jan 2005 19:57:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>MySQL</category><category>optimisation</category><category>php</category><category>SGBD</category>    
    <description>&lt;p&gt;Nous avons &lt;a href=&quot;http://www.llaumgui.com/post/php-base-de-donnees-et-couche-d39abstraction-1-principe&quot; title=&quot;fr&quot;&gt;Vu précédement&lt;/a&gt; le principe des couches d'abstraction dans la gestion des SGBD. Maintenant allons plus loin et réalisons un compteur de requêtes.&lt;/p&gt;    &lt;p&gt;Prenons l'exemple d'une base de donées MySQL. Si vous avez bien compris le principe de la couche d'abstraction, vous devez avoir une classe avec une fonction ressemblant à celle si :&lt;/p&gt;

&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; database &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/* [...]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* On passe la partie connexion à la base de données et définition des variables de la classe&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*(Notament Countquery qui doit être initialisé à 0).&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* [..]&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;function&lt;/span&gt; query&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;$query&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// On réalise la requête MySQL&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;Query&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: #0000ff;&quot;&gt;$query&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; or &lt;a href=&quot;http://www.php.net/die&quot;&gt;&lt;span style=&quot;color: #000066;&quot;&gt;die&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;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;error_msg&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;$query&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;// Compteur de requête :&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #0000ff;&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;Countquery&lt;/span&gt;++;&lt;br /&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;$this&lt;/span&gt;-&amp;gt;&lt;span style=&quot;color: #006600;&quot;&gt;Query&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Nous avons donc établi un compteur de requête qui s'incrémente à chaque appel de la fonction &lt;em&gt;query()&lt;/em&gt;. Nous pouvons aller plus loin est stoker les requêtes dans un tableau afin de les afficher ultérieurement.&lt;/p&gt;

&lt;fieldset class=&quot;links&quot;&gt;&lt;legend&gt;Poursuivre l'aventure : &lt;/legend&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.llaumgui.com/post/php-base-de-donnees-et-couche-d39abstraction-1-principe&quot; hreflang=&quot;fr&quot;&gt;php, base de données et couche d'abstraction 1 (Principe)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;php, base de données et couche d'abstraction 2 (Compteur de requêtes).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-1-driver-mysql&quot; hreflang=&quot;fr&quot;&gt;php, base de données et couche d'abstraction 3 (Driver MySQL)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;/fieldset&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-2-compteur-de-requetes#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-2-compteur-de-requetes#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/9</wfw:commentRss>
      </item>
    
  <item>
    <title>php, base de données et couche d'abstraction 1 (Principe)</title>
    <link>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-d39abstraction-1-principe</link>
    <guid isPermaLink="false">urn:md5:1e923194b112928e45dad7a1fd46dba4</guid>
    <pubDate>Wed, 12 Jan 2005 14:57:00 +0000</pubDate>
    <dc:creator>llaumgui</dc:creator>
        <category>Développement web</category>
        <category>MySQL</category><category>optimisation</category><category>php</category><category>SGBD</category>    
    <description>&lt;p&gt;Jusqu'a présent, le système de gestion de base de données (&lt;strong&gt;SGBD&lt;/strong&gt;) par excellence avec &lt;a href=&quot;http://www.php.net&quot; hreflang=&quot;US&quot;&gt;php&lt;/a&gt; était &lt;a href=&quot;http://www.mysql.com&quot; hreflang=&quot;US&quot;&gt;MySQL&lt;/a&gt;. L'arrivé de php5 et sa future démocratisation bouscule cette donne en mettant en avant le SGBD &lt;a href=&quot;http://www.sqlite.org/&quot; hreflang=&quot;US&quot;&gt;SQLite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comment passer le MySQL à SQLite facilement? Juste en modifiant une seule variable? C'est là qu'interviennent les &lt;strong&gt;couches d'abstraction&lt;/strong&gt;.&lt;/p&gt;    &lt;h2&gt;Qu'est ce qu'un couche d'abstraction?&lt;/h2&gt;
&lt;p&gt;De même que des drivers différents permettent l'utilisation d'une périphérie hardware à des systèmes différents; une couche d'abstraction permettra au même code php d'&lt;em&gt;attaquer&lt;/em&gt; des bases de données différentes.&lt;/p&gt;
&lt;h2&gt;Comment?&lt;/h2&gt;
&lt;p&gt;Tout simplement car le code n'&lt;em&gt;attaque&lt;/em&gt; pas la base de données mais la couche d'abstraction que nous appellerons &lt;strong&gt;drivers&lt;/strong&gt;.&lt;/p&gt;
&lt;p class=&quot;center&quot;&gt;&lt;img src=&quot;http://www.llaumgui.com/public/images/web/abstraction_php_sgbd.gif&quot; alt=&quot;Exemple de couche d'abstraction de SGBD&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ainsi après avoir instancié les drivers adéquates (On peut passer par  une variable pour lancer cette instance ce qui permet de changer de drivers en modifiant une seule variable!!!) :&lt;/p&gt;
&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: rgb(255, 128, 0);&quot;&gt;// Récupération du drivers :
&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;require_once &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;ROOT_PATH&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(221, 0, 0);&quot;&gt;&amp;quot;kernel/&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;$CONF&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: rgb(221, 0, 0);&quot;&gt;'DB_SGBD'&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;].&lt;/span&gt;&lt;span style=&quot;color: rgb(221, 0, 0);&quot;&gt;&amp;quot;.php&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;;
&lt;br /&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 128, 0);&quot;&gt;// Instanciation :
&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;$DB             &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;Database&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;();
&lt;br /&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(255, 128, 0);&quot;&gt;// Connexion à la base de données :
&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;$DB&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;
&lt;p&gt;Une requête ce fait alors de la sorte :&lt;/p&gt;
&lt;code class=&quot;php&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;
$DB&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 187);&quot;&gt;query&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(221, 0, 0);&quot;&gt;&amp;quot;REQUETE&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 119, 0);&quot;&gt;)
&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;
&lt;p&gt;Pour changer de SGBD, il suffit alors de coder de nouveaux drivers et de changer une variable&lt;br /&gt;
L'utilisation de drivers prend légèrement plus de temps pour lancer le développement, mais les mises à jour sont bien plus aisées. Alors pourquoi s'en priver ?&lt;/p&gt;
&lt;p&gt;La prochaine étape et d'aller encore plus loin avec les couches d'abstraction en y introduisant des fonctions en plus comme celles de débugage par exemple.&lt;/p&gt;
&lt;fieldset class=&quot;links&quot;&gt;&lt;legend&gt;Poursuivre l'aventure : &lt;/legend&gt;&lt;ul&gt;
&lt;li&gt;php, base de données et couche d'abstraction 1 (Principe).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-2-compteur-de-requetes&quot; hreflang=&quot;fr&quot;&gt;php, base de données et couche d'abstraction 2 (Compteur de requêtes)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.llaumgui.com/post/php-base-de-donnees-et-couche-dabstraction-1-driver-mysql&quot; hreflang=&quot;fr&quot;&gt;php, base de données et couche d'abstraction 3 (Driver MySQL)&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/fieldset&gt;</description>
    
    
    
          <comments>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-d39abstraction-1-principe#comment-form</comments>
      <wfw:comment>http://www.llaumgui.com/post/php-base-de-donnees-et-couche-d39abstraction-1-principe#comment-form</wfw:comment>
      <wfw:commentRss>http://www.llaumgui.com/feed/atom/comments/8</wfw:commentRss>
      </item>
    
</channel>
</rss>