<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="fr">
  
  <title type="html">Wamania.com</title>
  <subtitle type="html">PHP5, MVC, Ajax, Jquery, Ubuntu, Aedituus, sécurité, tout ça en un seul blog.</subtitle>
  
  <link href="http://www.wamania.com/" rel="alternate" type="text/html" title="PHP5, MVC, Ajax, Jquery, Ubuntu, Aedituus, sécurité, tout ça en un seul blog." />
  <updated>2009-07-10T09:28:40+02:00</updated>
  <author>
    <name>wamania</name>
  </author>
  <id>urn:md5:064b153f139bd3500425cc462814f129</id>
  <generator uri="http://www.dotclear.net/">Dotclear</generator>
  
    
  <link rel="self" href="http://feeds.feedburner.com/Wamania" type="application/atom+xml" /><feedburner:browserFriendly></feedburner:browserFriendly><entry>
    <title>Aedituus - 2.0.5</title>
    <link href="http://www.wamania.com/post/Aedituus-205" rel="alternate" type="text/html" title="Aedituus - 2.0.5" />
    <id>urn:md5:ca5bc729659247d6d25606c94da68fe3</id>
    <updated>2009-07-10T11:27:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Aedituus</dc:subject>
            
    <content type="html">    &lt;p&gt;L'aedituus est un espace membre sécurisé, vous trouverez plus d'explication ici &lt;br /&gt;
&lt;a href="http://www.wamania.com/pages/Aedituus-Espace-membre-securise" hreflang="fr"&gt;http://www.wamania.com/pages/Aedituus-Espace-membre-securise&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Le lien pour le télécharger depuis le forum&amp;nbsp;: &lt;br /&gt;
&lt;a href="http://aedituus.wamania.com/viewtopic.php?f=3&amp;amp;t=44" hreflang="fr"&gt;http://aedituus.wamania.com/viewtopic.php?f=3&amp;amp;t=44&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
et voici le changelog&lt;br /&gt;
&lt;a href="http://aedituus.wamania.com/viewtopic.php?f=4&amp;amp;t=43" hreflang="fr"&gt;http://aedituus.wamania.com/viewtopic.php?f=4&amp;amp;t=43&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Cette version corrige quelques bugs, et modifie légèrement la config par défaut pour être moins strict vis-à-vis des comportements jugés "normaux"&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Aedituus-205#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/27</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Spotify - le Deezer killer</title>
    <link href="http://www.wamania.com/post/Spotify-le-Deezer-killer" rel="alternate" type="text/html" title="Spotify - le Deezer killer" />
    <id>urn:md5:2bb615deb42f3fa9da29e91351ddb259</id>
    <updated>2009-04-07T11:45:00+02:00</updated>
    <author><name>Wam mania</name></author>
            
    <content type="html">    &lt;p&gt;&lt;a href="http://www.wamania.com/public/theweb/spotify.jpg"&gt;&lt;img src="http://www.wamania.com/public/theweb/.spotify_m.jpg" alt="spotify.jpg" style="display:block; margin:0 auto;" title="spotify.jpg, avr 2009" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Deezer, c'était une bonne idée, mais l'interface, la qualité de son, et le peu de titre (vive les liens youtubes) ont fait que j'ai pas accroché du tout.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Spotify corrige tout ça&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C'est un vrai logiciel à installer (compatible M$, mac, et même ubuntu (enfin...wine))&lt;/li&gt;
&lt;li&gt;Qualité de son plutôt bonne&lt;/li&gt;
&lt;li&gt;Riche&lt;/li&gt;
&lt;li&gt;Et surtout, très simple à utiliser&amp;nbsp;!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encore en béta sur invitation, j'ai pu malgré tout m'inscrire sans invit par cette URL&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;a href="https://www.spotify.com/en/get-started/" hreflang="en"&gt;https://www.spotify.com/en/get-started/&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Spotify-le-Deezer-killer#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/25</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Windows 7 béta en téléchargement - Hurry up</title>
    <link href="http://www.wamania.com/post/Windows-7-beta-en-telechargement-Hurry-up" rel="alternate" type="text/html" title="Windows 7 béta en téléchargement - Hurry up" />
    <id>urn:md5:13efd4383fe80968217419afe73785e0</id>
    <updated>2009-02-05T18:17:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Osef ta life</dc:subject>
            
    <content type="html">&lt;p&gt;Je viens tout juste de télécharger la version béta de Windows 7 que M$ met gracieusement à disposition des geeks.&lt;br /&gt;
Mais attention&amp;nbsp;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;It’s almost over! Windows 7 Beta downloads will only be available for a few more days, so be sure to complete your download right away.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Et 2.4Go, ça prend du temps...&lt;/p&gt;    &lt;p&gt;On va enfin pouvoir savoir si M$ va continuer dans la voie de vista (Dans l'échec et vive l'oem) ou alors, comme c'est prévu, de faire quelque chose de potable et "léger", qui puisse satisfaire les utilisateurs sans avoir besoin de les forcer...
&lt;a href="http://www.microsoft.com/windows/windows-7/beta-download.aspx" hreflang="fr"&gt;http://www.microsoft.com/windows/windows-7/beta-download.aspx&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Windows-7-beta-en-telechargement-Hurry-up#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/24</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Installation de XEN sur un serveur OVH</title>
    <link href="http://www.wamania.com/post/Installation-de-XEN-sur-un-serveur-OVH" rel="alternate" type="text/html" title="Installation de XEN sur un serveur OVH" />
    <id>urn:md5:a82fef994e2b18893f9de0b6cc97ebfb</id>
    <updated>2009-01-22T15:22:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Serveur</dc:subject>
            
    <content type="html">&lt;h2&gt;Xen&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://fr.wikipedia.org/wiki/Xen" hreflang="fr"&gt;Xen&lt;/a&gt; est un logiciel de paravirtualisation ou hyperviseur. Ses performances proches du natif en font un système très utilisé sur des serveurs en production.
Les avantages de tels systèmes sont facilement identifiable&amp;nbsp;: Isolement des types de serveurs (mail, web, etc...), possibilité de sauvegarde/transfert d'un serveur complet assez simplement, accès shell possible par utilisateur par serveur.&lt;/p&gt;    &lt;h2&gt;Prérequis et précision&lt;/h2&gt;

&lt;p&gt;Tout d'abord, un peu de vocabulaire&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dom0&amp;nbsp;: serveur sûr lequel est installé Xen et qui supporte les serveur virtuels&lt;/li&gt;
&lt;li&gt;DomU&amp;nbsp;: les serveurs virtuels (que j'appellerais aussi desfois vservers)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sur le Dom0, on suppose qu'une &lt;strong&gt;Ubuntu Hardy Heron&lt;/strong&gt; est déjà installée et à jour. Je ne détaillerais que l'installation d'un DomU, aussi sous Ubuntu Hardy Heron.&lt;br /&gt;
Nous utiliserons une configuration en mode &lt;strong&gt;route&lt;/strong&gt; avec une &lt;strong&gt;IP failover&lt;/strong&gt; fournie par OVH.&lt;/p&gt;


&lt;h2&gt;Grub&lt;/h2&gt;

&lt;p&gt;Sur les distrib d'OVH, c'est tjs LILO qui est installé par défaut. Or il est vraiment pas pratique de booter sur le noyau Xen avec lilo. Hormis si vous voulez vraiment bidouiller, il va falloir remettre Grub. Je suppose que vous êtes déjà connecté en SSH sur votre Dom0, on peut donc commencer&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; grub mdadm initramfs-tools&lt;/code&gt;


&lt;p&gt;Ensuite on cherche le nom du disk dur&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; fdisk -l&lt;br /&gt;
&lt;br /&gt;
Disque /dev/sda: &lt;span style="color: #000000;"&gt;250.0&lt;/span&gt; Go, &lt;span style="color: #000000;"&gt;250059350016&lt;/span&gt; octets&lt;br /&gt;
&lt;span style="color: #000000;"&gt;255&lt;/span&gt; heads, &lt;span style="color: #000000;"&gt;63&lt;/span&gt; sectors/track, &lt;span style="color: #000000;"&gt;30401&lt;/span&gt; cylinders&lt;br /&gt;
Units = cylindres of &lt;span style="color: #000000;"&gt;16065&lt;/span&gt; * &lt;span style="color: #000000;"&gt;512&lt;/span&gt; = &lt;span style="color: #000000;"&gt;8225280&lt;/span&gt; bytes&lt;br /&gt;
Identifiant disque: 0x0cf1421a&lt;br /&gt;
&lt;br /&gt;
Périphérique Amorce &amp;nbsp; &amp;nbsp;Début &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Fin &amp;nbsp; &amp;nbsp; &amp;nbsp;Blocs &amp;nbsp; &amp;nbsp;Id &amp;nbsp;Système&lt;br /&gt;
/dev/sda1 &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;1&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;392&lt;/span&gt; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;3148708&lt;/span&gt;+ &amp;nbsp;&lt;span style="color: #000000;"&gt;83&lt;/span&gt; &amp;nbsp;Linux&lt;br /&gt;
/dev/sda2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;393&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;30336&lt;/span&gt; &amp;nbsp; &lt;span style="color: #000000;"&gt;240525180&lt;/span&gt; &amp;nbsp; &lt;span style="color: #000000;"&gt;83&lt;/span&gt; &amp;nbsp;Linux&lt;br /&gt;
/dev/sda3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;30337&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000;"&gt;30401&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #000000;"&gt;522112&lt;/span&gt;+ &amp;nbsp;&lt;span style="color: #000000;"&gt;82&lt;/span&gt; &amp;nbsp;Linux swap / Solaris&lt;/code&gt;


&lt;p&gt;C'est donc /dev/sda chez moi, si vous êtes en RAID, vous aurez sûrement un /dev/sdb aussi&lt;/p&gt;


&lt;p&gt;On installe&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; grub-&lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; --recheck /dev/sda&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; grub&lt;br /&gt;
&amp;gt;root &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;hd0,&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;gt;find /boot/grub/stage2 &lt;span style="color: #808080; font-style: italic;"&gt;# si pas trouvé, essayer &lt;span style="color: #c20cb9; font-weight: bold;"&gt;find&lt;/span&gt; grub/stage2&lt;/span&gt;&lt;br /&gt;
&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; hd&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;,&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hd&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000;"&gt;1&lt;/span&gt;,&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;# vous obtenez ceci si vous êtes en RAID&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# on utilise le résultat &lt;span style="color: #c20cb9; font-weight: bold;"&gt;du&lt;/span&gt; find&lt;/span&gt;&lt;br /&gt;
&amp;gt;setup &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;hd0&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;gt;setup &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;hd1&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #808080; font-style: italic;"&gt;# uniquement si vous êtes en RAID&lt;/span&gt;&lt;br /&gt;
&amp;gt;quit&lt;/code&gt;


&lt;p&gt;Bon, grub est installé, mais surtout, il ne faut pas rebooter, car le fichier menu.lst avec les différentes entrées de grub n'est pas créé.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour le créer, on va pas s'embêter&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; ubuntu-xen-server&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# il vous demandera alors&lt;/span&gt;&lt;br /&gt;
Could not &lt;span style="color: #c20cb9; font-weight: bold;"&gt;find&lt;/span&gt; /boot/grub/menu.lst &lt;span style="color: #c20cb9; font-weight: bold;"&gt;file&lt;/span&gt;. Would you like /boot/grub/menu.lst generated &lt;span style="color: #000000; font-weight: bold;"&gt;for&lt;/span&gt; you? &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;y/N&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# Répondez alors y pour créer le menu.lst&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Y a plus qu'à reboot&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;uname&lt;/span&gt; -r&lt;/code&gt;

&lt;p&gt;Vous devriez voir votre noyau Xen.&lt;br /&gt;
Voilà un morceau très pénible de terminé. Ça peut vite devenir sacrément énervant si grub n'est pas ou mal installé et qu'il faut utiliser l'horrible système rescue d'OVH. Personnellement, avec cette méthode appliquée à la lettre, je n'ai jamais eu de soucis, mais j'ai vraiment galéré pour trouver l'install correcte.&lt;/p&gt;


&lt;h2&gt;Xen&lt;/h2&gt;


&lt;p&gt;Commençons par une modification préconisée par Xen&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Dans /etc/modules,&lt;/p&gt;
&lt;code class="text"&gt;[...]&lt;br /&gt;
loop max_loop=64&lt;/code&gt;


&lt;p&gt;Ensuite créez le répertoire qui va contenir les images des disques durs de nos DomU&lt;br /&gt;
Vous pouvez bien sûr le mettre où vous voulez&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mkdir&lt;/span&gt; /home/xen&lt;/code&gt;


&lt;p&gt;Pour le réseau, nous utiliserons le mode "route". En effet, OVH ne supporte pas le mode bridge (par défaut dans Xen) et le NAT ne permet pas d'avoir un accès SSH indépendant. Pour cela, il faut modifier &lt;br /&gt;
sudo vim /etc/xen/xend-config.sxp&lt;br /&gt;
en commentant les entrées correspondant au bridge et en décommentant les entrées &lt;strong&gt;route&lt;/strong&gt; suivante&amp;nbsp;:&lt;/p&gt;
&lt;code class="text"&gt;(network-script 'network-route netdev=eth0')&lt;br /&gt;
(vif-script &amp;nbsp; &amp;nbsp; vif-route)&lt;/code&gt;

&lt;p&gt;Il faut aussi y ajouter le netdev=eth0 tel que ci-dessus.&lt;br /&gt;
On redémarre ensuite xend&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; /etc/init.d/xend restart&lt;/code&gt;


&lt;h2&gt;1er Dom U&lt;/h2&gt;

&lt;p&gt;Personnellement, je préfère mettre toutes les options directement dans la ligne de commande que dans la config de Xen, ça permet d'être sûr du DomU qu'on crée sans avoir à chaque fois à regarder comment on avait configurer.&lt;/p&gt;


&lt;h3&gt;IP failover&lt;/h3&gt;

&lt;p&gt;Dans votre interface OVH de votre dédié, vous avez dans la rubrique service un lien qui s'appelle &lt;strong&gt;IP failover&lt;/strong&gt;&lt;br /&gt;
Suivant le serveur que vous avez, cette option sera peut-être payante.&lt;br /&gt;
Créez donc une IP et notez la.&lt;/p&gt;


&lt;h3&gt;Création du domU&lt;/h3&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; xen-create-image --debootstrap --&lt;span style="color: #007800;"&gt;dir=&lt;/span&gt;/home/xen --&lt;span style="color: #007800;"&gt;size=&lt;/span&gt;10Gb --&lt;span style="color: #007800;"&gt;memory=&lt;/span&gt;512Mb --&lt;span style="color: #007800;"&gt;fs=&lt;/span&gt;ext3 --&lt;span style="color: #007800;"&gt;dist=&lt;/span&gt;hardy --&lt;span style="color: #007800;"&gt;hostname=&lt;/span&gt;xen1.exemple.com --&lt;span style="color: #007800;"&gt;ip=&lt;/span&gt;&lt;span style="color: #000000;"&gt;87.98&lt;/span&gt;&lt;span style="color: #000000;"&gt;.123&lt;/span&gt;&lt;span style="color: #000000;"&gt;.123&lt;/span&gt; --&lt;span style="color: #007800;"&gt;netmask=&lt;/span&gt;&lt;span style="color: #000000;"&gt;255.255&lt;/span&gt;&lt;span style="color: #000000;"&gt;.255&lt;/span&gt;&lt;span style="color: #000000;"&gt;.0&lt;/span&gt; --&lt;span style="color: #007800;"&gt;swap=&lt;/span&gt;1024Mb --&lt;span style="color: #007800;"&gt;arch=&lt;/span&gt;i386 --&lt;span style="color: #007800;"&gt;kernel=&lt;/span&gt;/boot/vmlinuz&lt;span style="color: #000000;"&gt;-2.6&lt;/span&gt;&lt;span style="color: #000000;"&gt;.24&lt;/span&gt;&lt;span style="color: #000000;"&gt;-22&lt;/span&gt;-xen --&lt;span style="color: #007800;"&gt;mirror=&lt;/span&gt;http://archive.ubuntu.com/ubuntu/ --&lt;span style="color: #c20cb9; font-weight: bold;"&gt;passwd&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;Il faut bien sûr adapter&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;--ip correspond à l'IP failover créée ci-dessus (j'ai mis une IP (fictive) pour la forme, mais dans la suite, je l'appelerais IP_DOMU)&lt;/li&gt;
&lt;li&gt;--dir correspond à notre répertoire ou sont stockées les images, à adapter si vous avez changé&lt;/li&gt;
&lt;li&gt;--hostname correspond au nom de notre domU, je vous conseille un nom pleinement qualifié (sous la forme host.domain.ext et pas seulement host). Par exemple, pour un mail, vous pouvez simplement mettre mail.votre-domaine.com&lt;/li&gt;
&lt;li&gt;--arch peut-être amd64 ou i386&lt;/li&gt;
&lt;li&gt;--kernel est à adapté en fonction de votre noyau (uname -r pour savoir la version installée)&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Il vous demandera alors un mot de passe qui sera le futur pass root, donc lâchez vous.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Une fois votre domU créé, il va falloir éditer son fichier de config. Si le hostname était xen1.exemple.com, alors éditez&lt;br /&gt;
sudo vim /etc/xen/xen1.exemple.com.cfg&lt;/p&gt;
&lt;code class="text"&gt;#remplacer file par tap:aio dans &lt;br /&gt;
disk &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'file:/home/xen/domains/xen1.exemple.com/swap.img,xvda1,w',&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'file:/home/xen/domains/xen1.exemple.com/disk.img,xvda2,w',&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ]&lt;br /&gt;
&lt;br /&gt;
# Vous aurez donc&lt;br /&gt;
disk &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;= [&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'tap:aio:/home/xen/domains/xen1.exemple.com/swap.img,xvda1,w',&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'tap:aio:/home/xen/domains/xen1.exemple.com/disk.img,xvda2,w',&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ]&lt;/code&gt;


&lt;h2&gt;Lancement du domU&lt;/h2&gt;

&lt;code class="bash"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;# à adapter bien sûr&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; xm create /etc/xen/xen1.exemple.com.cfg&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# une fois lancée, on peut vérifier avec &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; xm list&lt;/code&gt;


&lt;p&gt;On entre alors dans notre domU par&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; xm console xen1.exemple.com&lt;/code&gt;


&lt;p&gt;Une fois loggué dans votre domU, nous allons brancher Internet, c'est mieux pour un serveur. Editez
sudo vim /etc/network/interfaces&lt;/p&gt;
&lt;code class="text"&gt;# et faites ressembler à ça ([source|http://forum.ovh.com/showthread.php?t=41020|fr])&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
&amp;nbsp;address IP_DOMU&lt;br /&gt;
&amp;nbsp;netmask 255.255.255.0&lt;br /&gt;
&amp;nbsp;post-up /sbin/ip route add default dev eth0&lt;/code&gt;

&lt;p&gt;Avec l'IP qui correspond à votre IP failover&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Éditez ensuite le fichier /etc/resolv.conf&lt;br /&gt;
Nous devons y mettre l'adresse de serveur DNS, en effet, l'install de base n'est pas capable de résoudre de nom. J'utilise les serveurs d'&lt;a href="https://www.opendns.com/smb/start" hreflang="en"&gt;OpenDNS&lt;/a&gt;&lt;br /&gt;
208.67.222.222 et 208.67.220.220&lt;br /&gt;
à l'heure ou j'écris&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Votre /etc/resolv.conf doit ressembler à ceci&lt;/p&gt;
&lt;code class="text"&gt;nameserver 127.0.0.1&lt;br /&gt;
nameserver 208.67.222.222&lt;br /&gt;
nameserver 208.67.220.220&lt;br /&gt;
search ovh.net&lt;/code&gt;


&lt;p&gt;Redémarrez votre vserver (sudo reboot) et retournez dans la console (sudo xm console xen1.exemple.com) dès que vous en sortez. Relogguez vous en root&lt;br /&gt;
On commence par mettre en français&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get update&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; language-pack-fr&lt;/code&gt;


&lt;p&gt;On édite (ou crée)
sudo vim  /etc/default/locale&lt;/p&gt;
&lt;code class="text"&gt;LANG=&amp;quot;fr_FR.UTF-8&amp;quot;&lt;/code&gt;

&lt;p&gt;On reboot pour avoir en Français&lt;br /&gt;
Puis le traditionnel&amp;nbsp;:&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get update&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get upgrade&lt;/code&gt;

&lt;p&gt;&lt;ins&gt;&lt;em&gt;A ce stade, vous pouvez vous connecter directement en SSH au Vserver en utilisant l'IP failover&lt;/em&gt;&lt;/ins&gt;&lt;/p&gt;


&lt;h2&gt;Un peu plus loin&lt;/h2&gt;

&lt;p&gt;L'install d'ubuntu par ce biais est vraiment très légère. Vous pouvez donc commencer par installer le minimum&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; ubuntu-standard&lt;/code&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Installation-de-XEN-sur-un-serveur-OVH#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/22</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Le tigre</title>
    <link href="http://www.wamania.com/post/Le-tigre" rel="alternate" type="text/html" title="Le tigre" />
    <id>urn:md5:a1669ca85de1b7b479a95aa345a92a2c</id>
    <updated>2009-01-15T11:28:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>The web</dc:subject>
            
    <content type="html">    &lt;p&gt;Je parlais hier de vie privée.
Ma bien-aimée vient de m'envoyer ce lien, j'en ai encore de gros gros frissons.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.lepost.fr/article/2009/01/14/1386577_merci-le-web-2-la-vie-d-un-internaurte-devoile-au-grand-jour.html" hreflang="fr"&gt;http://www.lepost.fr/article/2009/01/14/1386577_merci-le-web-2-la-vie-d-un-internaurte-devoile-au-grand-jour.html&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;q&gt;"Bon anniversaire, Marc (prénom d'emprunt). Le 5 décembre 2008, tu fêteras tes vingt-neuf ans. Tu permets qu'on se tutoie, Marc&amp;nbsp;? Tu ne me connais pas, c'est vrai. Mais moi, je te connais très bien. C'est sur toi qu'est tombée la (mal)chance d'être le premier portrait Google du Tigre. Une rubrique toute simple&amp;nbsp;: on prend un anonyme et on raconte sa vie grâce à toutes les traces qu'il a laissées, volontairement ou non sur Internet. Comment ça, un message se cache derrière l'idée de cette rubrique&amp;nbsp;? Évidemment&amp;nbsp;: l'idée qu'on ne fait pas vraiment attention aux informations privées disponibles sur Internet, et que, une fois synthétisées, elles prennent soudain un relief inquiétant. Mais sache que j'ai plongé dans ta vie sans arrière-pensée&amp;nbsp;: j'adore rencontrer des inconnus. Je préfère te prévenir&amp;nbsp;: ce sera violemment impudique, à l'opposé de tout ce qu'on défend dans Le Tigre. Mais c'est pour la bonne cause&amp;nbsp;; et puis, après tout, c'est de ta faute&amp;nbsp;: tu n'avais qu'à faire attention."&lt;/q&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Le-tigre#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/20</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Informations privées ou privées ?</title>
    <link href="http://www.wamania.com/post/Informations-privees-ou-privees" rel="alternate" type="text/html" title="Informations privées ou privées ?" />
    <id>urn:md5:f362d432f8a630a823147cf433e7c121</id>
    <updated>2009-01-14T16:10:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>The web</dc:subject>
            
    <content type="html">&lt;p&gt;&lt;strong&gt;&lt;ins&gt;Privée&lt;/ins&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Qui n'est pas ouvert au public&lt;/li&gt;
&lt;li&gt;Intime, personnel&lt;/li&gt;
&lt;li&gt;Qui appartient à qq'un&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Privée&lt;/strong&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Participe passé du verbe priver.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Priver possède 7 synonymes&amp;nbsp;: &lt;strong&gt;appauvrir, démunir, dépouiller, déshériter, détrôner, frustrer, sevrer.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;&lt;em&gt;Alors vos infos sur le web, elles sont privées ou privées ?&lt;/em&gt;&lt;/p&gt;    &lt;h2&gt;Facebook&lt;/h2&gt;


&lt;p&gt;&lt;a href="http://fr-fr.facebook.com/terms.php" hreflang="fr"&gt;&lt;/a&gt;
&lt;q&gt;En publiant un Contenu utilisateur sur tout ou partie du Site, vous concédez expressément à la Société, et vous garantissez détenir les droits nécessaires à cet effet, une licence irrévocable, perpétuelle, non exclusive, transférable et pour le monde entier sans rétribution financière de sa part (y compris le droit de concéder des sous-licences), d'utiliser, copier, représenter, diffuser, reformater, traduire, extraire (en tout ou partie) et distribuer ce Contenu utilisateur, à des fins commerciales, publicitaires ou autres, sur le Site ou en relation avec le Site (ou dans le cadre de sa promotion), de créer des œuvres dérivées du Contenu utilisateur ou de l'incorporer à d'autres créations, et d'en concéder des sous-licences des éléments cités.&lt;/q&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En gros, le seul truc qui t'appartient encore, c'est le droit d'auteur irrévocable. Facebook lui, garde tous les droits d'utilisation.&lt;br /&gt;
Les utilisateurs sont relativement familiers avec la sauvegarde de la vie privée, surtout en France. Mais il faut bien comprendre que ce n'est pas une règle, et que le CGU (Condition Générale d'Utilisation) sont vraiment importantes. N'oubliez pas non plus que le site n'est pas Français, alors pour les recours en justice, vous pouvez vous lever de bonne heure... Enfin, n'oubliez pas que Facebook garde trace de tout, même si vous l'effacez. En gros, comme pour google, une fois mis en ligne, c'est trop tard pour réfléchir.&lt;/p&gt;


&lt;p&gt;En parlant de Google&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Google Chrome&lt;/h2&gt;

&lt;p&gt;Bien heureusement, les CGU de chrome ne sont plus ce qu'elles étaient initialement.&lt;br /&gt;
&lt;q&gt;En fournissant, publiant ou affichant le contenu, vous accordez à Google une licence permanente, irrévocable, mondiale, gratuite et non exclusive permettant de reproduire, adapter, modifier, traduire, publier, présenter en public et distribuer tout Contenu que vous avez fourni, publié ou affiché sur les Services ou par le biais de ces derniers.&lt;/q&gt;&lt;/p&gt;


&lt;p&gt;Ça n'empêche pas google de pomper toutes les infos possibles sur votre navigation afin de mieux cibler la pub.&lt;br /&gt;
Car c'est bien de ça qu'il s'agit, de la pub ciblée. Facebook en est d'ailleurs le plus beau modèle, puisque votre profil facebook est sûrement le plus riche et le plus réaliste de vos profils sur le web. Les autres étant souvent cachés par un pseudo et peu d'infos valables.&lt;/p&gt;


&lt;h2&gt;Google&lt;/h2&gt;

&lt;p&gt;Ce n'est pas un secret, Google enregistre tout, et le terme "googlisé" est maintenant quasi-courant.&lt;br /&gt;
Cherchez donc votre prénom et votre nom dans google voir l'image que vous avez sur le web.&lt;br /&gt;
Aller faire un tour sur &lt;a href="http://www.123people.com" hreflang="fr"&gt;http://www.123people.com&lt;/a&gt;  aussi, voir l'étendue des dégats.&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Mail&lt;/h2&gt;

&lt;p&gt;La protection de son mail est un dur labeur. A commencer par les chaînes, même si les internautes commencent à réaliser que la leucémie ne peut tuer qu'une fois par petite fille, il reste encore beaucoup de travail. Ces chaînes, ainsi que la réponses au spam, ont un intérêt majeur&amp;nbsp;: remplir les bases de données de mails des méchants spammeurs qui spameront encore plus.
N'hésitez pas à renvoyer un lien vers &lt;a href="http://www.hoaxbuster.com" hreflang="fr"&gt;http://www.hoaxbuster.com&lt;/a&gt; aux personnes envoyant des chaines, si possible avec un article sur la chaîne qu'ils viennent d'envoyer. Cette pratique est très efficace car elle fait vraiment prendre conscience à quel point c'est ridicule.&lt;br /&gt;
J'ai reçu aujourd'hui une chaîne contenant au total plus de 200 mails valides, 200 victimes potentielles qui n'ont probablement pas donné leur autorisation pour la diffusion de leur mail....&lt;/p&gt;


&lt;p&gt;Personnellement, j'ai mon adresse mail intacte depuis environ 8 ans (hormis encore qqs chaînes).&lt;br /&gt;
Pour vous aider, il y a plusieurs moyen&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les boîtes mail jetables&amp;nbsp;: &lt;a href="http://www.jetable.org/fr/index" hreflang="fr"&gt;&lt;/a&gt;  &lt;a href="http://www.kasmail.com/" hreflang="fr"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Les mails "secondaires" de yahoo, que j'utilise depuis très longtemps. En gros, on a un (ou plusieurs) autres mails qui pointent vers la boite principale, quand un des mails secondaires est vraiment pourris, on le vire.&lt;/li&gt;
&lt;li&gt;Évitez de mettre votre vrai mail partout, voire même si vous hésitez, enregistrez-vous une première fois avec un mail bidon, jugez le site, puis inscrivez vous avec votre vrai mail. Si vous devez donner votre mail à quelqu'un, pensez à l'écrire de façon éclatée, de sorte qu'un robot ne puisse pas le lire.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Comme tout bon "utilisateur" d'un ordinateur, l'internaute ne VEUT pas savoir comment ça marche, il veut que ça marche. Tant que les utilisateurs n'auront pas une attitude responsable sur Internet au même titre qu'à l'extérieur, on aura toujours du monde pour faire suivre les chaînes, pour nourrir d'infos croustillantes des pages visibles par les milliers de personnes, et dont on en cède le contenu sans même le savoir et pire, sans même s'en inquiéter.&lt;br /&gt;
Derrière le divertissement qu'amène certains sites et le coté pratique de certains outils, n'oubliez pas que c'est pas gratos.&lt;br /&gt;
Même si je défends le libre, je ne suis pas contre rentabiliser une activité sur le web. Mais certains sites, comme facebook, valent maintenant autant que la joconde, c'est à dire un prix indéfinisablement monstreux alors que le prix réel se rapproche d'un morceau de toile et de 10 tubes de peintures. &lt;br /&gt;
&lt;strong&gt;La seule valeur de ces sites est leur potentiel publicitaire.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Bon surf (et soutenez Wikipedia, bien plus utile à l'humanité que fessebouc)&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Informations-privees-ou-privees#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/19</wfw:commentRss>
      </entry>
    
  <entry>
    <title>OS javascript</title>
    <link href="http://www.wamania.com/post/OS-javascript" rel="alternate" type="text/html" title="OS javascript" />
    <id>urn:md5:30103dbc46487aa1ebda9d6102dbb027</id>
    <updated>2008-12-23T15:19:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Jquery</dc:subject>
            
    <content type="html">&lt;p&gt;Depuis quelques temps déjà, la mode des OS online est en train de s'installer. Plus communément appelés &lt;a href="http://fr.wikipedia.org/wiki/Webtop"&gt;Webtop&lt;/a&gt;, ils consistent à avoir un bureau opérationnel en ligne.
A mon avis, le but recherché est encore une utopie, mais ça n'empêche pas qu'il soit très intéressant d'en utiliser le concept.
Vous pouvez voir des exemples très aboutits avec &lt;a href="http://demo.eyeos.org/?lang=fr" hreflang="fr"&gt;EyeOS&lt;/a&gt;, qui est un des plus vieux ou&lt;a href="http://www.oos.cc/login.html" hreflang="en"&gt;OOS&lt;/a&gt; qui est un des plus aboutits.
&lt;a href="http://www.wamania.com/public/jquery/osy.png"&gt;&lt;img src="http://www.wamania.com/public/jquery/.osy_m.jpg" alt="osy.png" style="display:block; margin:0 auto;" title="osy.png, dec 2008" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Bref, je vous présente ici un point de départ vraiment très très sommaire, mais que j'ai trouvé marrant à faire et qui peut-être pourra servir. J'imagine bien une utilisation de ce type de présentation (ie&amp;nbsp;: le modèle desktop) pour un site internet qui tendrait plutôt vers l'application Internet.
Si je trouve le temps, j'aimerais par exemple essayer de faire un thème Dotclear sur ce modèle.&lt;/p&gt;


&lt;p&gt;Sans plus de préambule&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.wamania.org/Osy/" hreflang="fr"&gt;démo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.wamania.com/public/jquery/Osy.zip" hreflang="fr"&gt;OsySources&lt;/a&gt; (le zip fait 2 Mo car il contient l'ensemble des librairies Jquery et Jquery UI qui représente 99% du poids)&lt;/li&gt;
&lt;/ul&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/OS-javascript#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/18</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Aedituus 2.0.1 finale</title>
    <link href="http://www.wamania.com/post/Aedituus-201-finale" rel="alternate" type="text/html" title="Aedituus 2.0.1 finale" />
    <id>urn:md5:0083fc805b0abca1a78223550f140c34</id>
    <updated>2008-11-30T16:13:00+01:00</updated>
    <author><name>Wam mania</name></author>
            
    <content type="html">    &lt;p&gt;Voici donc la sortie de la version 2.0.1, première version publique de la banche 2.
Avec elle arrive un forum (sur lequel vous pourrez télécharger cette version 2) et un wiki (encore un peu vide) aux adresses&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://aedituus.wamania.com" hreflang="fr"&gt;http://aedituus.wamania.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://aedituus.wamania.com/wiki" hreflang="fr"&gt;http://aedituus.wamania.com/wiki&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Aedituus-201-finale#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/17</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Intrepid Ibex - Installation "nécessaire mais suffisante" - sur Aspire One</title>
    <link href="http://www.wamania.com/post/Intrepid-Ibex-installation-necessaire-mais-suffisante-sur-Aspire-One" rel="alternate" type="text/html" title="Intrepid Ibex - Installation &quot;nécessaire mais suffisante&quot; - sur Aspire One" />
    <id>urn:md5:1fdad2a74d2c8e2bbe0ebd0c691b9c7d</id>
    <updated>2008-11-05T10:45:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Ubuntu</dc:subject>
            
    <content type="html">&lt;p&gt;Je vais vous décrire ici mon installation "parfaite" d'une ubuntu Interpid Ibex.&lt;br /&gt;
Au programme, LVM chiffré et ubuntu avec Gnome minimale&lt;/p&gt;    &lt;h2&gt;I - Objectif&lt;/h2&gt;


&lt;p&gt;Le but, en quelques mots, c'est d'avoir l'installation "nécessaire et suffisante". C'est à dire qu'en tant d'assisté professionnel, je ne veux pas me prendre la tête, après l'install, dès que je veux faire quelque chose. En bref, on va essayer de coller au plus prêt d'une ubuntu normal, mais en la construisant nous même au fur-et-à-mesure.&lt;br /&gt;
Ainsi, on aura au moins Gnome ainsi que les outils et drivers nécessaires au fonctionnement du joujou. Les thèmes, usplash et autre éléments personnalisables pourront l'être à votre bon vouloir, j'indiquerais juste la méthode pour les éléments Ubuntu.&lt;br /&gt;
Nous en profiterons, ayant 1Go de RAM supplémentaire, pour virer la SWAP (vous aurez bien sûr le choix d'en mettre une ou non)&lt;br /&gt;
Enfin, et surtout, nous allons utiliser un &lt;a href="http://doc.ubuntu-fr.org/lvm" hreflang="fr"&gt;LVM&lt;/a&gt; chiffré, pcq ces joujoux, c'est aussi volable que portable&amp;nbsp;! Le chiffrement se fait entre la partition et le système de fichier. Ce qui veut dire que sans mot de passe, l'intégralité de la partition "virtuelle" est illisible, même avec un liveCD.&lt;/p&gt;


&lt;h2&gt;II - Matériel&lt;/h2&gt;


&lt;p&gt;J'ai utilisé ici mon Aspire One perso, un AA0 110-Ab avec&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le SSH d'origine de 8Go (le samsung)&lt;/li&gt;
&lt;li&gt;1.5Go de RAM (soit 1Go de plus que d'origine)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un deuxième PC est nécessaire pour créer la clé USB bootable (1go minimum). J'ai utilisé mon portable sous Intrepid Ibex desktop.
Enfin, un accès internet PAR CABLE, au moins le temps d'installer le wifi.&lt;/p&gt;


&lt;h2&gt;III - Prérequis&lt;/h2&gt;


&lt;p&gt;Niveau connaissance, il faudra au minimum un niveau apprenti geek, surtout s'il y a des imprévus (et comme y en a toujours...)&lt;br /&gt;
Le matériel est listé ci-dessus&lt;br /&gt;
Il vous faudra la version alternate de &lt;a href="http://www.ubuntu-fr.org/telechargement" hreflang="fr"&gt;ubuntu 8.10 Interpid Ibex&lt;/a&gt;.&lt;br /&gt;
Sachez que j'ai aussi réalisé cette installation en utilisant la version server avec exactement la même procédure, pensez juste à remettre un noyau generic indispensable pour obtenir certains drivers.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt;&amp;nbsp;: Si vous créer votre clé USB sur une Hardy, le menu lors du boot ne sera pas le bon&amp;nbsp;! Je vous indique plus bas la méthode pour ajouter la bonne entrée dans le menu.&lt;/p&gt;


&lt;h2&gt;IV - Flash boot&lt;/h2&gt;


&lt;p&gt;Commençons !&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Alors, nous allons utiliser la procédure décrite ici &lt;a href="https://help.ubuntu.com/community/UbuntuServerFlashDriveInstaller" hreflang="fr"&gt;UbuntuServerFlashDriveInstaller&lt;/a&gt;. N'utilisez pas les méthodes comme &lt;a href="http://doc.ubuntu-fr.org/unetbootin" hreflang="fr"&gt;UNetbootin&lt;/a&gt; car à l'installation, Ubuntu ne voudra pas continuer sans avoir trouvé un CD, qui bien sûr, n'existe pas. Ces méthodes sont réservées à la version Desktop.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Commençons par préparer la clé USB. Si le partitionnage/formatage avec fdisk en ligne de commande vous va, sautez simplement cette étape, la procédure est comprise dans le script. Pour les autres, installez &lt;a href="apt://gparted" title="apt://gparted"&gt;apt://gparted&lt;/a&gt;, choisissez bien votre clé dans la liste à droite et créez une partition en FAT16 avec le drapeau (flag) bootable.&lt;br /&gt;
SURTOUT, démontez la clé une fois celle-ci prête si elle a été montée automatiquement !!&lt;/p&gt;


&lt;p&gt;Les liens de la page du dessus sont pour Hardy, et nous, on veut Interpid. C'est pas compliqué, changer hardy par intrepid dans les liens. Bon ok, flemmard, voila les liens&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/hd-media/initrd.gz"&gt;initrd.gz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/hd-media/vmlinuz"&gt;vmlinuz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Placez dans le même répertoire l'iso de l'alternate, les fichiers ci-dessus et le script suivant (copier/coller exact de la page ubuntu du dessus)&lt;br /&gt;&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;# Replace &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;sdx&amp;quot;&lt;/span&gt; with &lt;span style="color: #ff0000;"&gt;&amp;quot;sdb&amp;quot;&lt;/span&gt; or whatever your flash drive is&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# &amp;nbsp; - If unsure &lt;span style="color: #c20cb9; font-weight: bold;"&gt;which&lt;/span&gt; device is your flash drive then&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# &amp;nbsp; &amp;nbsp; run &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;sudo fdisk -l | less&amp;quot;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;in&lt;/span&gt; order to identify it&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #007800;"&gt;ISOIMAGE=&lt;/span&gt;ubuntu&lt;span style="color: #000000;"&gt;-8.04&lt;/span&gt;-server-i386.iso&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; syslinux mtools mbr&lt;br /&gt;
&lt;span style="color: #7a0874; font-weight: bold;"&gt;echo&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;Use fdisk to manually create a 1GB bootable FAT16 partition.&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;read&lt;/span&gt; -p &lt;span style="color: #ff0000;"&gt;&amp;quot;Press [Enter] to start the fdisk program...&amp;quot;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; fdisk /dev/sdx&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; mkfs -t vfat /dev/sdx1&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mkdir&lt;/span&gt; -p /mnt/flash&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mount&lt;/span&gt; -t vfat /dev/sdx1 /mnt/flash&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; syslinux -s /dev/sdx1&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mkdir&lt;/span&gt; -p /mnt/iso&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mount&lt;/span&gt; -o loop &lt;span style="color: #007800;"&gt;$ISOIMAGE&lt;/span&gt; /mnt/iso&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;cp&lt;/span&gt; -R /mnt/iso/isolinux/* /mnt/flash&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mv&lt;/span&gt; /mnt/flash/isolinux.cfg /mnt/flash/syslinux.cfg&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mkdir&lt;/span&gt; -p /mnt/flash/&lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;cp&lt;/span&gt; vmlinuz /mnt/flash/&lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;cp&lt;/span&gt; initrd.gz /mnt/flash/&lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;cp&lt;/span&gt; &lt;span style="color: #007800;"&gt;$ISOIMAGE&lt;/span&gt; /mnt/flash&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; install-mbr /dev/sdx&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;umount&lt;/span&gt; /mnt/flash&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;umount&lt;/span&gt; /mnt/iso&lt;/code&gt;


&lt;p&gt;Comme il est dit dans la doc, n'oubliez pas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;de changer tous les sdx par le votre&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour voir le périphérique lié à votre clé usb, faites simplement&lt;/p&gt;
&lt;code class="bash"&gt;:~$ &lt;span style="color: #c20cb9; font-weight: bold;"&gt;mount&lt;/span&gt;&lt;br /&gt;
/dev/sdb1 on /media/disk &lt;span style="color: #7a0874; font-weight: bold;"&gt;type&lt;/span&gt; vfat &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;rw,nosuid,nodev,&lt;span style="color: #007800;"&gt;uhelper=&lt;/span&gt;hal,&lt;span style="color: #007800;"&gt;shortname=&lt;/span&gt;mixed,&lt;span style="color: #007800;"&gt;uid=&lt;/span&gt;&lt;span style="color: #000000;"&gt;1000&lt;/span&gt;,utf8,&lt;span style="color: #007800;"&gt;umask=&lt;/span&gt;&lt;span style="color: #000000;"&gt;077&lt;/span&gt;,flush&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;(Il y a plus de ligne en vrai, cherche juste le /media/disk correspond à votre clé)
Donc pour moi, c'est sdb1&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;De changer le nom de l'image ISO en haut du script.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pensez à rendre exécutable votre script&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;cd&lt;/span&gt; le_rep_ou_vous_avez_tout_mis&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; &lt;span style="color: #c20cb9; font-weight: bold;"&gt;chmod&lt;/span&gt; +x script.&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sh&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Ensuite, lancez le script (je rappelle qu'il faut faire attention que la clé USB ne soit PAS montée)&lt;/p&gt;
&lt;code class="bash"&gt;./script.&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sh&lt;/span&gt;&lt;/code&gt;

&lt;p&gt;Il vous dira qu'il va démarrer fdisk, appuyez sur entrée et fdisk se lance. Si vous avez déjà formaté votre clé avec gparted dans l'étape au dessus, mettez simplement q et entrée. Ceux qui ont préféré le faire avec fdisk n'ont pas besoin de moi pour leur expliquer, j'imagine. Créez juste une clé en FAT16 bootable.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ensuite, aller boire une bière (pas de café quand on fait des trucs susceptibles de faire péter un câble)&lt;br /&gt;&lt;/p&gt;


&lt;h5&gt;&lt;strong&gt;Si vous avez créer votre clé USB sur une Hardy Heron.&lt;/strong&gt;&amp;nbsp;! &lt;br /&gt;&lt;/h5&gt;

&lt;p&gt;Le menu sur l'aspireone lors du boot sur la clé USB  n'est pas le même qu'un CD alternate qui boot sur un autre PC. La différence est de taille puisque l'on ne peut ni choisir la langue (ok, on s'en fout), ni l'installation en ligne de commande qui correspond à notre installation minimale. En gros, on a le choix entre installer Ubuntu complet.... Pour y remédier, remonter votre clé USB et dessus, éditez le fichier text.cfg pour y ajouter une entrée Ubuntu CLI (&lt;a href="http://ubuntuforums.org/showthread.php?t=474897"&gt;source&lt;/a&gt;)&lt;/p&gt;
&lt;code class="text"&gt;default install&lt;br /&gt;
label install&lt;br /&gt;
&amp;nbsp; menu label ^Install Ubuntu&lt;br /&gt;
&amp;nbsp; kernel /install/vmlinuz&lt;br /&gt;
&amp;nbsp; append &amp;nbsp;file=/cdrom/preseed/ubuntu.seed initrd=/install/initrd.gz quiet --&lt;br /&gt;
LABEL cli&lt;br /&gt;
&amp;nbsp; menu label Install Ubuntu CLI&lt;br /&gt;
&amp;nbsp; kernel /install/vmlinuz&lt;br /&gt;
&amp;nbsp; append &amp;nbsp;file=/cdrom/preseed/cli.seed initrd=/install/initrd.gz --&lt;br /&gt;
label check&lt;br /&gt;
&amp;nbsp; menu label ^Check CD for defects&lt;br /&gt;
&amp;nbsp; kernel /install/vmlinuz&lt;br /&gt;
&amp;nbsp; append &amp;nbsp;MENU=/bin/cdrom-checker-menu initrd=/install/initrd.gz quiet --&lt;br /&gt;
label memtest&lt;br /&gt;
&amp;nbsp; menu label Test ^memory&lt;br /&gt;
&amp;nbsp; kernel /install/mt86plus&lt;br /&gt;
label hd&lt;br /&gt;
&amp;nbsp; menu label ^Boot from first hard disk&lt;br /&gt;
&amp;nbsp; localboot 0x80&lt;/code&gt;


&lt;p&gt;Débranchez la clé, et mettez la dans votre Aspire One, et on passe à l'étape suivante.&lt;/p&gt;


&lt;h2&gt;V - Installation&lt;/h2&gt;


&lt;p&gt;Allumez votre AA1 et appuyez dès le démarrage sur F12 pour rentrer dans le menu de boot, choisissez USB HDD (2ième choix chez moi)
On arrive sur le choix de la langue,&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Clé USB créée sur Hard&lt;/strong&gt;y&lt;br /&gt;
impossible de choisir une langue, ça passe direct au menu en Anglais. Pas de soucis, le choix de la langue pour l'install en Français se fait plus tard. Bref, vous arrivez donc sur notre &lt;strong&gt;Install Ubuntu CLI&lt;/strong&gt; \o/.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Clé USB créée sur Intrepid&lt;/strong&gt;&lt;br /&gt;
Prenez Français, puis F4 pour le mode de boot alternatif, choisissez en&lt;em&gt; ligne de commande&lt;/em&gt; puis &lt;em&gt;Install ubuntu&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-min.png" alt="Capture-min.png" style="display:block; margin:0 auto;" title="Capture-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Attention ici, ça a toujours été long chez moi, jusqu'à 1min pour se lancer, donc ne casser pas tout trop vite.&lt;br /&gt;
Voila, bonne nouvelle pour la clé Hardyienne, on revient au choix de la langue, donc cette fois, on prend le Français. Puis France à l'écran suivant&lt;br /&gt;
Ne détectez pas le clavier (sauf si vous y tenez vraiment), mettez donc non, puis France et France - Alternative&lt;br /&gt;
Un fois les modules chargés, le réseau détecté (j'espère que vous avez bien branché le câble réseau), choisissez un nom pour votre joujou, par exemple "Aspireone", perso il s'appelle wamania-one ;)&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;A - Partitionnement&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;ins&gt;ATTENTION&amp;nbsp;: Lors de mes tests, j'ai plusieurs fois eu des soucis avec les LVM chiffrés. L'install d'Ubuntu ne semble plus vouloir réécrire la table des partitions lors de future install à cause du mode chiffré, il m'a fallu à plusieurs reprise la réécrire grâce au mode rescue de la clé USB&lt;/ins&gt;&lt;/strong&gt;. Si ça ne te fait pas peur, go, si tu ne penses pas réinstaller 15 fois comme moi, et que tu veux essayer, go. Il n'y a rien d'irréversible, mais on passe au niveau Geek++, donc si vous préférez, prenez un partitionnement simple et traditionnel, ça ne changera rien pour la suite sous ubuntu &lt;br /&gt;Enfin, il faut aussi savoir que le chiffrement/déchiffrement à la volée, ça ralentit le joujou, même si c'est relativement soft, si tu recherches l'économie de la moindre nanoseconde de latence, alors ne chiffre pas.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;On arrive au partitionnement, prenez &lt;strong&gt;manuel&lt;/strong&gt;&lt;br /&gt;
&lt;img src="http://www.wamania.com/public/ubuntu/Capture-1-min.png" alt="Capture-1-min.png" style="display:block; margin:0 auto;" title="Capture-1-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Sur cet écran, si vous voyez des partitions existantes, effacez les toutes (aller sur la ligne, appuyer sur entrée, puis choisissez "Supprimer la partition".&lt;br /&gt;
Une fois qu'il ne reste que les lignes&lt;/p&gt;
&lt;code class="bash"&gt;SCSI &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;,&lt;span style="color: #000000;"&gt;0&lt;/span&gt;,&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#40;&lt;/span&gt;sda&lt;span style="color: #7a0874; font-weight: bold;"&gt;&amp;#41;&lt;/span&gt; - &lt;span style="color: #000000;"&gt;8.1&lt;/span&gt; GB ATA P-SSD1800&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pri/log &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #000000;"&gt;8.1&lt;/span&gt; GB &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Espace libre&lt;/code&gt;

&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-3-min.png" alt="Capture-3-min.png" style="display:block; margin:0 auto;" title="Capture-3-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Si vous n'avez pas la 1ere ligne, aller sur la 1ère, Entrée puis répondez oui si on vous demande si vous voulez écrire la table des partitions.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Nous allons maintenant créer la &lt;ins&gt;racine en premier&lt;/ins&gt;. Aller sur la ligne "pri/log", &lt;em&gt;Entrée&lt;/em&gt;, &lt;em&gt;Créer une nouvelle partition&lt;/em&gt; . Il faut ensuite choisir la taille, mettez &lt;strong&gt;7965 MB&lt;/strong&gt; ,ce qui signifie qu'on laisse 100 MB pour le /boot (ça correspond presque à l'espace occupé par 4 noyaux, ça laisse de la marge, mais faudra pas trop pousser). Choisissez &lt;strong&gt;primaire&lt;/strong&gt; puis  __début_, puis remplissez comme ceci (n'oubliez pas de mettre OUI à "&lt;em&gt;Effacer les données&lt;/em&gt;")
&lt;img src="http://www.wamania.com/public/ubuntu/Capture-4-min.png" alt="Capture-4-min.png" style="display:block; margin:0 auto;" title="Capture-4-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;On vous demande ensuite si vous voulez effacer les données sur la partition 1, dites OUI. Ça fait mal à notre SSD, mais c'est nécessaire, surtout si vous n'en êtes pas à votre 1ère installation.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Vous retournez alors sur la liste des partitions. On va créer le /boot. Donc Entrée sur la ligne &lt;strong&gt;pri/log&lt;/strong&gt;, &lt;strong&gt;créer une nouvelle partition&lt;/strong&gt;, la taille doit être d'environ &lt;strong&gt;107 MB&lt;/strong&gt;, c'est parfait. Ensuite, choisissez &lt;strong&gt;primaire&lt;/strong&gt; et remplissez comme ceci&amp;nbsp;:
&lt;img src="http://www.wamania.com/public/ubuntu/Capture-7-min.png" alt="Capture-7-min.png" style="display:block; margin:0 auto;" title="Capture-7-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Prenez bien le système de fichier EXT2. En effet, le EXT3 (le plus couramment utilisé) est un système de fichier journalisé, et provoque donc plus d'accès en écriture que l'EXT2. Et comme le SSD de notre joujou a un nombre d'écriture limités, autant l'économiser.&lt;br /&gt;
On utilise aussi l'option de montage noatime et non relatime car, comme dis l'outil de partition&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;noatime&amp;nbsp;: Pas de mise à jour des date et heure d'accès des inodes&lt;/li&gt;
&lt;li&gt;relatime&amp;nbsp;: Màj relative des date et heure des inodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Donc encore des accès disque.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;On obtient la liste des partitions suivantes&amp;nbsp;:
&lt;img src="http://www.wamania.com/public/ubuntu/Capture-8-min.png" alt="Capture-8-min.png" style="display:block; margin:0 auto;" title="Capture-8-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Le volume chiffré n'est pas utilisable en tant que tel, il va falloir créer des partitions virtuelles dessus. Pour cela, sur l'écran ci-dessus, vous voyez la ligne "Configurer les volumes chiffrés", aller dessus. On vous dit qu'avant de pouvoir les configurer, il faut écrire les modifications. On répond donc "Oui" et on arrive sur la demande de votre passphrase.&lt;br /&gt;
Mettez ce que vous voulez, mais n'oubliez pas non plus qu'il faudra le taper à chaque démarrage de la machine, donc ne vous enflammez pas. Si c'est trop faible, il vous le dira aussi. Ensuite, la partition s'efface et on arrive alors sur cet écran,
&lt;img src="http://www.wamania.com/public/ubuntu/Capture-13-min.png" alt="Capture-13-min.png" style="display:block; margin:0 auto;" title="Capture-13-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Aller sur la ligne correspondant à votre partition chiffré (en rouge sur l'image ci-dessus) et remplissez la comme ceci&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-14-min.png" alt="Capture-14-min.png" style="display:block; margin:0 auto;" title="Capture-14-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;et vous obtiendrez ceci.&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-15-min.png" alt="Capture-15-min.png" style="display:block; margin:0 auto;" title="Capture-15-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Vous voyez alors la ligne de menu "Configurer le gestionnaire de volumes logiques (LVM)", aller dedans et "créez un groupe de volume".&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-16-min.png" alt="Capture-16-min.png" style="display:block; margin:0 auto;" title="Capture-16-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Comme nom, j'ai mis "root". On nous demande de choisir le périphérique pour ce groupe de volume, logiquement, il n'y en a qu'un seul, qui s'appelle /dev/mapper/sda1_crypt, c'est notre volume chiffré. On prend donc celui-la (touche espace le sélectionner), puis Entrée.&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-17-min.png" alt="Capture-17-min.png" style="display:block; margin:0 auto;" title="Capture-17-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;vous retournez sur un petit menu dans lequel vous choisirez "Créer un volume logique", on voit alors notre groupe "root", on le choisit, puis on donne un nom au volume logique, je l'ai appelé "racine", on nous demande la taille: on laisse la valeur affichée (moins la swap si vous voulez en mettre). enfin, si vous ne voulez pas de swap, aller sur &lt;em&gt;Terminer&lt;/em&gt;. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Si vous mettez une swap, il faudra refaire un groupe de volume + un volume logique formaté en SWAP, Acer avait mis 1024Mo de swap, mais même sans RAM supplémentaire, je pense que 512Mo sont suffisants, en tout cas, c'est ce que je prendrais).&lt;br /&gt;
On arrivez la dessus.&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-22-min.png" alt="Capture-22-min.png" style="display:block; margin:0 auto;" title="Capture-22-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Il faut maintenant créer une partition sur ce nouveau volume logique, aller sur la ligne en rouge ci-dessus et remplissez comme ceci&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-23-min.png" alt="Capture-23-min.png" style="display:block; margin:0 auto;" title="Capture-23-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Voila, c'est fini. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/ubuntu/Capture-25-min.png" alt="Capture-25-min.png" style="display:block; margin:0 auto;" title="Capture-25-min.png, nov 2008" /&gt;&lt;/p&gt;


&lt;p&gt;Surtout vérifiez bien que vous n'avez pas oublié le point de montage / sur cette dernière partition, et assurez vous d'avoir bien pris EXT2 comme système de fichier. Quand vous êtes prêt, appuyer sur "&lt;em&gt;Terminer le partitionnement et appliquer les changements&lt;/em&gt;"&lt;br /&gt;
Si vous n'avez pas pris de swap, on vous le signalera, en demandant si vous voulez revenir au partitionnement, bien sûr que NON&lt;br /&gt;
Ensuite on vous que les partitions vont être formatées, donc OUI&lt;br /&gt;
Enfin, il travaille et nous on va boire une bière&lt;/p&gt;


&lt;h3&gt;B - Système minimal&lt;/h3&gt;

&lt;p&gt;Pendant "l'installation du système de base", on vous demandera notamment votre nom/identifiant/mot de passe, remplissez...  on vous demandera si vous voulez un dossier chiffré....notre partition entière est chiffrée, donc y a pas trop d'utilité à chiffrer un répertoire par dessus. Répondez non. On vous demandera ensuite un serveur mandataire, faites juste Entrée,&lt;br /&gt;
L'installation continue avec l'installation des logiciels, puis de Grub. Quand il vous demande si le système est à l'heure universelle (UTC), dites OUI. Enfin, il vous dit qu'il reboot.&lt;br /&gt;
Si vous obtenez une erreur 15 au boot, , alors vous vous êtes plantés pendant le partitionnage, le /boot est probablement dans la partition chiffrée, il va falloir tout refaire, dommage :(&lt;br /&gt;
si vous obtenez une erreur 24, alors c'est qu'il y a eu un problème sur la création des partition, c'est ce qui m'est souvent arrivé et qui a demandé une réécriture de la table des partitions avec fdisk en mode rescue&lt;br /&gt;
Un simple fdisk /dev/sda et fdisk détecte le problème et le corrige, n'oubliez pas d'enregistrer avec la commande &lt;em&gt;&lt;strong&gt;w&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;A ce stade, on a un ubuntu vraiment très minimal, en fait, y a juste ce qu'il faut pour continuer quoi... Logguez vous avec vos identifiants/pass et commencez par un traditionnel et obligatoire&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get update&lt;br /&gt;
&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get upgrade&lt;/code&gt;

&lt;p&gt;Si, comme moi, vous avez une mise à jour du noyau, pensez à rebooter avant de continuer.&lt;/p&gt;


&lt;h3&gt;C - Pack français&lt;/h3&gt;

&lt;p&gt;Sous Gnome ubuntu, il y a le &lt;strong&gt;language-selector&lt;/strong&gt;, qui permet de gérer l'internationalisation des programmes. Le problème, c'est qu'il installe une langue au complet&amp;nbsp;! On y retrouve par exemple l'aide de GIMP en français de presque 20 Mo. Bref, on va se passer du language selector, et installer les paquets de langue en Français nous même. Je vous donne ici les paquets de base, pour la suite, ça sera assez simple, les paquets courants ont souvent un paquet de langue associé au paquet, par exemple, quand vous chercherez &lt;strong&gt;openoffice&lt;/strong&gt; dans &lt;strong&gt;synaptic&lt;/strong&gt;, vous aurez aussi &lt;strong&gt;openoffice.org-l10n-fr&lt;/strong&gt;. Si vous le souhaitez, vous pourrez bien sûr aussi installer le language-selector sous gnome si vous trouvez ça plus pratique (&lt;strong&gt;language-selector&lt;/strong&gt; est le nom complet du paquet)
Bref, pour le français de base, en incluant Gnome, ça donne&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; language-pack-fr language-pack-gnome-fr&lt;/code&gt;

&lt;p&gt;A noter que suivant votre version d'ubuntu, le système sera déjà sûrement en français, donc seul le paquet de langue de gnome sera installé.&lt;/p&gt;


&lt;h3&gt;D - Gnome&lt;/h3&gt;

&lt;p&gt;Pour une installation minimale de Gnome, on installer ces paquets, tel que c'est indiqué &lt;a href="http://doc.ubuntu-fr.org/installation/minimale" hreflang="fr"&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; gdm gnome-core xfonts-base xserver-xorg&lt;/code&gt;

&lt;p&gt;Aller boire un fût.&lt;br /&gt;
Redémarrez, et là..... OMG comme c'est moche.&lt;br /&gt;
pas de soucix, on va y remédier tout de suite&amp;nbsp;!
Déjà, on vous dis que GNOME_FastUserSwitchApplet ne peut pas être chargé. On s'en fiche, on est le seul user, notre joujou, on le prête pas de toute façon. Donc moi, je supprime.&lt;br /&gt;
Si vous y tenez vraiment :&lt;br /&gt;&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; fast-user-switch-applet&lt;/code&gt;

&lt;p&gt;A ce stade, le moniteur système nous indique 140 Mo de RAM utilisé (mon install Desktop sur mon gros PC boot à 260 Mo)&lt;br /&gt;
On utilise 1.3Go sur le SSD.&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;D - Thèmes&lt;/h3&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; human-theme usplash-theme-ubuntu ubuntu-wallpapers&lt;/code&gt;

&lt;p&gt;A propos du usplash (la barre de chargement pendant le boot), il semblerait qu'il y ai un problème dans les dernières versions, empêchant la prise en compte d'un nouveau splash. En installant simplement usplash et le theme avec la ligne du dessus, ça s'installe bien, mais dès qu'on joue un peu avec usplash, ça peut vite partir en vrille (surtout qu'il faut avoir accès à la saisis du pass pour notre partition chiffrée, sinon, pas de boot). Pensez au mode rescue au menu grub si vous ne bootez plus suite à un splash mal installé, éditez le fichier /boot/grub/menu.lst et retirer l'option splash du kernel.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Si vous êtes un peu prévoyant, pensez à redémarrer tout de suite pour vérifier le bon fonctionnement de usplash.
Pensez aussi à appliquer le thème dans &lt;em&gt;système&lt;/em&gt; -&amp;gt; &lt;em&gt;Préférences&lt;/em&gt; -&amp;gt;&lt;em&gt;Apparence&lt;/em&gt; choisissez &lt;strong&gt;Human&lt;/strong&gt;&lt;/p&gt;


&lt;h3&gt;E - Drivers&lt;/h3&gt;

&lt;p&gt;Je vous conseil d'installer simplement le noyau compilé spécialement pour l'aspire one ici &lt;a href="http://petaramesh.org/post/2008/09/01/Noyau-2627-Ubuntu-custom-pour-Acer-Aspire-One" hreflang="fr"&gt;Noyau Ubuntu custom par Petaramesh&lt;/a&gt;. Prenez bien la dernière version (la 11 au moment ou j'écris).&lt;br /&gt;
Pour installer les .deb juste en double clickant, il faudra installer&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; gdebi&lt;/code&gt;


&lt;p&gt;Si vous préférez garder le noyau ubuntu, il faut installer le wifi et le lecteur de carte mémoire droit.&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les pilotes wifi ont été dans le noyau pendant la béta, mais ont été enlevés pour la release, donc peut-être que lorsque tu liras ceci, il y seront de nouveau. Pour vérifier, dans une console, tape &lt;em&gt;ifconfig&lt;/em&gt;, si y a une entrée Wlan0, alors le Wifi est présent.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;S'il ne l'est pas, il faut juste installer les backports.&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; linux-backports-modules-intrepid-generic&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Pour le lecteur de carte mémoire, suivez le guide ici &lt;a href="http://petaramesh.org/post/2008/07/16/Installation-de-KUbuntu-sur-un-Acer-Aspire-One" hreflang="fr"&gt;Kubuntu sur Aspire One par Petaramesh&lt;/a&gt;, il y aura un script à télécharger puis à installer.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensuite, noyau spécial ou pas noyau spécial, on va installer le network-manager&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; network-manager network-manager-gnome&lt;/code&gt;

&lt;p&gt;Pour remettre l'applet du network manager dans la barre de notification de Gnome, il faut juste éditer le fichier &lt;em&gt;/etc/network/interfaces&lt;/em&gt; et ne laisser que&lt;/p&gt;
&lt;code class="text"&gt;auto lo&lt;br /&gt;
iface lo inet loopback&lt;/code&gt;

&lt;p&gt;(en gros, faut enlever l'entrée correspondant à eth0).&lt;br /&gt;
Rebootez.
Une fois le network-manager chargé, si vous ne voyez pas de réseau wifi, c'est qu'il est peut-être désactivé en hard avec le switch de l'aspire one (le truc tout à droite du touchpad). Il n'y a aucun avertissement de on/off, vérifiez juste si vous voyez des réseaux Wifi.&lt;/p&gt;


&lt;h3&gt;F - Power Manager&lt;/h3&gt;

&lt;p&gt;Pour permettre la mise en veille et le réveil, il faut installer le paquet suivant&amp;nbsp;:&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; gnome-power-manager&lt;/code&gt;

&lt;p&gt;Je conseil fortement son installation afin de pouvoir bien gérer l'autonomie de l'aspireone.&lt;br /&gt;&lt;/p&gt;


&lt;h3&gt;G - Notification de mise à jour&lt;/h3&gt;

&lt;p&gt;C'est le bidule dans la barre de gnome qui vous prévient quand il y a des mise à jour.&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; update-notifier&lt;/code&gt;


&lt;h3&gt;H - Logiciels courants&lt;/h3&gt;

&lt;p&gt;Firefox Thunderbird vlc etc...&lt;br /&gt;
Vous pouvez remettre totem à la place de VLC. Totem est le lecteur video par défaut d'ubuntu, mais je n'utilise que VLC. A vous de choisir.
On y met aussi le plugin nonfree flash 10. File-roller pour les archives (tar.gz, zip, etc...), GDebi pour installer des paquets .deb en double clickant&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; firefox thunderbird thunderbird-locale-fr vlc flashplugin-nonfree file-roller gdebi&lt;/code&gt;

&lt;h2&gt;V - Post-installation / optimisation&lt;/h2&gt;


&lt;h3&gt;A - Super mégaboot&lt;/h3&gt;

&lt;p&gt;Ok, le titre est nul, c'est juste pour dire que, comme on a une partition chiffré avec une demande de mot de passe dès le boot, on peut s'affranchir des innombrables mots de passes demandés lors du boot. Il est en effet possible de connecter automatiquement un compte. Pour cela, dans &lt;em&gt;Système&lt;/em&gt; -&amp;gt; &lt;em&gt;Administration&lt;/em&gt; -&amp;gt; &lt;em&gt;Fenêtre de connexion&lt;/em&gt; dans l'onglet &lt;em&gt;Sécurité&lt;/em&gt;, &lt;strong&gt;Activer la connexion automatique&lt;/strong&gt; et choisissez votre utilisateur&lt;br /&gt;&lt;br /&gt;
De même pour Gnome-keyring, le trousseau de clé qui nous demande un passe à chaque connexion à un réseau wifi. Vous trouverez les infos ici &lt;a href="http://doc.ubuntu-fr.org/networkmanager#er_cas_vous_n_avez_pas_active_la_connexion_automatique_de_gdm" hreflang="fr"&gt;Keyring auto avec autologin désactivé&lt;/a&gt; Cette méthode ne fonctionne que si l'on a &lt;strong&gt;pas&lt;/strong&gt; activé l'autologin. En effet, il est impossible de déverrouiller le trousseau de clé avec le mot de passe de l'utilisateur si celui-ci ne le saisit pas. Il existe malgré tout une méthode, mais implique que vos mots de passe soient stockés en clair &lt;a href="http://doc.ubuntu-fr.org/networkmanager#eme_cas_vous_avez_active_la_connexion_automatique_de_gdm" hreflang="fr"&gt;Keyring auto avec Autologin activé&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Au final, je conseil de garder l'autologin + la saisie du mot de passe du trousseau. Désactiver l'autologin n'a aucun intérêt vu qu'il faudra de toute façon saisir des infos pendant le boot, autant ne rien faire. Mais avoir tous les mots de passe en clair est inacceptable pour moi.&lt;/p&gt;


&lt;h3&gt;B - Accélération&lt;/h3&gt;

&lt;p&gt;Je vous conseil simplement de regarder ce post &lt;a href="http://petaramesh.org/post/2008/07/16/Installation-de-KUbuntu-sur-un-Acer-Aspire-One" hreflang="fr"&gt;Installation de Kubuntu sur Acer Aspire One&lt;/a&gt; et celui-ci &lt;a href="https://help.ubuntu.com/community/AspireOne110L" hreflang="fr"&gt;https://help.ubuntu.com/community/AspireOne110L&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Personnellement, je n'ai utilisé que les modifs qui me semblaient les moins intrusives et les moins expérimentales pour éviter un plantage dès la prochaine Maj, je vous liste ce que j'ai fait, mais la liste n'est pas du tout exhaustive. C'est à vous de juger ce que vous pensez utile ou pas.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajout du clocksource=hpet et elevator=deadline dans le menu.lst de Grub, préconisé par Petaramesh&lt;/li&gt;
&lt;li&gt;Ajout de la ligne:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;fichier /etc/fstab&lt;br /&gt;&lt;/p&gt;
&lt;code class="text"&gt;tmpfs &amp;nbsp; /tmp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;tmpfs &amp;nbsp; defaults &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&lt;/code&gt;

&lt;p&gt;Je n'ai pas ajouter les répertoires de /var/log /var/tmp comme indiqué dans la doc car je ne suis vraiment pas sûr des bénéfices, surtout avec 512Mo de RAM. N'oublions pas quand même que économiser le SSD, c'est bien, mais bon, il va pas claquer demain. Et je pense que d'ici qu'il claque, il sera déjà remplacé par un autre joujou. Donc moi, j'économise ma RAM. De plus, il est dit dans que ajouter tous ces répertoires dans la RAM peut causer des crash lors d'installation de paquet....&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L'utilisation de noatime dans le fstab a déjà été fait pendant le formatage&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;VI - Conclusion&lt;/h2&gt;

&lt;p&gt;Au total, je suis à 158Mo à la fin du démarrage, et globalement, 1,3Go de pris sur le SSD. Sans grosse amélioration telle qu'on les trouve abondamment sur le web et notamment dans les liens que j'ai pu citer plus haut. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En écriture (avec Bonnie), j'obtiens&lt;/p&gt;
&lt;pre&gt;
-Per Chr-   --Block--     -Rewrite-   -Per Chr-    --Block--     --Seeks--
Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
3G  7056  54    9810  3      7324  4     11034 73   18886  3    1839  9%%%
&lt;/pre&gt;

&lt;p&gt;Soit au minimum 7Mb/s par seconde, ce qui n'est pas mal du tout.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Et en lecture :&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
/dev/sda:
 Timing cached reads:   1238 MB in  2.00 seconds = 619.22 MB/sec
 Timing buffered disk reads:  118 MB in  3.03 seconds =  38.88 MB/sec%%%%%%
&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/public/ubuntu/wams.png"&gt;&lt;img src="http://www.wamania.com/public/ubuntu/.wams_m.jpg" alt="wams.png" style="display:block; margin:0 auto;" title="wams.png, nov 2008" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Je vous laisse maintenant le soin de personnaliser votre joujou. Vous pouvez par exemple installer le Netbook Remix, j'en utilise notamment le thème en mode normal.&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Annexe&lt;/h2&gt;

&lt;p&gt;Pour &lt;a href="https://launchpad.net/netbook-remix" hreflang="fr"&gt;netbook-remix&lt;/a&gt;, je vous conseil d'ailleurs de ne pas tout mettre. Déjà, maximus, je trouve ça assez horrible, ça maximise toute les fenêtres en enlevant le cadre du haut de la fenêtre. Donc en gros, impossible de mettre 2 fenêtres l'une à coté de l'autre. Les applets sont pratiques, mais pas obligatoires. Je trouve que ça n'apporte pas un gros plus. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ajouter le dépot suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
deb http://ppa.launchpad.net/netbook-remix-team/ubuntu intrepid main
&lt;/pre&gt;


&lt;p&gt;Moi j'ai installé&amp;nbsp;:&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; human-netbook-theme netbook-launcher&lt;/code&gt;

&lt;p&gt;N'hésitez pas à regarder la description de chaque paquet dans le lien indiqué plus haut.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ensuite, pour lancer netbook-remix à chaque démarage, il suffit de l'ajouter dans &lt;em&gt;Préférences&lt;/em&gt; -&amp;gt; &lt;em&gt;Sessions&lt;/em&gt; (la commande s'appelle &lt;strong&gt;netbook-launcher&lt;/strong&gt;). Il faut aussi penser à changer votre Thème en Human Netbook.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Si vous ne l'avez pas installé, vous aurez besoin de&lt;/p&gt;
&lt;code class="bash"&gt;&lt;span style="color: #c20cb9; font-weight: bold;"&gt;sudo&lt;/span&gt; apt-get &lt;span style="color: #c20cb9; font-weight: bold;"&gt;install&lt;/span&gt; gnome-power-manager&lt;/code&gt;

&lt;p&gt;&lt;a href="http://www.wamania.com/public/ubuntu/netbook-remix.png"&gt;&lt;img src="http://www.wamania.com/public/ubuntu/.netbook-remix_m.jpg" alt="netbook-remix.png" style="display:block; margin:0 auto;" title="netbook-remix.png, nov 2008" /&gt;&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Intrepid-Ibex-installation-necessaire-mais-suffisante-sur-Aspire-One#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/16</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Aedituus 2.0.0</title>
    <link href="http://www.wamania.com/post/Aedituus-2.0.0" rel="alternate" type="text/html" title="Aedituus 2.0.0" />
    <id>urn:md5:0437b029767163e433fe2e144bce23f7</id>
    <updated>2008-09-10T12:48:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Aedituus</dc:subject>
            
    <content type="html">&lt;p&gt;Pour ceux qui ne savant pas, (c'est à dire tous ceux qui ne m'ont pas contacté par mail), la version 2 de l'Aedituus est en cours d'écriture. Je voulais ici éclaircir les fonctionnalités futures, ainsi que le direction que prendra le projet.
Une version béta est déjà en train de se faire sévèrement corrigée. J'espère pouvoir sortir une version finale assez vite.&lt;/p&gt;    &lt;ul&gt;
&lt;li&gt;Au niveau du code, l'architecture est globalement similaire à la version 1.3, malgré quelques grosses modifs.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;L'ensemble du code, de la base, du xhtml et des transferts est en UTF-8 et non plus en latin1&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les commentaires sont au format phpdocumentator&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Il n'y aura plus qu'une classe (mysql) utilisant PDO, permettant de créer des wrapper pour d'autres bases, mais s'appuyant uniquement sur PDO (petit rappel&amp;nbsp;: dans PHP6, les mysql_query, c'est fini&amp;nbsp;! De plus, PDO est un excellent moyen de lutter contre les injections SQL grâce aux requêtes préparées)&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Les fichiers templates sont maintenant au formats PHP. Ils sont encore bien distincts du reste du code, mais il suffit d'une fonction de 19 lignes pour joindre le tout.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Le visuel est complètement refait, et acceptera d'autres layout/css en fonction des contributions. De plus, le code html passe le validateur XHTML 1.1 (strict) et CSS2&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Une interface d'admin va voir le jour, elle sera très modeste au début (config principalement)&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Un nouveau système de filtrage de champ permet de choisir soit même (par l'interface d'admin), les restrictions de chaque champ de formulaire (nombre, alphanumérique, regexp, etc...) et d'en ajouter&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Des tests unitaires seront faits avec simpletest, principalement sur les filtres, mais aussi par simulation de toutes les situations réelles.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;L'ajout de champ dynamique sera entièrement opérationnel (et contrôlé par l'admin). Il permet ainsi d'ajouter à l'inscription un champ de formulaire (tous les types de champs sont pris en compte). La valeur de ce champ sera ensuite directement accessible partout dans le script à la connexion.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Un système de plugin permettra d'ajouter des fonctionnalité sans toucher au code, et un système d'adaptateur permettra de se connecter simultanément au script les plus connus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La version 2.0.0 ne contiendra probablement pas tout ça, mais préparera le terrain.
Niveau délai, je suis parti dans plus que je ne pensais au début (comme d'hab quoi...).&lt;/p&gt;


&lt;p&gt;Une version (en constante évolution) de démo est &lt;a href="http://aedituus.wamania.com/demo"&gt;visible ici&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Aedituus-2.0.0#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/15</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Be a javascript rock star !</title>
    <link href="http://www.wamania.com/post/Be-a-rock-star" rel="alternate" type="text/html" title="Be a javascript rock star !" />
    <id>urn:md5:b315938f208ee16a394e5a0af8c9e2bb</id>
    <updated>2008-08-29T16:45:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Jquery</dc:subject>
            
    <content type="html">    &lt;p&gt;Jquery a pété un câble, mais j'adore.&lt;br /&gt;
Petit post qui sert à rien, mais je voulais montrer la nouvelle bannière du nouveau style du site de &lt;a href="http://jquery.com/" hreflang="fr"&gt;jquery&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/public/jquery/jquery_rockstar_feature_sml.jpg"&gt;&lt;img src="http://www.wamania.com/public/jquery/.jquery_rockstar_feature_sml_m.jpg" alt="Bannière jQuery" style="display:block; margin:0 auto;" title="Bannière jQuery, sep 2008" /&gt;&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Be-a-rock-star#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/14</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Framy - Partie 4 - Url-rewritons !!</title>
    <link href="http://www.wamania.com/post/Framy-Partie-4-Url-rewritons" rel="alternate" type="text/html" title="Framy - Partie 4 - Url-rewritons !!" />
    <id>urn:md5:4449369a7a6bad9db2da9548f9d08e9e</id>
    <updated>2008-08-25T20:24:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Framy</dc:subject>
            
    <content type="html">&lt;p&gt;Cet article fait suite à la &lt;a href="http://www.wamania.com/post/Framy-Partie-3-Episode-51-La-ou-tout-a-vraiment-commence"&gt;partie 3&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Nous voici donc arrivé à cette grosse partie.&lt;br /&gt;
Je vais commencer par expliquer ce qu'on cherche à faire.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Une application est constituée de un ou plusieurs contrôleurs, contenant des actions étroitement liées au contrôleur. &lt;br /&gt;
Nous allons créer un contrôleur application, contenant 1 action&amp;nbsp;: helloworld qui prendra en paramètre la langue (en ou fr), ainsi que la période de la journée (matin, aprem, soir, nuit)
Nous devons maintenant appeler ce couple contrôleur/action.&lt;/p&gt;


&lt;p&gt;Pour les pressés, voici le code complet de notre Url Rewriting&amp;nbsp;:
&lt;a href="http://www.wamania.com/public/framy/framy_urlrewriting.zip"&gt;Télécharger le code complet&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Commençons par étudier les 3 types d'URL possibles&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les urls basiques. On appelle une page physique, puis on place les paramètres derrière un&amp;nbsp;?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Par exemple&amp;nbsp;: http://www.tonsite.com/index.php?controller=application&amp;amp;action=helloworld&amp;amp;lang=fr&amp;amp;periode=soir
L'avantage c'est que c'est simple et que ça fonctionne partout, mais c'est moche et google déteste.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;L'utilisation de l'option multiviews d'apache et du path_info de PHP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ceci permet d'avoir des url du style&amp;nbsp;: http://www.tonsite.com/index/application/helloworld/fr/soir
Ici, lorsqu'on utilise /index/ , apache cherche en 1er le répertoire index, s'il est absent, il cherchera un fichier index.*
L'avantage c'est que les urls sont propres, mais les inconvénients sont à mon avis bien plus importants&amp;nbsp;: &lt;br /&gt;
- Il ne doit pas y avoir de répertoire (ou de fichier du même nom avec une extension différente et prioritaire, comme .html) portant le nom du fichier php qu'on appelle.&lt;br /&gt;
- L'option multiviews d'apache n'est pas forcement activée partout&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le module mod_rewrite d'apache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il est nécessaire d'avoir le module activé sur apache et d'avoir le droit de placer un .htaccess dans la racine du site.
On aura des URL du type&amp;nbsp;: http://www.tonsite.com/application/helloworld/fr/soir
Le mod_rewrite est la meilleur solution pour obtenir des urls propres.&lt;/p&gt;


&lt;p&gt;Nous verrons plus tard qu'avec le multiviews, et surtout avec le mod_rewrite, on peut créer des URLs bien plus personnalisables que les exemples cités.&lt;br /&gt;
Nous venons de voir l'aspect théorique, "ce qu'on peut faire avec les différents mods". Voyons maintenant ce que nous voulons, ça nous permettra de rassembler les traitements communs et aussi, de séparer certains traitements en 2.&lt;br /&gt;
En effet, malgré la forme de l'urls qui diffère, les informations qui sont transmises au final ne prennent que deux formes. Je m'explique par un exemple concret :&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;multiviews&amp;nbsp;: http://www.wamania.com/index/application/helloworld/fr/soir&lt;/li&gt;
&lt;li&gt;Mod_rewrite&amp;nbsp;: http://www.wamania.com/application/helloworld/fr/soir&lt;/li&gt;
&lt;li&gt;Urls "basique"&amp;nbsp;: http://www.wamania.com/index.php?q=/application/helloworld/fr/soir (que nous appelerons le mod "Query_String")&lt;/li&gt;
&lt;li&gt;ou plus simplement&amp;nbsp;: http://www.wamania.com/index.php?controller=application&amp;amp;action=helloworld&amp;amp;lang=fr&amp;amp;perdiode=soir (que nous appellerons simplement "simple")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On voit donc que dans les 3 premiers, seul la manière de transmettre la chaîne diffère, mais le traitement de la chaîne sera semblable. Seul le dernier cas est un cas particulier. Nous nommerons cette chaîne ( /application/helloworld/fr/soir ) la "Param_String".&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Cette chaîne param_string est ce qui nous intéresse vraiment. En effet, même si nous pouvons l'utiliser comme ici /controller/action/params1/params2 , nous pouvons aussi être beaucoup plus créatif. Par exemple, dans notre helloworld en français et le soir, quel message voulons nous passer&amp;nbsp;? Que voulons nous que google retienne&amp;nbsp;? Le contenu ne sera pas "Hello World", mais "Bonsoir le monde". Pourquoi donc ne pas avoir une url qui concorde&amp;nbsp;?
Par exemple, implicitement la param_string /bonsoir-le-monde nous dis&amp;nbsp;: c'est le soir, c'est en français. Nos 2 paramètres sont là, il ne manque plus qu'à lier cette param_string au couple controller/action application/helloworld.&lt;br /&gt;
Pas de soucis, nous pouvons le faire !!
Pour cela, nous utiliserons un fichier routes.php que nous verrons à la fin.&lt;/p&gt;


&lt;p&gt;Retournons à notre Framy&amp;nbsp;:
&lt;a href="http://www.wamania.com/public/framy/rewriting.png"&gt;&lt;img src="http://www.wamania.com/public/framy/.rewriting_m.jpg" alt="Schema UML de la partie url-rewriting" style="display:block; margin:0 auto;" title="Schema UML de la partie url-rewriting, aoû 2008" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Nous allons donc avoir les fichiers&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;index.php&lt;/li&gt;
&lt;li&gt;framy/boot.php&lt;/li&gt;
&lt;li&gt;framy/request.php&lt;/li&gt;
&lt;li&gt;framy/url/urlengine.interface.php&lt;/li&gt;
&lt;li&gt;framy/url/simple.urlengine.php&lt;/li&gt;
&lt;li&gt;framy/url/multiviews.urlengine.php&lt;/li&gt;
&lt;li&gt;framy/url/mod_rewrite.urlengine.php&lt;/li&gt;
&lt;li&gt;framy/url/query_string.urlengine.php&lt;/li&gt;
&lt;li&gt;framy/url/param_string.php&lt;/li&gt;
&lt;li&gt;app/applicationController.php&lt;/li&gt;
&lt;li&gt;app/routes.php&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ainsi qu'un fichier .htaccess&lt;/p&gt;


&lt;p&gt;&lt;img src="http://www.wamania.com/public/framy/rewrite_files.png" alt="Arborescence de la partie URL-rewriting de Framy" style="display:block; margin:0 auto;" title="Arborescence de la partie URL-rewriting de Framy, aoû 2008" /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Commençons par le fichier index.php, c'est le plus simple, il se contente d'inclure les autres fichiers, puis d'appeler la méthode static launch de la classe boot&amp;nbsp;:&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/boot.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/request.php'&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/urlengine.interface.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/param_string.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/multiviews.urlengine.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/query_string.urlengine.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/mod_rewrite.urlengine.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./framy/url/simple.urlengine.php'&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;//define('URL_HANDLER', 'simple');&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;//define('URL_HANDLER', 'querystring');&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;//define('URL_HANDLER', 'multiviews');&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.php.net/define"&gt;&lt;span style="color: #000066;"&gt;define&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'URL_HANDLER'&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'modrewrite'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
yBoot::&lt;span style="color: #006600;"&gt;launch&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Ensuite le fichier framy/boot.php&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp;* Classe yBoot&lt;br /&gt;
&amp;nbsp;* @return void&lt;br /&gt;
&amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yBoot &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Méthode launch, lancement du programme&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return void&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;a href="http://www.php.net/static"&gt;&lt;span style="color: #000066;"&gt;static&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; launch&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On crée l'objet de yRequest qui supportera &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// les éléments de la requète de l'utilisateur&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$request&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; yRequest&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On récupère ce paramètre, &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// notamment le couple contrôleur/action&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$request&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;getParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./app/'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'Controller.php'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$controller&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'Controller'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$oController&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$controller&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$oController&lt;/span&gt;-&amp;gt;&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Notre classe qui contient la requête et qui lance le traitement de l'URL.
Nous ajoutons un petit traitement "par défaut" exceptionnel pour diriger les pages sans controller/action vers application/helloworld&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yRequest &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; init&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$param_string&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &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="color: #808080; font-style: italic;"&gt;// Récupération de notre &amp;quot;param_string&amp;quot; que nous&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// abrégeons dans la requête par &amp;quot;ps&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;switch&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;URL_HANDLER&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;case&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'simple'&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;case&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'querystring'&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="color: #0000ff;"&gt;$param_string&lt;/span&gt; = &lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'ps'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; ? &lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'ps'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; : &lt;span style="color: #ff0000;"&gt;''&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="color: #808080; font-style: italic;"&gt;// On enleve le premier / car pour le mod_rewrite, il n'y est pas&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="color: #0000ff;"&gt;$param_string&lt;/span&gt; = &lt;a href="http://www.php.net/substr"&gt;&lt;span style="color: #000066;"&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$param_string&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;a href="http://www.php.net/strlen"&gt;&lt;span style="color: #000066;"&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$param_string&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;-1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;case&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'multiviews'&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="color: #0000ff;"&gt;$param_string&lt;/span&gt; = &lt;a href="http://www.php.net/substr"&gt;&lt;span style="color: #000066;"&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'PATH_INFO'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;a href="http://www.php.net/strlen"&gt;&lt;span style="color: #000066;"&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'PATH_INFO'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;-1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;case&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'modrewrite'&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="color: #0000ff;"&gt;$param_string&lt;/span&gt; = &lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'ps'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; ? &lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'ps'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; : &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;default&lt;/span&gt; :&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;Impossible de trouver un support pour ce type d'url&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$urlEngineClassName&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'y'&lt;/span&gt;.&lt;a href="http://www.php.net/ucwords"&gt;&lt;span style="color: #000066;"&gt;ucwords&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;URL_HANDLER&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'Url'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$urlEngine&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$urlEngineClassName&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$urlEngine&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;url2params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$param_string&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; catch &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;Exception &lt;span style="color: #0000ff;"&gt;$e&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/echo"&gt;&lt;span style="color: #000066;"&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #0000ff;"&gt;$e&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;getMessage&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;die&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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="color: #808080; font-style: italic;"&gt;// Juste pour notre exemple, si on a rien mis, on redirige vers application/helloworld&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'application'&lt;/span&gt;;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'helloworld'&lt;/span&gt;;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'lang'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'lang'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'fr'&lt;/span&gt;; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'periode'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'periode'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'soir'&lt;/span&gt;; &lt;span style="color: #66cc66;"&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt; = &lt;a href="http://www.php.net/array_merge"&gt;&lt;span style="color: #000066;"&gt;array_merge&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$_POST&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; getParams&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;init&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Attaquons nous aux différents moteurs.
Voici en premier les 3 moteurs héritant de la classe yParamString que nous verrons en dernier.&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yModrewriteUrl &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; yParamString implements iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; path2url&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'http://'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SERVER_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;a href="http://www.php.net/str_replace"&gt;&lt;span style="color: #000066;"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'/index.php'&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SCRIPT_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yMultiviewsUrl &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; yParamString implements iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; path2url&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'http://'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SERVER_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;a href="http://www.php.net/str_replace"&gt;&lt;span style="color: #000066;"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'/index.php'&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;'/index'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SCRIPT_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yQueryStringUrl &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; yParamString implements iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; path2url&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'http://'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SERVER_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #ff0000;"&gt;'/'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SCRIPT_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'?ps='&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Plutôt creux hein&amp;nbsp;?
Et oui, comme nous l'avons vu, la param_string est identique pour les 3. Enfin presque !&lt;br /&gt;
En réalité, avec le multiviews, la chaîne commence par un / alors qu'avec les autres non. Ceci est traité directement dans la classe request, histoire de ne pas s'en soucier après. De plus, la sortie diffère car les urls définitives n'ont pas la même forme pour chaque, d'où le traitement dans chaque classe.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Et voici la 4ième, le cas de l'url "simple". Pour cette partie, c'est dans la classe que le choix se fait. Par exemple, au lieu de récupérer $_GET['controller'], on peut indiquer seulement $_GET['c'], on peut aussi mettre soit même sous forme d'une chaîne identifiable, enfin c'est vraiment libre.&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; ySimpleUrl implements iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; url2params&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;! &lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; || ! &lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// Mis en commentaire pour l'exemple car valeur par défaut plus tard&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;//throw new Exception (&amp;quot;Vous devez indiquer dans l'url le controller et l'action&amp;quot;);&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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;a href="http://www.php.net/urldecode"&gt;&lt;span style="color: #000066;"&gt;urldecode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; params2path&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;Vous devez indiquer le controller dans vos liens&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;Vous devez indiquer l'action dans vos liens&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url_vars&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url_vars&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'='&lt;/span&gt;.&lt;a href="http://www.php.net/urlencode"&gt;&lt;span style="color: #000066;"&gt;urlencode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url_vars&lt;/span&gt; = &lt;a href="http://www.php.net/implode"&gt;&lt;span style="color: #000066;"&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&amp;amp;'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$url_vars&lt;/span&gt;&lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$url_vars&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; path2url&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'http://'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SERVER_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #0000ff;"&gt;$_SERVER&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'SCRIPT_NAME'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span style="color: #ff0000;"&gt;'?'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;On a nos 4 moteurs, il manque l'interface que voici&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;&amp;lt;?php&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;interface&lt;/span&gt; iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; url2params&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;, &amp;nbsp;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; params2path&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; path2url&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$path&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #000000; font-weight: bold;"&gt;?&amp;gt;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;et enfin, le gros morceau, la classe yParamString chargée de parser notre param_string (pour rappel, la param_string, c'est, dans notre cas, ceci&amp;nbsp;: /application/helloworld/fr/soir)&lt;/p&gt;

&lt;code class="php"&gt;abstract &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; yParamString implements iUrlEngine &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; url2params&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt; = &lt;span style="color: #b1b100;"&gt;require&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./app/routes.php'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;!&lt;a href="http://www.php.net/is_array"&gt;&lt;span style="color: #000066;"&gt;is_array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;&amp;quot;La liste des routes, logiquement dans common/config/routes.php, est vide.&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;//print_r($routes);&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$tabUrl&lt;/span&gt; = &lt;a href="http://www.php.net/explode"&gt;&lt;span style="color: #000066;"&gt;explode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'/'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;&lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$routeUrl&lt;/span&gt; = &lt;a href="http://www.php.net/substr"&gt;&lt;span style="color: #000066;"&gt;substr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #cc66cc;"&gt;1&lt;/span&gt;, &lt;a href="http://www.php.net/strlen"&gt;&lt;span style="color: #000066;"&gt;strlen&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #cc66cc;"&gt;-1&lt;/span&gt;&lt;span style="color: #66cc66;"&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;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// 1er test, le nombre de params&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$tabRouteUrl&lt;/span&gt; = &lt;a href="http://www.php.net/explode"&gt;&lt;span style="color: #000066;"&gt;explode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'/'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$routeUrl&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/count"&gt;&lt;span style="color: #000066;"&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tabRouteUrl&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; != &lt;a href="http://www.php.net/count"&gt;&lt;span style="color: #000066;"&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tabUrl&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// ensuite, test si la regexp de l'url est bonne&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/preg_match_all"&gt;&lt;span style="color: #000066;"&gt;preg_match_all&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;/:([a-zA-Z0-9]*)/&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$routeUrl&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$neededParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url_regexp&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$routeUrl&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$neededParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #808080; font-style: italic;"&gt;// On cherche si une regexp est definit dans la route&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="color: #0000ff;"&gt;$regexp&lt;/span&gt; = &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; ? &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; : &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;&lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$regexp&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'(?P&amp;lt;'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'&amp;gt;'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$regexp&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;')'&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="color: #0000ff;"&gt;$url_regexp&lt;/span&gt; = &lt;a href="http://www.php.net/preg_replace"&gt;&lt;span style="color: #000066;"&gt;preg_replace&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;/(:&amp;quot;&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;&amp;quot;)/&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$regexp&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$url_regexp&lt;/span&gt;&lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url_regexp&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'#^'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$url_regexp&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'$#i'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/preg_match"&gt;&lt;span style="color: #000066;"&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$url_regexp&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$matches&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;foreach&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$matches&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff;"&gt;$match&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/is_int"&gt;&lt;span style="color: #000066;"&gt;is_int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;a href="http://www.php.net/unset"&gt;&lt;span style="color: #000066;"&gt;unset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$matches&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&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="color: #66cc66;"&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; &lt;span style="color: #66cc66;"&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; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;! &lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &lt;a href="http://www.php.net/unset"&gt;&lt;span style="color: #000066;"&gt;unset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'ps'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;return&lt;/span&gt; &lt;a href="http://www.php.net/array_merge"&gt;&lt;span style="color: #000066;"&gt;array_merge&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$matches&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;array_urldecode&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;array_urldecode&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$get&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; params2path&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;Vous devez indiquer le controller dans vos liens&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; throw &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; Exception&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;Vous devez indiquer l'action dans vos liens&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt; = &lt;span style="color: #b1b100;"&gt;require&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'./app/routes.php'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;null&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$badparams&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;false&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/preg_match_all"&gt;&lt;span style="color: #000066;"&gt;preg_match_all&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;/:([a-zA-Z0-9]*)/&amp;quot;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$neededParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On vérifie pour chaque variable de l'url que la params correspondant bien&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// à ce qu'on a spécifié dans le tableau params&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$ValueParamsURL&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$neededParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$regexp&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$regexp&lt;/span&gt; = &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&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="color: #66cc66;"&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="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/preg_match"&gt;&lt;span style="color: #000066;"&gt;preg_match&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'#'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$regexp&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'#i'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$ValueParamsURL&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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="color: #808080; font-style: italic;"&gt;// Le params initiale ne correspond pas à la regexp donnée par la route&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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$badparams&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;true&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="color: #808080; font-style: italic;"&gt;//throw new Exception ('Bad regexp trouv&amp;amp;eacute;e avec '.$p);&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="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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="color: #808080; font-style: italic;"&gt;// le params existe dans l'url, mais pas de le tableau initial &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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &lt;span style="color: #0000ff;"&gt;$badparams&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;true&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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$badparams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On regroupe les paramètres de l'url et ceux de la route&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$tabParamsURL&lt;/span&gt; = &lt;a href="http://www.php.net/array_merge"&gt;&lt;span style="color: #000066;"&gt;array_merge&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$ValueParamsURL&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="color: #808080; font-style: italic;"&gt;// On vérifie qu'on a bien tous nos paramètres !&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tabParamsURL&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt; != &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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; &lt;span style="color: #0000ff;"&gt;$badparams&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;true&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="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$badparams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #b1b100;"&gt;continue&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$finalTabParams&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$route&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$finalNeededParams&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$neededParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$finalParamsURL&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$tabParamsURL&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; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;break&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On a notre route&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On met les paramètres de l'url dans l'url&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$finalTabParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$finalNeededParams&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt; = &lt;a href="http://www.php.net/str_replace"&gt;&lt;span style="color: #000066;"&gt;str_replace&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;':'&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$p&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On ajoute les ?key=value en regardant ce qui n'a pas encore été mis&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$getParams&lt;/span&gt; = array_diff_key&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$finalParamsURL&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/count"&gt;&lt;span style="color: #000066;"&gt;count&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$getParams&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &amp;gt; &lt;span style="color: #cc66cc;"&gt;0&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt; .= &lt;span style="color: #ff0000;"&gt;'?'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$tabTempurl&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$getParams&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;=&amp;gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$tabTempurl&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;.&lt;span style="color: #ff0000;"&gt;'='&lt;/span&gt;.&lt;a href="http://www.php.net/urlencode"&gt;&lt;span style="color: #000066;"&gt;urlencode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt; .= &lt;a href="http://www.php.net/implode"&gt;&lt;span style="color: #000066;"&gt;implode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'&amp;amp;'&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$tabTempurl&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&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; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$url&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; array_urldecode&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tab&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$new_tab&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;foreach&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tab&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt; =&amp;gt; &lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/is_array"&gt;&lt;span style="color: #000066;"&gt;is_array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$new_tab&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = self::&lt;span style="color: #006600;"&gt;array_urldecode&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$new_tab&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$key&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; = &lt;a href="http://www.php.net/urldecode"&gt;&lt;span style="color: #000066;"&gt;urldecode&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$value&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$new_tab&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Voici le fichier htaccess&lt;/p&gt;
&lt;code class="apache"&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteEngine&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;On&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteBase&lt;/span&gt; /framy_urlrewriting&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteCond&lt;/span&gt; %&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;REQUEST_FILENAME&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; !-f&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteCond&lt;/span&gt; %&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;REQUEST_FILENAME&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; !-d&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteRule&lt;/span&gt; ^&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;.*&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;$ index.php?ps=$&lt;span style="color: #ff0000;"&gt;1&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;L,QSA&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;/code&gt;


&lt;p&gt;Le temps que vous digériez ce code qui prend beaucoup de place pour pas grand chose, je vais vous expliquer comment installer et utiliser l'exemple que vous pouvez télécharger par ce lien :&lt;br /&gt;
&lt;a href="http://www.wamania.com/public/framy/framy_urlrewriting.zip"&gt;Télécharger le code complet&lt;/a&gt;
&lt;br /&gt;
Tout d'abord, décompressez l'archive dans un répertoire accessible par un serveur web. Le framy sera contenu dans un répertoire framy_urlrewriting. Si vous renommez ce répertoire, pensez à changer aussi l'htaccess !!
Ensuite, nous allons tester nos différentes urls.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;simple&amp;nbsp;: commentez toutes les lignes du htaccess et réglez la constance URL_HANDLER du index.php sur 'simple'&lt;/li&gt;
&lt;li&gt;query_string&amp;nbsp;: commentez toutes les lignes du htaccess et réglez la constance URL_HANDLER du index.php sur 'querystring'&lt;/li&gt;
&lt;li&gt;multiviews&amp;nbsp;:  commentez toutes les lignes du htaccess et réglez la constance URL_HANDLER du index.php sur 'multiviews'&lt;/li&gt;
&lt;li&gt;modrewrite&amp;nbsp;: &lt;strong&gt;décommentez&lt;/strong&gt; toutes les lignes du htaccess et réglez la constance URL_HANDLER du index.php sur 'modrewrite'&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour chaque type, vous pouvez ouvrir votre explorateur à l'adresse http://localhost/framy_urlrewriting.&lt;br /&gt;
&lt;strong&gt;Comme nous avons mis un comportement par défaut qui charge application/helloworld, nous arrivons dessus&lt;/strong&gt; (voir dans la class Request).&lt;br /&gt;
Nous voyons un lien qui est généré par le système en fonction du type d'url. Lorsque nous clickons dessus, nous sommes renvoyé sur la même page. La différence c'est qu'en cliquant, on utilise réellement le système d'url mis en place et visible par l'url dans la barre d'adresse.
Vous verrez aussi la construction d'autres url à travers les liens fr et en dont nous avons défini les routes dans le fichier routes.php&lt;/p&gt;

&lt;code class="php"&gt;&lt;span style="color: #0000ff;"&gt;$routes&lt;/span&gt; = &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'/bonsoir-le-monde'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; &lt;span style="color: #ff0000;"&gt;'application'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'helloworld'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'lang'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'fr'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'periode'&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'soir'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'/:controller/:action/:lang/:periode'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; &lt;span style="color: #ff0000;"&gt;'application'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'helloworld'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'lang'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'fr|en'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'periode'&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'soir|matin|aprem|nuit'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/********************************************************&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Routes par défaut&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;********************************************************/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'/:controller/:action/:id'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'id'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'url'&lt;/span&gt; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'/:controller/:action'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'params'&lt;/span&gt; =&amp;gt; &lt;a href="http://www.php.net/array"&gt;&lt;span style="color: #000066;"&gt;array&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;span style="color: #ff0000;"&gt;'[a-zA-Z0-9]*'&lt;/span&gt;,&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;/code&gt;


&lt;p&gt;ATTENTION&amp;nbsp;: Classez bien vos routes de la plus restrictive à la moins restrictive, car première trouvée, premier prise. Par exemple ici, toutes nos urls peuvent utiliser /:controller/:action . Si vous mettez /bonsoir-le-monde en dessous, elle ne sera pas prise en compte.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;Voila, c'est fini.
Ce morceau est bien lourd, mais nécessaire.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;Prochain morceau, on crée enfin notre classe controller mère et tous ses petits périphériques.&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Framy-Partie-4-Url-rewritons#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/12</wfw:commentRss>
      </entry>
    
  <entry>
    <title>C'est nul, il veut même pas lire mon .doc</title>
    <link href="http://www.wamania.com/post/C-est-nul-il-veut-meme-pas-lire-mon-doc" rel="alternate" type="text/html" title="C'est nul, il veut même pas lire mon .doc" />
    <id>urn:md5:e9c662cdfde8be669a5508a801923c7a</id>
    <updated>2008-08-25T15:19:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Ubuntu</dc:subject>
            
    <content type="html">&lt;p&gt;Le prochain qui me sort ça, je le sors à coup de pied dans c**&lt;br /&gt;
Retournons le problème !&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Il y a d'un coté le monde, ses lois, ses normes, ses utilisateurs, l'harmonie entre toutes ça et d'un autre coté Microsoft.&lt;br /&gt;
Faut-il changer tout pour le rendre compatible microsoft ou faut-il changer microsoft pour être compatible avec le reste ?&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;De nombreux utilisateurs ne comprennent pas pourquoi les "autres" -comme ma tendre ubuntu- n'ont pas essayé d'être compatible avec Windows notamment niveau ergonomie utilisateur. Je leur répond en général que les développeurs d'ubuntu n'ont pas réussis à être aussi mauvais.&lt;/p&gt;


&lt;p&gt;Mais la vraie réponse est que l'utilisateur est un boulet (pour être poli). On préfère accepter la vente liée (pourtant interdite), les virus, la licence qui coûte la peau du c**, l'installation des drivers/programmes de tierces parties inconnues desfois difficiles à trouver, les changements imposés de version avec des soucix de compatibilité entre elle, etc....&lt;br /&gt;
plutôt que de changer des habitudes et éventuellement de devoir réfléchir qqs mins.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Vous savez quoi, ce p..... de word ne lit pas mon .odt&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Gros bisous à ma copine qui vient enfin de passer à ubuntu ce week-end, après que son pc, désirant continuer à travailler même sans elle, ait envoyé des messages de pubs à tous ses contacts yahoo et ai changé son message d'absence. Elle a maintenant un beau bureau tout rose ;)&lt;/p&gt;


&lt;p&gt;Pour elle, comme pour toi, futur ubuntien&lt;br /&gt;
&lt;a href="http://www.framabook.org/ubuntu.html" hreflang="fr"&gt;http://www.framabook.org/ubuntu.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.ecrans.fr/Linux-Le-journal-d-un-novice,4666.html" hreflang="fr"&gt;http://www.ecrans.fr/Linux-Le-journal-d-un-novice,4666.html&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/C-est-nul-il-veut-meme-pas-lire-mon-doc#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/13</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Nouveau thème - spécial daltonien</title>
    <link href="http://www.wamania.com/post/Nouveau-theme-special-daltonien" rel="alternate" type="text/html" title="Nouveau thème - spécial daltonien" />
    <id>urn:md5:6580fa29809955b9dd64b1b53ea55c3e</id>
    <updated>2008-08-19T17:33:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Osef ta life</dc:subject>
            
    <content type="html">    &lt;p&gt;Etant moi même daltonien, je ne suis pas vraiment sûr de l'harmonie générale du site.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En tout cas, chez wam, y a de la couleur maintenant, et à l'époque de la télé, c'était vraiment un progrès !!&lt;/p&gt;


&lt;p&gt;N'hésitez pas, daltonien ou non, à me signaler par commentaire ceux qui ont perdus leurs yeux ou -au contraire- ceux qui ont l'impression de voir une toile de Van Gogh dans ce thème.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;PS&amp;nbsp;: Un &lt;a href="http://fr.wikipedia.org/wiki/Daltonisme" hreflang="fr"&gt;daltonien&lt;/a&gt; est qq'un ayant des problèmes de vison des couleurs (vert et/ou bleu et/ou rouge).  Personnellement, j'ai une protanomalie&amp;nbsp;: "présence d'une mutation du pigment de la vision du rouge&amp;nbsp;; la sensibilité à cette couleur est diminuée."&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Nouveau-theme-special-daltonien#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/11</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Knol - Ou comment troquer le savoir contre du fric</title>
    <link href="http://www.wamania.com/post/Knol-Ou-comment-troquer-le-savoir-contre-du-fric" rel="alternate" type="text/html" title="Knol - Ou comment troquer le savoir contre du fric" />
    <id>urn:md5:8c507c9e28fe5c7cfd985bab2462201c</id>
    <updated>2008-08-18T15:17:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>The web</dc:subject>
            
    <content type="html">    &lt;p&gt;Voila un bon post copier/coller, mais je devais relayer l'info&amp;nbsp;!
&lt;a href="http://www.oric-ak.fr/post/2008/07/30/Knol-soupe-de-Wikipedia" hreflang="fr"&gt;http://www.oric-ak.fr/post/2008/07/30/Knol-soupe-de-Wikipedia&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;Knol est un nouveau service de &lt;a href="http://www.google.fr" hreflang="fr"&gt;google&lt;/a&gt;, actif depuis le 23 juillet 2008 et permettant à des auteurs &lt;strong&gt;non anonymes&lt;/strong&gt; de publier des articles sur lesquels sera affichée de la &lt;strong&gt;pub &lt;a href="http://www.google.fr" hreflang="fr"&gt;google&lt;/a&gt; que l'auteur et &lt;a href="http://www.google.fr" hreflang="fr"&gt;google&lt;/a&gt; se partageront&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;En gros, pour troller sec, &lt;a href="http://www.google.fr" hreflang="fr"&gt;google&lt;/a&gt; va racheter les auteurs de &lt;a href="http://fr.wikipedia.org/wiki/Accueil" hreflang="fr"&gt;wikipedia&lt;/a&gt;, car &lt;a href="http://fr.wikipedia.org/wiki/Accueil" hreflang="fr"&gt;wikipedia&lt;/a&gt; a toujours refusé la pub de &lt;a href="http://www.google.fr" hreflang="fr"&gt;google&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;J'invite donc mes 100 000 visiteurs par jours à ne pas knoler !!&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Knol-Ou-comment-troquer-le-savoir-contre-du-fric#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/10</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Framy - Partie 3 - (Episode -51, Là ou tout a vraiment commencé)</title>
    <link href="http://www.wamania.com/post/Framy-Partie-3-Episode-51-La-ou-tout-a-vraiment-commence" rel="alternate" type="text/html" title="Framy - Partie 3 - (Episode -51, Là ou tout a vraiment commencé)" />
    <id>urn:md5:1211dec681e0cae9562276fbb851309e</id>
    <updated>2008-08-18T12:29:00+02:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Framy</dc:subject>
            
    <content type="html">&lt;p&gt;Cet article fait suite à la &lt;a href="http://www.wamania.com/post/Framy-Partie-2-Le-controleur"&gt;Partie 2&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Avant de commencer à compliquer le bouzin, et surtout, avant de commencer l'url-rewriting, je me suis dit que présenter tout de suite l'objectif final permettrait sûrement de gagner beaucoup de temps. Pour cela, je me suis replongé dans l'UML2, mais j'avoue que je galère, c'est pas trop mon truc les blocks (je préférais les patates).&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.wamania.com/public/framy/Diagramme1.png"&gt;&lt;img src="http://www.wamania.com/public/framy/.Diagramme1_m.jpg" alt="Schema UML de Framy" style="display:block; margin:0 auto;" title="Schema UML de Framy, aoû 2008" /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Alors, étudions un peu ça. &lt;strong&gt;Tout d'abord, il ne faut surtout pas avoir peur !&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Le commencement, c'est la méthode yBoot::launch() qui sera appelée par exemple dans l'index.php
Cette méthode static crée 2 objets&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$resquest (yRequest)&lt;/li&gt;
&lt;li&gt;$response (yResponse)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La classe yRequest contient les attributs et méthodes nécessaires à l'analyse de la requête de l'utilisateur. C'est elle qui va déterminer le couple contrôleur/action à utiliser à travers les différents classes de traitement de l'URL disponibles. &lt;br /&gt;
La classe yResponse contient simplement la réponse que Framy enverra au navigateur, ce qui comprend entête HTTP et contenu.
On crée ces classes dans le boot pour&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Déterminer le couple contrôleur/action ainsi que les paramètres.&lt;/li&gt;
&lt;li&gt;Valider la requête et si besoin, envoyer une erreur 404&lt;/li&gt;
&lt;li&gt;Charger la configuration globale de Framy (que nous ne verrons pas du tout ici)&lt;/li&gt;
&lt;li&gt;Lancer l'application (ie&amp;nbsp;: Instancier le contrôleur et lancer l'action)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensuite, l'ensemble des pouvoirs est transmis au contrôleur (applicationController est un contrôleur arbitraire pour servir d'exemple). N'oublions pas que le contrôleur hérite de la classe abstraite yController, qui possède tout ce dont on a besoin, et qui va récupérer au passage l'objet $request et l'objet $response (regardez donc le constructeur de yController).&lt;/p&gt;


&lt;p&gt;Voila, maintenant que les choses sont claires, nous pouvons commencer à travailler sur chacune des parties.
A commencer bientôt par l'url-rewriting.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/post/Framy-Partie-4-Url-rewritons"&gt;Allez à la 4ième partie&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Framy-Partie-3-Episode-51-La-ou-tout-a-vraiment-commence#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/9</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Compiz-fusion sur Ubuntu (Hardy Heron 8.04 LTS)</title>
    <link href="http://www.wamania.com/post/Compiz-fusion-sur-Ubuntu-Hardy-Heron-804-LTS" rel="alternate" type="text/html" title="Compiz-fusion sur Ubuntu (Hardy Heron 8.04 LTS)" />
    <id>urn:md5:c6ead6ac26c33ca5c3199b091da15dec</id>
    <updated>2008-08-14T19:59:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Ubuntu</dc:subject>
            
    <content type="html">&lt;p&gt;Certes, ce n'est pas un scoop, mais j'aime, alors je montre.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ubuntu gagne de plus en plus de terrain, et quand on voit la progression à chaque nouvelle version, on comprend pourquoi !&lt;br /&gt;
Toi, avec ton vista, regarde ce qu'on fait en quelques minutes, et pleure !&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/public/ubuntu/Capture-2.jpg"&gt;&lt;img src="http://www.wamania.com/public/ubuntu/.Capture-2_m.jpg" alt="Capture-2.jpg" style="display:block; margin:0 auto;" title="Capture-2.jpg, aoû 2008" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href="http://www.wamania.com/public/ubuntu/Capture.png"&gt;&lt;img src="http://www.wamania.com/public/ubuntu/.Capture_m.jpg" alt="Capture.png" style="display:block; margin:0 auto;" title="Capture.png, aoû 2008" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/public/ubuntu/Capture-5.jpg"&gt;&lt;img src="http://www.wamania.com/public/ubuntu/.Capture-5_m.jpg" alt="Capture-5.jpg" style="display:block; margin:0 auto;" title="Capture-5.jpg, aoû 2008" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/ijv4F-2_HS0&amp;amp;hl=fr&amp;amp;fs=1" width="425" height="350"&gt;
  &lt;param name="movie" value="http://www.youtube.com/v/ijv4F-2_HS0&amp;amp;hl=fr&amp;amp;fs=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
&lt;/object&gt;
&lt;br /&gt;Compiz ubuntu
&lt;/div&gt;



&lt;div class="external-media" style="margin: 1em auto; text-align: center;"&gt;
&lt;object type="application/x-shockwave-flash" data="http://www.youtube.com/v/t2lcrGmDnCY&amp;amp;hl=fr&amp;amp;fs=1" width="425" height="350"&gt;
  &lt;param name="movie" value="http://www.youtube.com/v/t2lcrGmDnCY&amp;amp;hl=fr&amp;amp;fs=1" /&gt;
  &lt;param name="wmode" value="transparent" /&gt;
&lt;/object&gt;
&lt;br /&gt;Double wow on compiz cube 3D
&lt;/div&gt;
</content>
    
          <wfw:comment>http://www.wamania.com/post/Compiz-fusion-sur-Ubuntu-Hardy-Heron-804-LTS#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/7</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Url rewriting sur dotclear</title>
    <link href="http://www.wamania.com/post/Url-rewriting-sur-dotclear" rel="alternate" type="text/html" title="Url rewriting sur dotclear" />
    <id>urn:md5:ef394f327ecd20fb664d92a5f92d4a8d</id>
    <updated>2008-08-14T16:55:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>The web</dc:subject>
            
    <content type="html">&lt;p&gt;&lt;img src="http://www.wamania.com/public/dotclear/dotclear.png" alt="dotclear.png" style="display:block; margin:0 auto;" title="dotclear.png, aoû 2008" /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Je viens de me rendre compte que dotclear ne propose que 2 choix pour la réécriture d'URL.&lt;/p&gt;    &lt;ul&gt;
&lt;li&gt;Le QUERY_STRING, c'est à dire par l'utilisation de &lt;a href="http://www.php.net/manual/fr/reserved.variables.server.php" hreflang="fr"&gt;$_SERVER['QUERY_STRING']&lt;/a&gt; qui consiste globalement à parser tout ce qui suis le&amp;nbsp;? dans l'adresse. Ainsi on aurait http://www.wamania.com/index.php?/url-rewriting-sur-dotclear.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pourquoi c'est mal?&lt;br /&gt;
Déjà parce que c'est moche&amp;nbsp;! Ensuite parce que google n'aime pas. Dès qu'il y a un ?, il zappe.&lt;br /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Le PATH_INFO, utilisé avec une option d'apache (souvent dans le virtualhost)&amp;nbsp;: le MultiViews&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;code class="apache"&gt;&amp;lt;Directory /var/www/wamania.com&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;Options&lt;/span&gt; MultiViews&lt;br /&gt;
&amp;nbsp; &amp;nbsp; ....&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;/code&gt;

&lt;p&gt;Pour expliquer, voici un exemple&amp;nbsp;:
Nous prenons l'URL &lt;br /&gt;
http://www.wamania.com/index/url-rewriting-sur-dotclear&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;En gros, on a tout écrit sous forme de répertoire. En effet, si apache ne trouve pas de répertoire avec le bon nom (ici index) alors il cherche les fichiers possibles, et trouve donc index.php, ce qui suis étant transformé ensuite en QUERY_STRING.
Ceci permet d'avoir des URL sans .php? mais laisse quand même un /index/ pas cool, et surtout beaucoup de contraintes (si un répertoire existe, il est prioritaire sur le fichier !)&lt;/p&gt;


&lt;p&gt;Bref, tout ça, c'est de l'URL-bidouilling.&lt;/p&gt;


&lt;p&gt;Pour un vrai URL-rewriting, il faut absolument avoir le mod_rewrite d'apache activé sur son hébergement&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Le plus simple à mon avis, c'est de configurer dotclear pour le QUERY_STRING (le PATH_INFO nécessite l'option MultiViews d'apache, et est plus contraignant), en mettant en url http://toto.com/ &lt;br /&gt;
Il nous reste maintenant à rediriger vers notre ancien index.php?
Nous utilisons pour cela un fichier .htaccess à placer à la racine du blog&lt;/p&gt;

&lt;code class="apache"&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteEngine&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;On&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #adadad; font-style: italic;"&gt;## Si le blog n'est pas à la racine du site ! &lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #adadad; font-style: italic;"&gt;#RewriteBase /blog&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #adadad; font-style: italic;"&gt;## Si le fichier/dossier existe, on passe son chemin&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #adadad; font-style: italic;"&gt;## Ca evite de réécrire les adresses des images par exemple&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteCond&lt;/span&gt; %&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;REQUEST_FILENAME&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; !-f&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteCond&lt;/span&gt; %&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;REQUEST_FILENAME&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; !-d&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #adadad; font-style: italic;"&gt;## et enfin, on réécrit&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #00007f;"&gt;RewriteRule&lt;/span&gt; ^&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;.*&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;$ index.php?$&lt;span style="color: #ff0000;"&gt;1&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;L,QSA&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;/code&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Url-rewriting-sur-dotclear#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/4</wfw:commentRss>
      </entry>
    
  <entry>
    <title>fonction addslashes</title>
    <link href="http://www.wamania.com/post/fonction-addslashes" rel="alternate" type="text/html" title="fonction addslashes" />
    <id>urn:md5:3ce22fb255bb77752c12fbd43c020480</id>
    <updated>2008-08-14T15:49:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>PHP5</dc:subject>
            
    <content type="html">&lt;p&gt;&lt;img src="http://www.wamania.com/public/php5/elephpant_powered_php.gif" alt="elephpant_powered_php.gif" style="display:block; margin:0 auto;" title="elephpant_powered_php.gif, aoû 2008" /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;La méthode addslashes est mondialement connue pour échaper les ' ou les " dans les chaînes de caractères à destination de requète SQL.
Ca, c'est ce que tout le monde croit.&lt;/p&gt;    &lt;p&gt;Suite à un entretien dernièrement ou j'ai passé un test de PHP dans lequel on me demandait - encore - de choisir entre 4 choix pour empêcher les injections SQL.&lt;br /&gt;
ET BAH C'EST PAS ADDSLASHES !!!&lt;br /&gt;
J'avais envie de le crier haut et fort.&lt;/p&gt;


&lt;p&gt;Quelques explications&amp;nbsp;:
Les véritables méthodes d'échappement d'une requète liée à une base sont les méthodes propres à ces bases&amp;nbsp;!
Par exemple, la fonction PHP &lt;a href="http://www.php.net/mysql_real_escape_string" hreflang="fr"&gt;mysql_real_escape_string&lt;/a&gt; n'est utilisable QUE si la connexion à MySQL est ouverte. Cela car c'est belle et bien MySQL qui échappe la chaîne et non PHP.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ainsi, toutes les bases de données ont leurs méthodes d'échappement, et les fonctions PHP qui les appellent&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.php.net/mysql_real_escape_string" hreflang="fr"&gt;mysql_real_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/pg_escape_string" hreflang="fr"&gt;pg_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/db2_escape_string" hreflang="fr"&gt;db2_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/dbx_escape_string" hreflang="fr"&gt;dbx_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/maxdb_escape_string" hreflang="fr"&gt;maxdb_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/mysqli_escape_string" hreflang="fr"&gt;mysqli_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.php.net/sqlite_escape_string" hreflang="fr"&gt;sqlite_escape_string&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;L'arrivée de composant comme &lt;a href="http://www.php.net/manual/fr/book.pdo.php" hreflang="fr"&gt;PDO&lt;/a&gt; permet de s'abstraire de tous ces problèmes (à condition de ne pas faire n'imp). Je conseille personnellement de ne plus utiliser que ça. Ça évite d'avoir à réfléchir sur des problématiques de sécurité seul dans son coin alors qu'une communauté bien plus forte que toi le fait à ta place&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Bon, sinon, pourquoi addslashes c'est pas bon&amp;nbsp;?
Simplement à cause d'une 'confusion' entre single-byte et multi-byte string.&lt;/p&gt;


&lt;p&gt;En single-byte string, 0xbf27 devient 0xbf (¿) suivi de 0x27 ('), c'est à dire (¿').
Ceci car 0xbf27 n'est pas un multi-byte valide.
Si on passe ceci dans addslashes, on obtient 0xbf5c27, c'est à dire ¿\' en single-byte string.
Seulement voila 0xbf5c est un multi-byte string &lt;strong&gt;valide&lt;/strong&gt;, du coup, la chaîne devient 縗 '
Et voila notre ( ' ) qui n'est plus échappé.&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/fonction-addslashes#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/3</wfw:commentRss>
      </entry>
    
  <entry>
    <title>Framy - Partie 2 - Le contrôleur</title>
    <link href="http://www.wamania.com/post/Framy-Partie-2-Le-controleur" rel="alternate" type="text/html" title="Framy - Partie 2 - Le contrôleur" />
    <id>urn:md5:00f32aa8d3635af9a44fd2d054648beb</id>
    <updated>2008-08-14T13:59:00+01:00</updated>
    <author><name>Wam mania</name></author>
        <dc:subject>Framy</dc:subject>
            
    <content type="html">&lt;p&gt;Cet article fait suite à celui-ci&amp;nbsp;:
&lt;a href="http://www.wamania.com/post/Framy-Partie-1-Pourquoi-utiliser-un-framework-MVC"&gt;Partie 1 - Pourquoi utiliser un framework MVC&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Je vais vous présenter ici la base du début du commencement d'un bon contrôleur dans une optique MVC.
Tout d'abord, un peu de théorie. Selon wikipedia "Le contrôleur prend en charge la gestion des évènements de synchronisation pour mettre à jour la vue ou le modèle et les synchroniser.".&lt;/p&gt;    &lt;p&gt;Ce qui signifie que le contrôleur est appelé à chaque évènement lié à l'utilisateur (en tout cas dans le web). Il va ensuite synchroniser la vue et le modèle &lt;em&gt;en fonction de la requète&lt;/em&gt;. Attention cependant, si le contrôleur est le "système nerveux" du programme, il n'est pas le cerveau. En effet, l'ensemble des classes "métiers" nécessaires au traitement des informations seront à l'extérieur du MVC, et seront appelées si besoin par le contrôleur.
Au final, le contrôleur est le coordinateur de notre programme. Ce qui signifie que tout commence par lui et tout fini par lui (en tout cas, d'un point de vue extérieur au framework).
Chronologiquement, le framework va analyser la requète, puis va déterminer&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le contrôleur à utiliser&lt;/li&gt;
&lt;li&gt;L'action à appelée&lt;/li&gt;
&lt;li&gt;Les paramètres supplémentaires.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le couple contrôleur/action se cherchera de coordonner les différents acteurs pour finir (en général) par l'envoi de la vue.&lt;/p&gt;


&lt;p&gt;Par exemple, voici un contrôleur et quelques actions typiques pour gérer les utilisateurs d'un espace membre.&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; userController &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On va détailler un peu cette action&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; register&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On attend ici dans les paramètres le pseudo et le pass du user&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'pseudo'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; || &lt;a href="http://www.php.net/empty"&gt;&lt;span style="color: #000066;"&gt;empty&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'pass'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;render_view&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'formulaire_incomplet.tpl'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// on insere&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$user&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; User&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'pseudo'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;params&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'pass'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$user&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;render_view&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'inser_user_success.tpl'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&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="color: #0000ff;"&gt;$this&lt;/span&gt;-&amp;gt;&lt;span style="color: #006600;"&gt;render_view&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'inser_user_failed.tpl'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; update&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On attend ici en paramètre l'id du user à modifier et le pseudo et/ou pass à modifier&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; delete&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On attend ici l'id du user à supprimer&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; login&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On attend ici l'id du user à connecter&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; logout&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On attend ici l'id du user à déconnecter&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;La jonction formulaire &amp;lt;-&amp;gt; base de donnée est la partie la plus redondante, la plus pénible et la plus grande source d'erreur de tout programme web. Le but du contrôleur est de simplifier et centraliser tout ça.&lt;/p&gt;


&lt;p&gt;Parlons justement de centralisation.
Jusqu'ici, hormis ressembler les fonctions, on a pas encore grand chose. On a déjà vaguement aperçu le modèle User, ainsi que la méthode $this-&amp;gt;render_view encore inconnue.
Concentrons nous sur ce qu'il y a à rassembler pour que notre classe contienne TOUT ce dont elle a besoin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le modèle&lt;/li&gt;
&lt;li&gt;La vue&lt;/li&gt;
&lt;li&gt;La session&lt;/li&gt;
&lt;li&gt;Les paramètres d'entrées&lt;/li&gt;
&lt;/ul&gt;
&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; userController &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$db&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$view&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$session&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// Lié au fonctionnement&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$data&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; __construct&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; register&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; update&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; delete&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; login&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; logout&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// Nouvelle méthode, vu au paragraphe avant, qui serivra à afficher une vue&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;private&lt;/span&gt; render_view&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Dans ces quelques lignes, il y a toute l'architecture de notre espace membre. Toutes les variables extérieures sont accessibles à chaque action. Reste maintenant à alimenter ces variables, et à rendre nos actions appelables par un visiteur.&lt;/p&gt;


&lt;p&gt;Mais avant tout, regardons de plus prêt notre classe. Nous l'avons créée pour gérer un espace membre, or un site n'est jamais constitué de si peu. Il va nous falloir utiliser d'autres contrôleurs pour les autres contextes, par exemple sur une galerie d'images, il nous faudra gérer les images.&lt;/p&gt;


&lt;p&gt;Pour cela nous allons créer un contrôleur imageController qui devra lui aussi utiliser les sessions, les paramètres, les vues, etc. Grâce à l'héritage, nous allons pouvoir créer une classe Controller mère dont chaque controller héritera. Cette classe mère se chargera des variables et méthodes communes. Ainsi, nous aurons&amp;nbsp;:&lt;/p&gt;

&lt;code class="php"&gt;abstract &lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; Controller &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Notre modèle&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #0000ff;"&gt;$db&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Notre vue&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #0000ff;"&gt;$view&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* La session&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #0000ff;"&gt;$session&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Les paramètres POST et GET&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #0000ff;"&gt;$params&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Un tableau qui contiendra se qu'on enverra à la vue.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* La vue ne disposera que de ces données et aucune autre&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #0000ff;"&gt;$data&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Constructeur&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; __construct&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;/**&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;* Méthode privée appelée par chaque action et qui se chargera de la vue.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; protected &lt;span style="color: #000000; font-weight: bold;"&gt;function&lt;/span&gt; render_view&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Ce qui permet de simplifier notre contrôleur&amp;nbsp;:&lt;/p&gt;

&lt;code class="php"&gt;&lt;span style="color: #000000; font-weight: bold;"&gt;class&lt;/span&gt; userController &lt;span style="color: #000000; font-weight: bold;"&gt;extends&lt;/span&gt; Controller&lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; register&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; update&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; delete&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; login&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// Notre vue n'étant pas encore écrite, nous utiliserons un simple echo&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href="http://www.php.net/echo"&gt;&lt;span style="color: #000066;"&gt;echo&lt;/span&gt;&lt;/a&gt; &lt;span style="color: #ff0000;"&gt;'Hello World'&lt;/span&gt;;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #000000; font-weight: bold;"&gt;public&lt;/span&gt; logout&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;/code&gt;


&lt;p&gt;Testons maintenant notre contrôleur. Il faut pour cela avoir un moyen pour se diriger vers le bon couple contrôleur/action en fonction de la requète. Nous ferons très simple pour commencer&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Placer ceci dans un fichier index.php&lt;/p&gt;
&lt;code class="php"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;// La classe abstraite&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'controller.php'&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;// Notre controleur user&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;require_once&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'userController.php'&lt;/span&gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$controller&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'controller'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On peut mettre un contrôleur par défaut&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;a href="http://www.php.net/isset"&gt;&lt;span style="color: #000066;"&gt;isset&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #0000ff;"&gt;$action&lt;/span&gt; = &lt;span style="color: #0000ff;"&gt;$_GET&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'action'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt; &lt;span style="color: #b1b100;"&gt;else&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;// On peut mettre une action par défaut&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #0000ff;"&gt;$oController&lt;/span&gt; = &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;$controller&lt;/span&gt;;&lt;br /&gt;
&lt;span style="color: #0000ff;"&gt;$oController&lt;/span&gt;-&amp;gt;&lt;span style="color: #0000ff;"&gt;$action&lt;/span&gt;;&lt;/code&gt;


&lt;p&gt;Il vous reste à appeler l'adresse correspondante, par exemple en local, si les fichiers sont dans le répertoire framework, nous appelerons http://localhost/framework/index.php?controller=user&amp;amp;action=login&lt;/p&gt;


&lt;p&gt;Cette partie est maintenant finie. Nous verrons dans la prochaine partie la réécriture des urls car il est clair qu'une url comme celle du dessus n'est pas très sexy sur un site sérieux. Nous verrons aussi, dans les différents articles qui suivront, comment améliorer nettement la classe abstraite par l'ajout de nombreuses fonctionnalités, notamment la pagination, les filtres, le cache, etc...&lt;/p&gt;


&lt;p&gt;&lt;a href="http://www.wamania.com/post/Framy-Partie-3-Episode-51-La-ou-tout-a-vraiment-commence"&gt;Aller à la partie 3&lt;/a&gt;&lt;/p&gt;</content>
    
          <wfw:comment>http://www.wamania.com/post/Framy-Partie-2-Le-controleur#comment-form</wfw:comment>
      <wfw:commentRss>http://feeds.feedburner.com/Wamania/comments/2</wfw:commentRss>
      </entry>
  
</feed>
