commit - /dev/null
commit + 6d65534bc58fc10be696d3e1c2c18c39ddd86430
blob - /dev/null
blob + a287d4271207dbf0788fec9a91eba04dbc28426b (mode 644)
--- /dev/null
+++ .htaccess
+ErrorDocument 404 /autres/error/index.php?erreur=404
+ErrorDocument 403 /autres/error/index.php?erreur=403
+ErrorDocument 500 "Ce site est indisponible. Vous pouvez vous rendre sur <a href="http://ssylvainsab.free.fr/">une copie du site</a>.
+#ErrorDocument 500 /autres/error/index.php?erreur=500
+Options -Indexes
+#AddDefaultCharset iso-8859-1
+AddType application/xhtml+xml .php
+php 1
+SetEnv PHP_VER 7
blob - /dev/null
blob + b9e12f43c782ea3a01fc0358f958e935def2a522 (mode 644)
--- /dev/null
+++ apropos/accesskeys.php
+<?php
+$head['css'][0]['filename']='apropos';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$head['access'][0]=array('rel'=>'start','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$titre='Accesskeys';
+require'../autres/source-haut.php';
+include'menu.php';?>
+<div id="intro">
+<h1>Listes des accesskeys</h1>
+<p>Une accesskey est une combinaison de touches qui permet de naviguer plus rapidement dans le site. C'est une sorte de "raccourci"
+ vers différentes pages.</p></div>
+<h2 style="clear:both">Comment utiliser une accesskey ?</h2>
+<p>C'est le Webmaster du site qui met ou non des accesskeys vers les différentes parties de son site.
+ Généralement s'il y en a elles sont signalées quelquepart, ici par exemple pour ce site.<br />
+ Pour utiliser une accesskey et se rendre a la page correspondante, il faut, selon votre navigateur :</p>
+<ul><li>IE Windows : Alt et [accesskey], puis Entrée ;</li>
+ <li>Mozilla, Netscape, K-Meleon, FireFox Windows: Alt et [accesskey] ;</li>
+ <li>Opera 7 Windows, Macintosh, Linux : Esc + Shift et [accesskey] ;</li>
+ <li>MSIE Macintosh : Ctrl et [accesskey], puis Entrée ;</li>
+ <li>Safari 1.2 Macintosh : Ctrl et [accesskey] ;</li>
+ <li>Mozilla, Netscape Macintosh : Ctrl et [accesskey] ;</li>
+ <li>Galeon/Mozilla/FireFox Linux : Alt et [accesskey] ;</li>
+ <li>Konqueror 3.3+ : Ctrl, puis [accesskey] (successivement) ;</li>
+ <li>Netscape 4, Camino, Galeon, Konqueror avant la version 3.3.0, Omniweb, Safari avant la version 1.2,
+ Opera Windows/Linux avant la version 7, ne supportent pas les accesskeys.</li></ul>
+<h2>Quelle est la liste des accesskeys de ce site ?</h2>
+<p>Voici la liste des accesskeys du site, accessible depuis chaque page :</p>
+<table summary="Liste des Accesskeys de ce site" class='access'>
+ <tbody>
+ <tr><th>Accesskey</th><th>Page correspondante</th></tr>
+ <tr><td>1</td><td>Accueil</td></tr>
+ <tr><td>2</td><td>News</td></tr>
+ <tr><td>3</td><td>Logiciels</td></tr>
+ <tr><td>4</td><td>Configurer</td></tr>
+ <tr><td>5</td><td>C'est quoi ?</td></tr>
+ <tr><td>6</td><td>A propos de ce site</td></tr>
+ </tbody>
+</table>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 39ecc7f9d452c9bd4df35e33320c7b0891016dd3 (mode 644)
--- /dev/null
+++ apropos/index.php
+<?php
+$head['css'][0]['filename']='apropos';
+$titre='A propos du site';
+require'../autres/source-haut.php';
+?>
+<h1>A propos de ce site</h1>
+<h2 style="margin-right:20%">Sommaire</h2>
+<ul class="app">
+ <li><a href="licence.php">Licence</a> : Le contenu de ce site est sous Licence Creative commons</li>
+ <li><a href="accesskeys.php">Accessibilité</a> : Politique d'accessiblité</li>
+ <li><a href="stats.php">Statistiques</a> : Les statistiques du site</li>
+ <li><a href="/mail/">Contact</a> : Contacter l'auteur</li></ul>
+<?php require'../autres/source-bas.php';?>
blob - /dev/null
blob + 1167783ea77287ffc5de0f41a17046193f2e4af7 (mode 644)
--- /dev/null
+++ apropos/licence.php
+<?php
+$head['css'][0]['filename']='apropos';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$head['access'][1]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$titre='Licence';
+require'../autres/source-haut.php';
+include'menu.php';
+?>
+<div id="intro"><h1>Licence</h1>
+<p>Le contenu de ce site m'appartenant (pages, images, animations, sons et toutes autres formes de médias)
+ est sous Licence Creative Commons.</p></div>
+<div id="content">
+<p>Selon le contrat <strong>by-nc-sa 2.5</strong>, vous pouvez :</p>
+<ul class="cc">
+ <li>Reproduire ces créations, les distribuer et les communiquer au public. </li>
+ <li>Modifier ces créations.</li></ul>
+<p>A condition de :</p>
+<ul class="cc">
+ <li>Citer le nom de l'auteur original (Sylvain SABOUA).</li>
+ <li>Ne pas utiliser ces créations à des fins commerciales.</li>
+ <li>Redistribuer ces créations avec un contrat identique à celui-ci.</li></ul>
+<p><img class="t32" alt="CC" src="/img/licence/32cc.gif" /> Licence Creative Commons<br />
+ <img class="t32" alt="By" src="/img/licence/32by.gif" /> Citer l'auteur original<br />
+ <img class="t32" alt="NC" src="/img/licence/32nc.gif" /> Pas d'utilisation commerciale<br />
+ <img class="t32" alt="SA" src="/img/licence/32sa.gif" /> Redistribuer cette création avec un contrat identique à celui-ci</p>
+<p><a href="http://creativecommons.org/licenses/by-nc-sa/2.5/" class="externe">http://creativecommons.org/licenses/by-nc-sa/2.5/</a></p></div>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + f82b1414aeb4391a250c5fd16e4525546cb441d3 (mode 644)
--- /dev/null
+++ apropos/menu.php
+<div id="menuapropos">
+<h3>A propos</h3>
+<ul class="app">
+ <li><a href="index.php">Sommaire</a></li>
+ <li><a href="licence.php">Licence</a></li>
+ <li><a href="stats.php">Statistiques</a></li>
+ <li><a href="accesskeys.php">Accessibilité</a></li>
+ <li><a href="/mail/">Contact</a></li>
+</ul>
+</div>
blob - /dev/null
blob + 8a796e4289e09b9f400bd27479c9127e2f0addd9 (mode 644)
--- /dev/null
+++ apropos/plan.php5
+<?php
+$sitemap=simplexml_load_file('../sitemap.rdf');
+echo'<pre>';var_dump($sitemap);echo'</pre>';
+?>
blob - /dev/null
blob + 11efd4627ac1ce777c0207487e4f05f3e9d72e88 (mode 644)
--- /dev/null
+++ apropos/stats.php
+LA MISE EN PLACE DE STATISTIQUES ETANT INTERDITE PAR L'HBERGEUR FREE, CETTE PAGE EST SUPPRIMME.
+<!--php
+$head['css'][0]['filename']='stats';
+$head['css'][1]['filename']='apropos';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$head['access'][1]=array('rel'=>'start','href'=>'./','title'=>'Index de la rubrique "A propos de ce site"');
+$titre='Statistiques du site';
+$SQL['TypePage']=2;
+require'../autres/source-haut.php';
+/*****************************
+ Toutes ce qui servira
+ … faire les statistiques
+*****************************/
+ //quelques dates
+ $NumJour=date('d');
+ $NumMois=date('m');
+ $NumAn=date('Y');
+ //*****************************************************************
+ //Le nombre de pages vues et de visiteurs
+ $stats['VisiteursPages']['DepuisCreation']=0;
+ //0:depuis cr‚ation, 1:ann‚e, 2:mois
+ $stats['Visiteurs']['IPprec'][0]='';
+ $stats['Visiteurs']['IPprec'][1]='';
+ $stats['Visiteurs']['IPprec'][2]='';
+ $stats['Visiteurs']['Jour']=0;
+ $stats['Visiteurs']['Mois']=0;
+ $stats['Visiteurs']['Annee']=0;
+ $stats['Visiteurs']['Creation']=0;
+ $stats['Pages']['NbrJour']=0;
+ $stats['Pages']['NbrMois']=0;
+ $stats['Pages']['NbrAnnee']=0;
+ $stats['Pages']['NbrCreation']=0;
+ $stats['PagesPlusVues']['Mois']='';
+ $stats['PagesPlusVues']['Annee']='';
+ $stats['PagesPlusVues']['Creation']='';
+
+ $stats['Requetes']['VisiteursPages']='SELECT DateTime,AdresseIP FROM Statistiques WHERE TypePage=1 ORDER BY AdresseIP';
+ //connection … la BDD
+ $Connection=mysql_connect('localhost',$SQL['Identifiant'],$SQL['MotDePasse']);
+ mysql_select_db($SQL['NomDeLaBase'],$Connection);
+ //Requˆte pour le nombre de visiteurs et de pages vues
+ $stats['Ressources']['VisiteursPages']=RequeteSQL($stats['Requetes']['VisiteursPages'],'Le nombre de pages vues n\'a pas pu ˆtre r‚cup‚r‚.');
+ while($stats['Arrays']['VisiteursPages']=mysql_fetch_row($stats['Ressources']['VisiteursPages']))
+ {
+ $IPactuelle=$stats['Arrays']['VisiteursPages'][1];
+ $DateTime=$stats['Arrays']['VisiteursPages'][0];
+ //une page de plus
+ ++$stats['Pages']['NbrCreation'];
+ //si l'ip actuelle est diff‚rente de la pr‚c‚dente, on ajoute un visiteur depuis le d‚but des statistiques.
+ if($IPactuelle!==$stats['Visiteurs']['IPprec'][0]){
+ ++$stats['Visiteurs']['Creation'];
+ $stats['Visiteurs']['IPprec'][0]=$IPactuelle;}
+ //pour afficher les statistiques de l'ann‚e et du mois
+ if(substr($DateTime,0,4)==$NumAn)
+ {
+ if($IPactuelle!==$stats['Visiteurs']['IPprec'][1]){
+ ++$stats['Visiteurs']['Annee'];
+ $stats['Visiteurs']['IPprec'][1]=$IPactuelle;}
+ ++$stats['Pages']['NbrAnnee'];
+ if(substr($DateTime,5,2)==$NumMois)
+ {
+ if($IPactuelle!==$stats['Visiteurs']['IPprec'][2]){
+ ++$stats['Visiteurs']['Mois'];
+ $stats['Visiteurs']['IPprec'][1]=$IPactuelle;}
+ ++$stats['Pages']['NbrMois'];
+ if(substr($DateTime,8,2)==$NumJour)
+ ++$stats['Pages']['NbrJour'];
+ }
+ }
+ }
+ mysql_free_result($stats['Ressources']['VisiteursPages']);
+ unset($IPactuelle,$DateTime);
+ //Les visiteurs qui ont vu le plus de pages et le nombre de pages qu'ils ont vu
+ $LigneTableauSQL=1;
+ $stats['10PlusConnectes']='';
+ $stats['Requetes']['10PlusConnectes']='SELECT DISTINCT(AdresseIP),COUNT(AdresseIP)AS NbrPagesVues FROM Statistiques '.
+ 'WHERE TypePage=1 GROUP BY AdresseIP ORDER BY NbrPagesVues DESC LIMIT 10';
+ $stats['Ressources']['10PlusConnectes']=
+ RequeteSQL($stats['Requetes']['10PlusConnectes'],'Les statistiques concernant le nombre de visiteurs n\'ont pas pu ˆtre r‚cup‚r‚es');
+ while($stats['Arrays']['10PlusConnectes']=mysql_fetch_assoc($stats['Ressources']['10PlusConnectes']))
+ {
+ $stats['10PlusConnectes'].=$stats['Arrays']['10PlusConnectes']['NbrPagesVues'];
+ if(++$LigneTableauSQL<=10)
+ $stats['10PlusConnectes'].=', ';
+ }
+ mysql_free_result($stats['Ressources']['10PlusConnectes']);
+ unset($LigneTableauSQL);
+include'menu.php';
+?>
+<div id="intro">
+<h1>Statistiques</h1>
+<p class="pintro">Voici plusieurs statistiques à propos du site. Vous y trouverez :</p>
+<ul><li>Le nombre de visiteurs et de pages vues pendant le mois, l'année, et depuis le début des statistiques.</li>
+ <li>Le nombre de pages vues dans la journée.</li>
+ <li>Le nombre de pages que les 10 visiteurs les plus connectés au site ont vu.</li>
+ <li>Les 10 pages les plus vues sur le mois, l'année, depuis le début des statistiques et
+ le nombre de fois qu'elle ont été vues.</li></ul>
+<p>Les statistiques n'incluent pas toutes les pages du site. Les pages qui ne sont pas prises en compte dans les statistiques sont
+ la page d'accueil, cette page, la page de contact et le code PHP des pages.</p></div>
+
+<h2 style="clear:both;">Visiteurs</h2>
+<p>Depuis le début des statistiques, <!--?php echo $stats['Visiteurs']['Creation']?> visiteurs
+ ont vu un total de <!--?php echo $stats['Pages']['NbrCreation']?> pages.<br />
+ Cette année, <!--?php echo $stats['Visiteurs']['Annee']?> visiteurs
+ ont vu <!--?php echo $stats['Pages']['NbrAnnee']?> pages
+ et ce mois-ci <!--?php echo $stats['Visiteurs']['Mois']?> personnes ont vu <!--?php echo $stats['Pages']['NbrMois']?> pages.<br />
+ <!--?php echo $stats['Pages']['NbrJour']?> pages ont été vues aujourd'hui.</p>
+<p>Depuis le début des statistiques, les 10 visiteurs les plus connectés ont vu <!--?php echo $stats['10PlusConnectes']?> pages.</p>
+
+<h2>Pages</h2>
+<p>Les 10 pages les plus vues.</p>
+<!--php
+//*****************************************************************
+//Les pages les plus vues et le nombre de fois qu'elles on ‚t‚ vues.
+ //ce mois ci
+ $stats['Requetes']['PagesPlusVues']['Mois']='SELECT COUNT(*)AS NbrVisites,TitrePage,AdressePage,`DateTime` FROM Statistiques '.
+ 'WHERE TypePage=1 AND EXTRACT(YEAR_MONTH FROM DateTime)='.$NumAn.$NumMois.' GROUP BY TitrePage ORDER BY NbrVisites DESC LIMIT 10';
+ $stats['Ressources']['PagesPlusVues']['Mois']=
+ RequeteSQL($stats['Requetes']['PagesPlusVues']['Mois'],'Une erreur est survenue durant la récupération des statistiques des pages les plus vues.');
+ while($stats['Arrays']['PagesPlusVues']['Mois']=mysql_fetch_assoc($stats['Ressources']['PagesPlusVues']['Mois']))
+ $stats['PagesPlusVues']['Mois'].=
+ "\n".' <tr>'.
+ '<td><a href="'.$stats['Arrays']['PagesPlusVues']['Mois']['AdressePage'].'">'.$stats['Arrays']['PagesPlusVues']['Mois']['TitrePage'].'</a></td>'.
+ '<td class="NbrVisites">'.$stats['Arrays']['PagesPlusVues']['Mois']['NbrVisites'].'</td></tr>';
+ mysql_free_result($stats['Ressources']['PagesPlusVues']['Mois']);
+ //cette ann‚e
+ $stats['Requetes']['PagesPlusVues']['Annee']='SELECT COUNT(*)AS NbrVisites,TitrePage,AdressePage,`DateTime` FROM Statistiques '.
+ 'WHERE TypePage=1 AND EXTRACT(YEAR FROM DateTime)='.$NumAn.' GROUP BY TitrePage ORDER BY NbrVisites DESC LIMIT 10';
+ $stats['Ressources']['PagesPlusVues']['Annee']=
+ RequeteSQL($stats['Requetes']['PagesPlusVues']['Annee'],'Une erreur est survenue durant la récupération des statistiques des pages les plus vues.');
+ while($stats['Arrays']['PagesPlusVues']['Annee']=mysql_fetch_assoc($stats['Ressources']['PagesPlusVues']['Annee']))
+ $stats['PagesPlusVues']['Annee'].=
+ "\n".' <tr>'.
+ '<td><a href="'.$stats['Arrays']['PagesPlusVues']['Annee']['AdressePage'].'">'.$stats['Arrays']['PagesPlusVues']['Annee']['TitrePage'].'</a></td>'.
+ '<td class="NbrVisites">'.$stats['Arrays']['PagesPlusVues']['Annee']['NbrVisites'].'</td></tr>';
+ mysql_free_result($stats['Ressources']['PagesPlusVues']['Annee']);
+ //depuis le d‚but des statistiques
+ $stats['Requetes']['PagesPlusVues']['Creation']='SELECT COUNT(*)AS NbrVisites,TitrePage,AdressePage,`DateTime` FROM Statistiques '.
+ 'WHERE TypePage=1 GROUP BY TitrePage ORDER BY NbrVisites DESC LIMIT 10';
+ $stats['Ressources']['PagesPlusVues']['Creation']=
+ RequeteSQL($stats['Requetes']['PagesPlusVues']['Creation'],'Une erreur est survenue durant la récupération des statistiques des pages les plus vues.');
+ while($stats['Arrays']['PagesPlusVues']['Creation']=mysql_fetch_assoc($stats['Ressources']['PagesPlusVues']['Creation']))
+ $stats['PagesPlusVues']['Creation'].=
+ "\n".' <tr><td>'.
+ '<a href="'.$stats['Arrays']['PagesPlusVues']['Creation']['AdressePage'].'">'.$stats['Arrays']['PagesPlusVues']['Creation']['TitrePage'].'</a>'.
+ '</td><td class="NbrVisites">'.$stats['Arrays']['PagesPlusVues']['Creation']['NbrVisites'].'</td></tr>';
+//affichage des 3 tableaux
+?>
+<table id="PagesPlusVuesMois">
+ <caption>Ce mois-ci</caption>
+ <tbody><tr><th>Page</th><th>Nombre de visites</th></tr><!--?php echo $stats['PagesPlusVues']['Mois']?></tbody></table>
+
+<table id="PagesPlusVuesAnnee">
+ <caption>Cette année</caption>
+ <tbody><tr><th>Page</th><th>Nombre de visites</th></tr><!--?php echo $stats['PagesPlusVues']['Annee']?></tbody></table>
+
+<table id="PagesPlusVues">
+ <caption>Depuis le début des statistiques</caption>
+ <tbody><tr><th>Page</th><th>Nombre de visites</th></tr><!--?php echo $stats['PagesPlusVues']['Creation']?></tbody></table>
+<!--?php require'../autres/source-bas.php'?-->
blob - /dev/null
blob + 18748286e5b8b4de5db905f87cdfed1a7d48fe60 (mode 644)
--- /dev/null
+++ autres/compteurvisites.txt
+0
blob - /dev/null
blob + a66bdd00ce7b8cec6ed009aecf238ed0cb987d27 (mode 644)
--- /dev/null
+++ autres/confidentiel.php
+<?php
+$AdresseIP=$_SERVER['REMOTE_ADDR'];
+$Navigateur=$_SERVER['HTTP_USER_AGENT'];
+//les arrays qui correspondent a des user-agent spéciaux
+$robots=array('Googlebot','Yahoo!','msnbot','VoilaBot','Exabot','ia_archiver','findlinks','psbot','Ask Jeeves/Teoma','nutchbot','ichiro','NGbot');
+$validateurs=array('W3C_Validator','Validateur_W3C','W3C_CSS_Validator');
+$sniffers=array('Xenu Link Sleuth','Web-Sniffer','HTTrack');
+//on vérifie si l'user-agent est dans un array
+foreach($robots as $num=>$nom_robot)
+ if(strpos($Navigateur,$nom_robot)!==false)
+ {
+ $type_user_agent='bot';
+ break;
+ }
+foreach($validateurs as $num=>$nom_validateur)
+ if(strpos($Navigateur,$nom_validateur))
+ {
+ $type_user_agent='validateur';
+ break;
+ }
+foreach($sniffers as $num=>$nom_sniffer)
+ if(strpos($Navigateur,$nom_robot))
+ {
+ $type_user_agent='sniffer';
+ break;
+ }
+if($AdresseIP==='212.162.14.235'or $AdresseIP==='88.191.250.14')
+ $type_user_agent='validateur';
+//de cette facon on sait si c'est un visiteur ordinaire ou pas
+$non_visiteur=isset($type_user_agent);
+$SQL['MotDePasse']='$[bim]=8';
+$SQL['Identifiant']='sylvain.sab';
+$SQL['NomDeLaBase']='sylvain_sab';
+?>
blob - /dev/null
blob + fe92d9654824236ce80fe6712cd8933f63121207 (mode 644)
--- /dev/null
+++ autres/css/accueil.css
+h1{margin:0}
+h1 img{height:33px;padding:5px 10px 10px 10px;width:123px}
+#accueil{margin:2em 3em}
+#menu_accueil{float:left;margin-bottom:0.5em}
+#menu_accueil img{margin:0.2em 0.2em 0.2em 0;width:110px;height:36px}
+#rect{text-align:center;height:36px;width:200px;float:right}
+#rect img{height:15px;display:block;margin:0.5em 0.5em 0.5em -4em;width:80px}
+#addr{clear:both;margin-left:10px}
blob - /dev/null
blob + 5a5457df2d03f4ddf00d0ef7087cab9eb10764fe (mode 644)
--- /dev/null
+++ autres/css/apropos.css
+body{background-color:yellow;color:inherit}
+#menuapropos{float:left;width:15%;border:2px solid blue;padding:1px}
+#menuapropos h3{margin:0;padding:1px;text-indent:0}
+ul.app{margin:0;padding-left:20px}
+#intro{margin-left:17.5%}
+h1{margin:0}
+#content{margin:auto;width:70%;text-align:center}
+.access,.access td,.access th{text-align:center;border:1px solid black}
+ul.cc{list-style:url(/img/licence/ccmini.gif)}
+ul.app{list-style:url(/img/mini/apropos.gif)}
blob - /dev/null
blob + b6b0f8d5f4c21d45b5ffdf26378212bb306961f7 (mode 644)
--- /dev/null
+++ autres/css/cestquoi.css
+p#next{background:gray;border:1px solid #000;color:inherit;line-height:1.2em;padding:10px}
+p#next a{margin:5px 0}
blob - /dev/null
blob + 575fe4c4e6e94678393f8c3d019f850aea66de7a (mode 644)
--- /dev/null
+++ autres/css/code.css
+/*xHTML*/
+code.xhtml span.dxml{color:purple;font-style:italic}
+code.xhtml span.doctype{color:#04b;font-style:italic}
+.xhtml span.bal,.html_bal{color:purple;font-weight:700}
+.xhtml span.attr,.html_attr{font-weight:700}
+.xhtml span.val,.html_val{color:blue}
+.xhtml span.com,.html_com{color:green}
+/*CSS*/
+code.css span.com{color:gray}
+code.css span.elm{color:maroon;font-weight:700}
+code.css span.class{color:#b8860b}
+code.css span.id{color:#ff1493}
+code.css span.pc{color:red}
+code.css span.ppt,code.xhtml span.style span.ppt{color:maroon}
+code.css span.val,code.xhtml span.style span.val{color:#ec7600}
+/*JS*/
+.js_reserv{font-weight:700}
+.js_synt{color:green}
+.js_obj{color:red}
+.js_str{color:blue}
+.js_com{color:gray}
+.js_num{color:pink}
+/*PHP*/
+code.php span.fonction{font-weight:700}
+code.php span.synt{background-color:#0ff}
+.php_tag{background-color:gray}
+.php_reserv{font-weight:700}
+.php_synt{color:green}
+.php_str{color:olive}
+.php_com{color:gray}
+.php_num{color:purple}
+.php_func{color:brown;border-bottom:1px dotted brown;font-weight:700}
+.php_const{font-weight:700}
+.php_var{color:blue}
+/*PYTHON*/
+.py_com{color:gray}
+.py_func{color:orange}
+.py_reserv{font-weight:bold}
+.py_num{color:purple}
+.py_synt{color:green}
+.py_str{color:olive}
+/*AUTRES ou TOUS*/
+code.xhtml span.attr,code.php span.fonction{font-weight:700}
+pre{margin:0.5em 0 0 2.5em;padding:0.25em}
+.view-source{margin:0.25em;overflow:auto}
+code,pre{background:#ebebeb;color:inherit;font-family:'dejavu sans mono','bitstream vera sans mono',monospace}
+pre#view-source,pre.view-source{padding:1em;border:2px solid black;overflow:auto}
blob - /dev/null
blob + d9765fca759c758d3849be0f1626b086718b750d (mode 644)
--- /dev/null
+++ autres/css/configwindows.css
+.som{background:#ccc;border:2px solid #000;color:inherit;font:700 1em arial,sans-serif,serif;width:100%}
+.som a{background:inherit;color:#000}
+.g,.c,.d{width:33%}
+.g{text-align:left}
+.c{text-align:center}
+.d{text-align:right}
+.ex{background:#ffc;border:2px solid #000;color:#000;font-weight:700;padding:10px}
+table.service{text-transform:capitalize}
+table.service thead,.service tfoot{background:#ffc;color:inherit;font-weight:700;text-align:center}
+table.service td{padding-left:10px;padding-right:10px}
blob - /dev/null
blob + 47b2a919b53dae256fb3f0bfd2d2805e13d749af (mode 644)
--- /dev/null
+++ autres/css/exemplecss.css
+.rouge{background:inherit;color:red}
+.bleu{background:inherit;color:blue}
+.nomargin{margin-bottom:0}
+.nomargintop{margin-top:0}
+p#exemplelorem,p#exemple1{background:#000;border-width:4px 4px 4px 8px;border:solid #66c;color:#fff;margin-left:20%}
+p#exemplelorem{padding:10px}
+p#exemplelorem:first-letter{background:gray;border:2px green solid;color:red;float:left;font:2em 'comic sans ms',serif;
+height:4em;margin-right:2px;padding:10px}
blob - /dev/null
blob + 3265d398bc794771c6338be0d90687bc520c0a12 (mode 644)
--- /dev/null
+++ autres/css/index.html
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+ <title>Valider les CSS</title>
+ <link rel="stylesheet" type="text/css" href="accueil.css" />
+ <link rel="stylesheet" type="text/css" href="apropos.css" />
+ <link rel="stylesheet" type="text/css" href="cestquoi.css" />
+ <link rel="stylesheet" type="text/css" href="configwindows.css" />
+ <link rel="stylesheet" type="text/css" href="erreur.css" />
+ <link rel="stylesheet" type="text/css" href="exemplecss.css" />
+ <link rel="stylesheet" type="text/css" href="liens.css" />
+ <link rel="stylesheet" type="text/css" href="logiciels.css" />
+ <link rel="stylesheet" type="text/css" href="logos.css" />
+ <link rel="stylesheet" type="text/css" href="logwinamp.css" />
+ <link rel="stylesheet" type="text/css" href="news.css" />
+ <link rel="stylesheet" type="text/css" href="notie.css" />
+ <link rel="stylesheet" type="text/css" href="rss.css" />
+ <link rel="stylesheet" type="text/css" href="styledefaut.css" />
+ <link rel="stylesheet" type="text/css" href="styledefautie.css" />
+ <link rel="stylesheet" type="text/css" href="stylefavs.css" />
+ <link rel="stylesheet" type="text/css" href="stylemotcle.css" />
+ <link rel="stylesheet" type="text/css" href="styletemp.css" />
+ <link rel="stylesheet" type="text/css" href="temp.css" />
+ </head>
+ <body>
+<p>
+ Cette page comporte une balise link par fichier CSS présent sur le site.<br />
+ Pour valider tous les CSS d'un coup, il suffit de vous rendre sur la page suivante :<br />
+ <a href='http://jigsaw.w3.org/css-validator/validator?uri=http://sylvain.sab.free.fr/autres/css/index.html'>
+ http://jigsaw.w3.org/css-validator/validator?uri=http://sylvain.sab.free.fr/autres/css/index.html</a><br /><br />
+
+ Cependant, le fichier "mail.css" est volontairement ommis de cette liste, car il comprend quelques propriétés CSS 3
+ qui le rendent invalides.
+</p>
+ </body>
+</html>
blob - /dev/null
blob + d3281f7ccc4be2492db612218826c84354025557 (mode 644)
--- /dev/null
+++ autres/css/liens.css
+div{margin:0 3em}
+div h2{margin:1em -1.5em}
+div h6{margin:0}
+p.liste{padding-left:2em;border:1px solid black;margin-left:-2em}
+em{display:list-item;font-style:normal;margin-top:10px;text-transform:capitalize}
+em a{background:inherit;color:#000}
blob - /dev/null
blob + 956fcbb106808a58c6b320bb6f923b29045d933f (mode 644)
--- /dev/null
+++ autres/css/logiciels.css
+div.log{margin-left:2%;margin-top:1em;border:1px solid gray;padding:1%}
+div.log h6{margin-bottom:0.5em;margin-top:0}
+div.log h6 a{background:inherit;color:#000}
+div.log span.log2,div.log span.log2 a{background:inherit;color:#999}
+div.log p{margin:0}
+div.log img{margin-right:0.5em}
blob - /dev/null
blob + 5ac67d5f5d124e9d222c68ba0b419a9a8dbe76b6 (mode 644)
--- /dev/null
+++ autres/css/logos.css
+div.liens,div.img{color:inherit;padding:1em;background:inherit;border:2px solid #000;max-width:95%;width:auto}
+div.liens{margin-top:1em}
+p.note{background:#ff9;border:2px dashed red;color:inherit;height:20%;padding:10px;width:25%}
+div,p.note{font:1em 'comic sans ms',serif;text-align:center;margin:auto}
+hr.t20{width:20%}
+
+img.t512{width:512px;height:512px}
+img.t250{width:250px;height:250px}
+img.w200{width:200px}
+img.w196{width:196px}
+img.w192{width:192px}
+img.w180{width:180px}
+img.w158{width:158px}
+img.w128{width:128px}
+img.w120{width:120px}
+img.w110{width:110px}
+img.w88{width:88px}
+img.w80{width:80px}
+
+img.h200{height:200px}
+img.h196{height:196px}
+img.h192{height:192px}
+img.h128{height:128px}
+img.h80{width:80px}
+img.h60{height:60px}
+img.h48{height:48px}
+img.h32{height:32px}
blob - /dev/null
blob + e9cf7a2751b665d76e9298b82c8ec14c5489e9cb (mode 644)
--- /dev/null
+++ autres/css/logwinamp.css
+table.dl{text-transform:capitalize;width:100%;border-collapse:collapse;margin-top:0.5em}
+table.dl th,table.dl td{border:1px solid}
+.dl th{background:#ff0;color:inherit;font-size:1.05em;text-align:center}
+.dl caption{font-size:1.2em;text-align:left}
blob - /dev/null
blob + 2d310c533c6604485b2310fd02cc336cf925c270 (mode 644)
--- /dev/null
+++ autres/css/mail.css
+/*Il y a quelques propriétés CSS 3 dans ce fichier,
+d'ou son invalidité.
+-moz-border-radius rend les bordures arrondies
+dans les navigateurs qui utilisent le moteur de rendu gecko,
+entre autres Firefox, mozilla, seamonkeys et camino*/
+form{border:2px solid #000;width:90%}
+p#msg,p#adr,p#radio{-moz-border-radius:10px;border:2px solid #ccc;margin-right:10%;padding:10px}
+p#msg textarea{border:1px solid #000;height:30em;width:80%}
+p#adr input{border:1px solid #000}
+p.bt{text-align:center}
+p.bt input{-moz-border-radius:5px;border:1px red solid;width:50%}
+input:focus,textarea:focus{background:#efefef;color:#000}
blob - /dev/null
blob + edeb545d5fe470818ac171b8328f36199e0d70f6 (mode 644)
--- /dev/null
+++ autres/css/news.css
+p{display:list-item}
+div#footer p{display:block}
blob - /dev/null
blob + fe96fc9db4cdb5de9706068720a995bcb1a68cc7 (mode 644)
--- /dev/null
+++ autres/css/rss.css
+div#parent{margin:20px auto;width:80%}
+strong#titresite{font-size:1.4em;font-style:normal;font-weight:700}
+strong#description{font-size:1.2em;font-style:normal;font-weight:700}
+div.item{border:1px #c8c8c8 solid;clear:both;margin:3px auto;padding:6px 10px;width:90%}
+a.nomitem{font-weight:700}
blob - /dev/null
blob + 19d2a7e6cb229dfcb9ed0efc6387a5969eefbf95 (mode 644)
--- /dev/null
+++ autres/css/stats.css
+table,caption{margin-right:60%}
+caption{color:red;font-weight:bold;text-align:left;margin-top:1em}
+table,th{border:2px solid black}
+td{border:1px solid black}
+.NbrVisites{text-align:right}
blob - /dev/null
blob + 8aca70b449c1a861ddb2a74f8ddf179672f079a2 (mode 644)
--- /dev/null
+++ autres/css/styledefaut.css
+html{height:100%;overflow:scroll;direction:ltr;font-size:0.8em}
+body{font-family:'Trebuchet ms',Verdana,Arial,Helvetica,sans-serif;padding:10px;border:1px dotted}
+/*menu footer*/
+#menu img{padding:1px 0 0 1px}
+#menu .m{width:110px;height:36px;}
+#menu .d{padding-right:1px;}
+#menu .r{padding:0 14px 0 15px;}
+#menu .r img, .footer img{width:80px;height:15px;}
+#menu{border:2px solid #000;height:99px;margin:auto;text-align:center;width:445px}
+#barmen{border:1px solid #000;height:0}
+#footer{clear:both;background:gray;border:1px solid #000;color:inherit;margin:auto;text-align:center}
+#footer .f{margin:auto 3%}
+#footer a:link,#footer a:visited{background:inherit;color:blue}
+#footer .lien{margin:4em}
+#footer p{margin:1em;padding:0}
+#footer #statScript:hover span{color:red}
+/*titres*/
+h1{background:url(/img/gradient/rouge.jpg) #9b0020;font-size:1.5em;padding-left:0.5em;text-transform:uppercase}
+h2{background:url(/img/gradient/orange.jpg) #ff0500;font-size:1.4em;text-transform:uppercase;padding-left:0.7em;}
+h3{background:url(/img/gradient/vert.jpg) #00ac00;font-weight:400;font-size:1.3em;text-indent:1em;text-transform:capitalize}
+h4{background:url(/img/gradient/bleu.jpg) #0205cc;font-weight:700;text-indent:1.2em;text-transform:capitalize}
+h5{background:url(/img/gradient/gris.jpg) bottom #feffed;font-variant:small-caps;text-transform:capitalize;text-indent:1.5em;color:#fff}
+h5:first-letter{font-weight:400;text-transform:uppercase}
+h6{font-family:'times new roman',serif;text-transform:capitalize;text-indent:2.5em;
+ background:url(/img/gradient/jaune.jpg) #feff37;width:auto;}
+h1,h2,h3,h4,h5,h6{background-repeat:repeat-x}
+h1,h2,h3{border:2px solid #000;font-family:'Comic sans MS',sans-serif}
+h4,h5,h6{border:2px solid gray;font-family:Arial,sans-serif}
+h1,h2{border:2px solid #000}
+/*quevoir*/
+table.quevoir caption{font-size:1.2em;text-align:left;text-transform:capitalize}
+table.quevoir,table.quevoir caption{margin-left:2em}
+table.quevoir tfoot,table.quevoir thead{background:#3cf;color:#000;font-size:1.1em;text-align:center;text-transform:capitalize}
+table.quevoir tbody{text-align:center;text-transform:capitalize}
+/*paragraphes*/
+p{margin:2.5%}
+p:hover:first-letter{color:red}
+p:first-letter,p.pintro:first-letter{font:700 0.9em 'Comic Sans MS',serif;text-transform:uppercase}
+.pintro{margin:0 5%;text-indent:10px}
+/*liens*/
+a:link{text-decoration:none}
+a:hover{background:inherit;color:#000;text-decoration:underline overline}
+a:active,a:focus,a:visited:active;a:visited:focus{background:#000;color:#3f3;text-decoration:underline overline}
+a:active img,a:focus:img,a:visited:focus img,a:visited:active img{border:1px dotted GRAY}
+a:visited{background:inherit;color:#666;text-decoration:none}
+.fr:before,a.externe:lang(fr):before,[hreflang|=fr]:before{content:url(/img/mini/flagfr.png)' [fr] '}
+.en:before,a.externe:lang(en):before,[hreflang|=en]:before{content:url(/img/mini/flaguk.png)' [en] '}
+.de:before,a.externe:lang(de):before,[hreflang|=de]:before{content:url(/img/mini/flagde.png)' [de] '}
+.ru:before,a.externe:lang(ru):before,[hreflang|=ru]:before{content:url(/img/mini/flagru.png)' [ru] '}
+.externe:after{content:' 'url(/img/mini/externe.png)}
+/*images*/
+img{border:0;vertical-align:middle}
+img.w80{width:80px}
+img.h15{height:15px}
+img.t16{width:16px;height:16px}
+img.t32{width:32px;height:32px}
+img.t48{width:48px;height:48px}
+img.t64{width:64px;height:64px}
+img.t128{width:128px;height:128px}
+img.t256{width:256px;height:256px}
+/*autres (corrections)*/
+h1 img{margin:0.3em}
+dt{margin-left:2.5%;text-decoration:underline}
+hr.barquoi{clear:both;margin-right:50%}
+abbr,acronym{cursor:help}
+.motcle,strong,em{font-family:Arial,sans-serif}
+.motcle{font-weight:700}
blob - /dev/null
blob + 76046f107e222cbda54d699efd71617143cf89e7 (mode 644)
--- /dev/null
+++ autres/css/stylefavs.css
+body{font:1em 'Trebuchet MS',Verdana,Arial,Helvetica,sans-serif}
+a.d{font-weight:700}
+span.l{font-size:0.8em}
+span.n{margin-left:3%}
+hr.fb{margin:auto;width:80%}
+p.note{background:gray;border:1px solid #000;color:inherit;text-align:center}
blob - /dev/null
blob + 44e7f4f82e2a15a2225f1ef21c1542b41f1136b2 (mode 644)
--- /dev/null
+++ autres/css/stylemotcle.css
+.code{background:#ccc;border:1px solid #000;color:inherit}
+.code1{color:#939;font-weight:700}
+.code2{color:#33f}
+.codexml{background:#ccc;border:2px solid;color:inherit}
+.xml1{color:#c3c;font-style:normal;font-weight:700}
+.xml2{color:#939}
+.xml3{color:#990}
+.xml4{color:#63f}
+.code1,.code2,.xml1,.xml2,.xml3,.xml4{background:inherit}
blob - /dev/null
blob + b576fdc3c25a36e8b1b6472421b04860ae221807 (mode 644)
--- /dev/null
+++ autres/css/temp.css
+.entete{font:1.1em Arial,serif;text-align:center;text-transform:capitalize;background:#ffc;color:#000}
+.taille{text-align:right}
+table{text-transform:capitalize;width:100%}
+td{padding:2px}
+div#animation{text-align:center}
blob - /dev/null
blob + 0294f0c87b35159ad4f9d6cc1c1d934fa8da96c7 (mode 644)
--- /dev/null
+++ autres/error/index.php
+<?php
+$SQL['TypePage']=2;
+if(isset($_GET['erreur']))
+{
+ switch($_GET['erreur'])
+ {
+ case'403':
+ $titre='Erreur 403 : Accès Interdit';
+ $Erreur='Vous n\'êtes pas autorisé à accéder à ce fichier.';
+ break;
+ case'500':
+ $titre='Erreur 500 : Erreur du serveur';
+ $Erreur='Le serveur à rencontré une erreur. Si ce site n\'est pas accessible, vous pouvez vous rendre sur '."\n\t".
+ '<a href="http://ssylvainsab.free.fr/">une copie que je place en cas de problème</a>.';
+ break;
+ default:
+ $titre='Erreur 404 : Fichier Introuvable';
+ $Erreur='Ce fichier est introuvable. Vérifiez l\'url que vous avez entré.<br />'."\n\t".
+ 'Le lien est peut-être mort. L\'erreur à été enregistrée dans la base de données afin que je puisse y remédier.';
+ break;
+ }
+ $head['css'][0]['filename']='erreur';
+ require'../source-haut.php';
+ echo'<div style="width:70%">',"\n",
+ ' <h1>',$titre,'</h1>',"\n",
+ ' <p>',$Erreur,"\n",
+ ' <br />',"\n",
+ ' Retour à l\'accueil : ',"\n",
+ ' <a href="/index.php"><img src="/img/boutons/btssylvainsab.gif"',
+ ' style="width:123px;height:33px;" alt="Sylvain.sab" /></a>',"\n",
+ ' </p>',"\n",
+ '</div>',"\n";
+}
+else
+{
+ $titre='Voir les erreurs';
+ require'../source-haut.php';?>
+
+<h1>Les erreurs du site</h1>
+<p>Quelle erreur voulez-vous voir ?</p>
+<ul><li><a href="?erreur=404">Erreur 404 (Fichier introuvable)</a></li>
+ <li><a href="?erreur=403">Erreur 403 (Accès interdit)</a></li>
+ <li><a href="?erreur=500">Erreur 500 (Erreur du serveur)</a></li></ul>
+<?php
+}
+$Connection=mysql_connect('localhost',$SQL['Identifiant'],$SQL['MotDePasse']);
+mysql_select_db($SQL['NomDeLaBase'],$Connection);
+$SQL['AdressePage']=mysql_real_escape_string(htmlspecialchars($_SERVER['REQUEST_URI'],ENT_NOQUOTES));
+$SQL['Referer']=htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_QUOTES);
+//si on a voulu voir le fichier robots.txt, c'est un bot
+if($SQL['AdressePage']==='/robots.txt')
+{
+ $PageIntrouvable=true;
+ if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
+ $SQL['AdresseIP']=$_SERVER['HTTP_X_FORWARDED_FOR'];
+ elseif(isset($_SERVER['HTTP_CLIENT_IP']))
+ $SQL['AdresseIP']=$_SERVER['HTTP_CLIENT_IP'];
+ else
+ $SQL['AdresseIP']=$_SERVER['REMOTE_ADDR'];
+ $RQAjoutRobot='INSERT INTO Robots(DateTime,UserAgent,AdresseIP) '.
+ 'VALUES(NOW(),\''.$_SERVER['HTTP_USER_AGENT'].'\',\''.$SQL['AdresseIP'].'\')';
+ RequeteSQL($RQAjoutRobot,'Les données concernant le Bot n\'ont pas pu être ajoutées.','Insertion');
+}
+/*si il y a une erreur :
+ l'url demandée ne contient pas le chemin du fichier d'erreur
+ et ce n'est pas un robot qui regarde robots.txt*/
+elseif(!strpos($SQL['AdressePage'],'/autres/error/'))
+{
+ $PageIntrouvable=true;
+ $AjoutErreur='INSERT INTO erreursPages(PageDemandee,DateTime,Referer) '.
+ 'VALUES(\''.$SQL['AdressePage'].'\',NOW(),\''.$SQL['Referer'].'\')';
+ $Erreur='J\'enregistre les erreurs de fichiers non trouvés pour y remédier.<br />Il y a eu un problème durant la classification de cette erreur.';
+ RequeteSQL($AjoutErreur,$Erreur,'Insertion');
+}
+require'../source-bas.php';
+?>
blob - /dev/null
blob + 54ce6539e1f5ce5b2d03d4efbae441bab15b3681 (mode 644)
--- /dev/null
+++ autres/redir.php
+<?php
+//Si on a demandé une redirection (variable get), on prend la variable de redirection
+if(isset($_GET['redir']))
+ $page=$_GET['redir'];
+//sinon on fait une variable vide
+else
+ $page='';
+//******************************
+//toutes les redirections
+$redirections=array(
+ 'Winamp' =>'http://download.nullsoft.com/winamp/client/winamp524_full_bundle_emusic-7plus.exe',
+ 'TraductionWinamp'=>'http://download.nullsoft.com/customize/component/2006/6/14/P/winamp_in_FR_.exe',
+ 'OGGWinamp' =>'http://download.nullsoft.com/customize/component/2005/1/11/P/Ogg-Vorbis_encoder_v1-1.exe',
+ 'SkinWMP' =>'http://www.winamp.com/skins/details.php?id=143975');
+//Si la redirection demandée existe
+if(array_key_exists($page,$redirections))
+{
+ //titre et meta de redirection, puis la page (explications)
+ $head=' <title>Redirection</title>'."\n".' <meta http-equiv="refresh" content="5;url='.$redirections[$page].'">'."\n";
+ $page=' <p>Vous allez être redirigé dans 5 secondes vers <a href="'.$redirections[$page].'">le téléchargement</a>.</p>
+ <p><a href="/logiciels/winampnotice.php">Retour à la notice de winamp</a></p>';
+ //on affiche la page avec la redirection
+?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html lang="fr">
+<head>
+<?php echo $head;?>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head>
+<body>
+<?php echo $page;?>
+</body>
+</html><?php
+}
+//******************************
+//Si on n'a pas demandé de redirection ou que le nom est mauvais
+else
+{
+ $titre='Redirections';
+ $SQL['TypePage']=2;
+ require'source-haut.php';?>
+ <p>Cette page comporte des liens vers des urls longues, vers lesquelles je redirige au lieu de donner le lien directement.
+ Ce sont surtout des liens vers des fichiers à télécharger.</p>
+ <p><?php
+ //on affiche les redirections possibles
+ $descriptionUrl=array('Winamp','la traduction en français','le plug-in pour enregistrer les musiques en OGG','le skin Windows Media Player');
+ $compte=0;
+ foreach($redirections as $url)
+ echo'Télécharger <a href="'.$url.'">'.$descriptionUrl[$compte++].'</a><br />'."\n".' ';
+ echo '</p>';
+ require'source-bas.php';
+}
+?>
blob - /dev/null
blob + cf98e0e57f340d7c457d94b3f5d43dde398c4b20 (mode 644)
--- /dev/null
+++ autres/source-bas.php
+<?php
+if($_SERVER['SCRIPT_NAME']==='/autres/source-bas.php')
+ die(header('Location:source-haut.php'));
+/*************************************************/
+/* Fonction bas */
+/*************************************************/
+//quelques variables qui vont servir
+ $nomServeur=$_SERVER['SERVER_NAME'];
+ $SQL['AdressePage']=htmlspecialchars($_SERVER['REQUEST_URI'],ENT_NOQUOTES);
+ $AdresseComplete=$nomServeur.$SQL['AdressePage'];
+
+
+/*MAJ des statistiques dans la Base de données
+//NOTE : INTERDIT PAR FREE, donc tout ceci est commenté
+if(!$non_visiteur)
+{
+ //si on ne s'est pas connecté avant
+ if(!isset($Connection))
+ {
+ $Connection=mysql_connect('localhost',$SQL['Identifiant'],$SQL['MotDePasse']);
+ mysql_select_db($SQL['NomDeLaBase'],$Connection);
+ }
+ //on définir quelques variables pour les insérer dans la BDD
+ if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
+ $SQL['AdresseIP']=$_SERVER['HTTP_X_FORWARDED_FOR'];
+ elseif(isset($_SERVER['HTTP_CLIENT_IP']))
+ $SQL['AdresseIP']=$_SERVER['HTTP_CLIENT_IP'];
+ else
+ $SQL['AdresseIP']=$_SERVER['REMOTE_ADDR'];
+ if(isset($_SERVER['HTTP_REFERER']))
+ $SQL['Referer']=mysql_real_escape_string(
+ preg_replace('#(\?|&)(php)?s(es)?s?id=([^&]*)#i','',
+ str_replace('http://'.$nomServeur,'',
+ htmlspecialchars($_SERVER['HTTP_REFERER'],ENT_NOQUOTES))));
+ else
+ $SQL['Referer']='';
+ if(!isset($SQL['TypePage']))
+ $SQL['TypePage']=1;
+ /*si il n'y a aucune erreur :
+ (l'url demandée contient le chemin du fichier d'erreur
+ ou l'url ne le contient pas et le chemin du fichier exécuté non plus
+ et ce n'est pas un robot qui regarde robots.txt)* /
+ if(!isset($PageIntrouvable))
+ {
+ $AjoutStat='INSERT INTO Statistiques(TitrePage,AdressePage,DateTime,AdresseIP,Referer,TypePage) VALUES(\''.
+ mysql_real_escape_string($SQL['TitrePage'])."','".mysql_real_escape_string($SQL['AdressePage'])."',NOW(),'".
+ sha1($SQL['AdresseIP']).'\',\''.$SQL['Referer'].'\',\''.$SQL['TypePage'].'\')';
+ RequeteSQL($AjoutStat,'La mise à jour des statistiques concernant le site a rencontré un problème.','Insertion');
+ }
+}
+*/
+if(isset($Connection))
+ mysql_close($Connection);
+if($NombreDeRequetes===1)
+ $InfoRequete='<span>1</span> requête';
+else
+ $InfoRequete='<span>'.$NombreDeRequetes.'</span> requêtes';
+echo '<hr style="clear:both;" /><div id="footer"><p id="mini-ban">',
+ '<span class="f"><a href="http://validateur.ca/?q=http://',$nomServeur,'" tabindex="200">',
+ '<img src="/img/valide/xhtml.gif" alt="Xhtml 1.1" title="Valider toutes les pages du site" /></a></span>',
+ '<span class="f"><a tabindex="210" href="http://www.validome.org/validate/?uri=http://',$AdresseComplete,'">',
+ '<img title="Ce site est valide Xhtml 1.1" alt="Xhtml 1.1" src="/img/valide/validomexhtml.gif" /></a></span>',
+ '<span class="f"><a tabindex="220" href="http://jigsaw.w3.org/css-validator/validator?uri=http://',$AdresseComplete,'">',
+ '<img alt="W3C | CSS 2.0" title="Ce site est valide CSS 2.0" src="/img/valide/w3ccss.gif" /></a></span>',
+ '<span class="f"><a tabindex="230" href="http://validateur-accessibilite.apinc.org/index.php?urlAVerif=http://',$AdresseComplete,
+ '"><img alt="W3C WAI - AAA" title="Tester l\'accessiblilité du site" src="/img/valide/w3cwai.gif" /></a></span>',
+ '<span class="f"><a tabindex="240" href="/apropos/licence.php" title="Le contenu de ce site est sous licence Creative Commons">',
+ '<img src="/img/rect/cclicence.png" alt="CC License" /></a></span></p>',
+ '<p id="statScript">',$InfoRequete,'. Temps d\'exécution : <span>',round(array_sum(explode(' ',microtime()))-$TempsDebutExecutionScript,4),
+ '</span> secondes, dont <span>',round($TempsTotalSQL,4),'</span> secondes de requêtes SQL.</p>',
+ '<p id="footer-liens"><span class="lien"><a href="#barmen">Haut</a></span><span class="lien">Source PHP : ',
+ '<a href="?source">De cette page</a> / <a href="/autres/source-haut.php">De la page mère</a></span></p></div>'
+ //licence CC et fin de page
+ ?>
+<!--
+<rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <Work rdf:about="">
+ <license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/" />
+ <dc:date>2006</dc:date>
+ <dc:description>Tous les produits crées pour le site de Sylvain SABOUA.
+ Pages (code source et contenu), animations, articles, etc...</dc:description>
+ <dc:creator><Agent><dc:title>Sylvain SABOUA</dc:title></Agent></dc:creator>
+ <dc:rights><Agent><dc:title>Sylvain SABOUA</dc:title></Agent></dc:rights>
+ <dc:source rdf:resource="http://sylvain.sab.free.fr/" />
+ </Work>
+ <License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/">
+ <permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
+ <permits rdf:resource="http://web.resource.org/cc/Distribution"/>
+ <requires rdf:resource="http://web.resource.org/cc/Notice"/>
+ <requires rdf:resource="http://web.resource.org/cc/Attribution"/>
+ <prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/>
+ <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
+ <requires rdf:resource="http://web.resource.org/cc/ShareAlike"/>
+ </License>
+</rdf:RDF> -->
+</body></html><?php
+/*ancien compteur de pages vues, avec un fichier texte.
+//je l'utilise quand la connexion a MySQL plante.
+ $fichier=$_SERVER['DOCUMENT_ROOT'].'/autres/compteurvisites.txt';
+ $compteur=fopen($fichier,'r');
+ $nbrPagesVues=intval(fgets($compteur));
+ $nbrPagesVues++;
+ unlink($fichier);
+ $compteur=fopen($fichier,'a');
+ fwrite($compteur,$nbrPagesVues);
+//*/
+?>
blob - /dev/null
blob + 24d2a2d74aa817db092f91b11c0d5697a7f8747a (mode 644)
--- /dev/null
+++ autres/source-haut.php
+<?php
+$TempsDebutExecutionScript=array_sum(explode(' ',microtime()));
+$NombreDeRequetes=0;
+$TempsTotalSQL=0;
+
+/***************************************
+ A utiliser pour les requêtes
+***************************************/
+function RequeteSQL($requete,$erreur='',$Action='Recuperation')
+{
+ //infos SQL (nombre de requêtes et temps)
+ global $NombreDeRequetes,$TempsTotalSQL;
+ $NombreDeRequetes++;
+ //message d'erreur possible
+ $MsgErrStandard='<p>Une erreur est survenue durant la requête :<br />'.
+ $erreur.'</p>'."\n".'<p>Requête :<br />'.$requete.'</p>'."\n".'<p>Erreur (numéro ';
+ //pour la durée de la requête
+ $TempsDebutSQL=array_sum(explode(' ',microtime()));
+ //on envoie la requête
+ if($Action==='Recuperation')
+ $Resultat=mysql_query($requete)or die($MsgErrStandard.mysql_errno().') :'.mysql_error().'</p></body></html>');
+ elseif($Action==='Insertion'or $Action==='Modification')
+ $Resultat=mysql_unbuffered_query($requete)or die($MsgErrStandard.mysql_errno().') :'.mysql_error().'</p></body></html>');
+ //temps de fin d'exécution SQL
+ $TempsTotalSQL+=array_sum(explode(' ',microtime()))-$TempsDebutSQL;
+ return $Resultat;
+}
+
+if(!isset($charset))
+ $charset='iso-8859-1';
+
+//si on veut voir ce fichier
+if($_SERVER['SCRIPT_NAME']==='/autres/source-haut.php')
+{
+ $_GET['source']='';
+ $titre='Page mère';
+}
+
+//pour la BDD
+ $SQL['TitrePage']=$titre;
+
+require'confidentiel.php';
+/*si on a demandé à voir la source, on modifie le titre
+ et on empêche les moteurs de recherche d'indexer
+ (sinon mon site est "référencé en double" dans google...)*/
+ if(isset($_GET['source']))
+ {
+ $titre='Code de la page : «'.$titre.'»';
+ if($_SERVER['SCRIPT_NAME']!=='/autres/source-haut.php')
+ $head='<!--Pour ne pas indexer les sources-->'."\n\t".
+ '<meta http-equiv="robots" content="noindex" />'."\n\t";
+ $head.='<!--La feuille de style pour le code html-->'."\n\t".
+ '<link rel="stylesheet" type="text/css" href="/autres/css/code.css" />';
+ }
+/*servir le bon type MIME
+ if(!function_exists('htmlspecialchars_decode'))
+ {
+ function htmlspecialchars_decode($str)
+ {
+ return str_replace(array('<','>','&'),array('<','>','&'),$str);
+ }
+ }*/
+ if(false!==strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')or $type_user_agent=='validateur'){
+ $ContentType='application/xhtml+xml';
+ $Doctype='<?xml version="1.0" encoding="'.$charset.'"?'.">\n".
+ '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">';
+ ob_start();
+ }
+ else{
+ $ContentType='text/html';
+ $Doctype='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">';
+ function callback($texte)
+ {
+ $in=array(' xml:lang="','xmlns="http://www.w3.org/1999/xhtml"',' />');
+ $out=array(' lang="','','>');
+ return /*htmlspecialchars_decode(html_entities(*/str_replace($in,$out,$texte);//,ENT_NOQUOTES),ENT_NOQUOTES);
+ }
+ ob_start('callback');
+ }
+ header('Content-Type:'.$ContentType.';charset=',$charset);
+/************
+//affichage de la page*/
+ echo $Doctype,"\n",'<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">',"\n",'<head>',"\n\t",
+ /*Balise pour empêcher l'indexation par les moteurs de recherche
+ ajoutée le 27/6/2015 en vue d'une nouvelle utilisation du domaine,
+ celui sur l'informatique étant largement obsolète*/
+ '<meta http-equiv="robots" content="noindex, follow" />',"\n\t",
+ '<!--metas de contenu-->',"\n\t",
+ '<meta http-equiv="Content-type" content="',$ContentType,';charset=',$charset,'" />',"\n\t",
+ '<meta http-equiv="Content-Script-Type" content="text/javascript" />',"\n\t",
+ '<meta http-equiv="Content-Style-Type" content="text/css" />',"\n\t",
+ '<meta http-equiv="imagetoolbar" content="no" />',"\n\n\t",
+ '<title>',$titre,' - Sylvain.sab</title>';?>
+ <!--links css, rss-->
+ <link rel="alternate" type="application/rss+xml" title="Sylvain.sab - Flux RSS' href='/rss/rss.xml" />
+ <link rel="stylesheet" type="text/css" href="/autres/css/styledefaut.css" />
+
+ <!--links aide a la navigation-->
+ <link rel="home" href="/" title="Page d'accueil du site" />
+ <link rel="help" title="Liste des Accesskeys de ce site" href="/apropos/accesskeys.php" />
+ <link rel="author" title="Contacter l'auteur" href="/mail/" />
+ <!--link rel="contents" href="/apropos/plan.php" /-->
+
+ <!--autres balises link-->
+ <link rel="copyright" href="/apropos/licence.php" title="Le contenu de ce site est sous licence Creative Common :-)" />
+ <link rel="icon" type="image/png" href="/img/mini/favicon.png" />
+<?php
+if(isset($head))
+{
+ echo"\n\t",'<!--les autres balises selon les pages-->',"\n\t";
+ if(is_array($head))
+ {
+ if(is_array($head['css']))
+ foreach($head['css']as $numero_css=>$donnees)
+ {
+ if(empty($donnees['media']))
+ $donnees['media']='all';
+ echo'<link rel="stylesheet" type="text/css" media="',$donnees['media'],'" href="/autres/css/',$donnees['filename'],'.css" />',"\n\t";
+ }
+ if(is_array($head['access']))
+ foreach($head['access']as $numero_linkaccess=>$attributs_et_valeurs)
+ {
+ echo'<link ';
+ foreach($attributs_et_valeurs as $attr=>$val)
+ echo $attr,'="',$val,'" ';
+ echo'/>',"\n\t";
+ }
+ if(!empty($head['autres']))
+ echo $head['autres'];
+ }
+ else
+ echo $head;
+ echo"\n";
+}
+echo'</head><body>',"\n";
+/************
+/menu
+/***********/
+echo'<div id="menu"><a tabindex="10" accesskey="1" href="/index.php" title="Accesskey:1">',
+ '<img class="m" alt="Accueil" src="/img/boutons/btaccueil.gif" /></a>',
+ '<a tabindex="20" accesskey="2" href="/news.php" title="Les News du site (Accesskey:2)">',
+ '<img class="m" alt="News" src="/img/boutons/btnews.gif" /></a>',
+ '<a tabindex="30" accesskey="3" href="/logiciels/" title="Plusieurs logiciels utiles (Accesskey:3)">',
+ '<img class="m" alt="Logiciels" src="/img/boutons/btlogiciels.gif" /></a><span class="d">',
+ '<a tabindex="30" accesskey="4" href="/configurer/" title="Configurer et optimiser Windows et des logiciels',
+ ' (Accesskey:4)"><img class="m" alt="Configurer" src="/img/boutons/btconfigurer.gif" /></a></span>',
+ '<a tabindex="50" accesskey="5" href="/cestquoi/" title="L\'informatique, c\'est pas compliqué !">',
+ '<img class="m" alt="C\'est Quoi ?" src="/img/boutons/btcestquoi.gif" /></a><a tabindex="60" href="/html.php"',
+ ' title="Des conseils et astuces pour vos sites."><img class="m" alt="HTML" src="/img/boutons/bthtml.gif" /></a>',
+ '<a tabindex="70" href="/logos/"><img class="m" alt="Logos" src="/img/boutons/btlogos.gif" /></a><span class="d">',
+ '<a tabindex="80" href="/liens.php"><img class="m" alt="Liens" src="/img/boutons/btliens.gif" /></a></span><br />',
+ '<span class="r"><a tabindex="90" href="/rss/" title="Le flux RSS de ce site"><img alt="Flux RSS"',
+ ' src="/img/rect/rectrss.png" /></a></span><span class="r"><a tabindex="100" href="/temp/"',
+ ' title="Plusieurs vidéos de démonstration"><img alt="Vidéos" src="/img/rect/temp.png" /></a>',
+ '</span><span class="r"><a tabindex="110" href="/mail/" title="Me contacter"><img alt=" @ Contact @ "',
+ ' src="/img/rect/contact.png" /></a></span><span class="r"><a href="/apropos/" accesskey="6" tabindex="120">',
+ '<img alt="A propos" src="/img/rect/apropos.png" /></a></span></div><hr id="barmen" />',"\n";
+//************
+//pour voir la source*/
+if(isset($_GET['source']))
+{
+ $SQL['TypePage']=4;
+ /***************************************
+ Pour générer les codes
+ ***************************************/
+ function GenererCodeSourcePHP($adresseFichier)
+ {
+ $page=highlight_file($adresseFichier,true);
+ $page=preg_replace('`<font color="(#[a-z0-9]+)">`i','<span style=<<guillemet>>color:$1<<guillemet>>>',$page);
+
+ $in =array('"', '\'', '<code>', '</code>','</font>','<br />',' ','<<guillemet>>','<span style="color:#000000">','</span>'."\n".'</pre>',"\n".'</span></pre>','class="xhtml">'."\n");
+ $out=array('"',''','<pre id="view-source" class="xhtml">','</pre>', '</span>',"\n", ' ','"', '', '</pre>', '</pre>', 'class="xhtml">');
+ $page=str_replace($in,$out,$page);
+
+ $page=preg_replace_callback('#\?>(.+)<\?php#sU','ColorerCodeHTML',$page);
+
+ return $page;
+ }
+ function ColorerCodeHTML($Code)
+ {
+ //les entités
+ $Code[0]=preg_replace('`&(#x?[a-z0-9]+|[a-z]+)`i','<span class="ent">$0</span>',$Code[0]);
+ //les commentaires
+ $Code[0]=preg_replace('#<!--.*-->#sU','<span class="com">$0</span>',$Code[0]);
+ //les balises et attributs
+ $SyntaxeBalise='#<(/?[a-z0-9]+)( (.*))?( /)?>#sU';
+ $Code[0]=preg_replace_callback($SyntaxeBalise,'ColorerBalise',$Code[0]);
+
+ return $Code[0];
+ }
+ function ColorerBalise($Balise)
+ {
+ //balise (pas les attributs)
+ $Balise[0]=str_replace('<'.$Balise[1],'<<span class="bal">'.$Balise[1].'</span>',$Balise[0]);
+ //attributs
+ $Balise[0]=preg_replace('#([a-z]+)=((&\#039;|")([^\3]*)\3)#U','<span class="attr">$1</span>=<span class="val">$2</span>',$Balise[0]);
+
+ return $Balise[0];
+ }
+ if($_SERVER['SCRIPT_NAME']==='/autres/source-haut.php')
+ {
+ echo'<h1>Code des fichiers sources</h1>',"\n\n",
+ '<p>Ces fichiers sont utilisés sur chaque page, ils contiennent les menus, ',
+ 'et certains scripts succeptibles d\'être utilisés partout.<br />',"\n\t",
+ 'Il y a deux fichiers qui servent à cela : un fichier "source-haut.php" et un autre "source-bas.php".</p>',"\n\n";
+ echo'<h2>source-haut.php</h2>',GenererCodeSourcePHP('source-haut.php'),"\n\n\n",
+ '<h2>source-bas.php</h2>',"\n",GenererCodeSourcePHP('source-bas.php');
+ }
+ else
+ {
+ echo'<h1>',$titre,'</h1>',"\n",'<p><a href="',$_SERVER['PHP_SELF'],'">Retour</a></p>',"\n",
+ '<p>Ceci est le code php du fichier :</p>',"\n",GenererCodeSourcePHP($_SERVER['SCRIPT_FILENAME']),"\n",
+ '<p><a href="',$_SERVER['PHP_SELF'],'">Retour</a></p>';
+ }
+ require $_SERVER['DOCUMENT_ROOT'].'/autres/source-bas.php';
+ exit;
+}
+ /*
+ $page=str_replace(array('"','\''),array('"','''),$page);
+ $page=str_replace(array('<code>','</code>','</font>','<br />',' '),
+ array('<pre id="view-source" class="xhtml">','</pre>','</span>',"\n",' '),$page);
+ $page=str_replace(array('<<guillemet>>','<span style="color:#000000">','</span>'."\n".'</pre>',"\n".'</span></pre>','class="xhtml">'."\n"),
+ array('"','','</pre>','</pre>','class="xhtml">'),$page);
+ */
+?>
blob - /dev/null
blob + c114f667fb1ba1c9cf75a37b0ed5bcf043242a20 (mode 644)
--- /dev/null
+++ autres/source.php
+<p>
+ Cette page est maintenant obsolète.<br>
+ La page qui correspond est <a href="source-haut.php">source-haut.php</a>.
+</p>
+<p>
+ Un mail m'a été envoyé pour que je mette àjour les mauvais liens.</a>
+</p>
+<p>
+ Voici le code de la page :
+</p>
+<?php
+mail('sylvain.sab@free.fr','Page source obsolete',$_SERVER['REQUEST_URI']."\n".$_SERVER['HTTP_REFERER']);
+highlight_file(__FILE__);
+?>
blob - /dev/null
blob + 2043ad41f3dd311a26d38302970a1623d1ae4102 (mode 644)
--- /dev/null
+++ cestquoi/index.php
+<?php
+$head['css'][0]['filename']='cestquoi';
+$titre='Qu\'est-ce que Linux ?';
+$charset='utf8';
+require'../../autres/source-haut.php'?>
+<h1><img src="/img/cestquoi/tux-mini.png" alt="Tux" style="width:45px;height:53px" />C'est quoi GNU/Linux ?</h1>
+<h2>GNU/Linux</h2>
+ <p>Linux appartient au monde du <a href="/cestquoi/libre/">logiciel libre et open source</a>.
+ C'est un <em>système d'exploitation</em>, comme Windows XP, Windows Vista, ou encore Mac OS, qui permet comme le nom l'indique d'<em>exploiter</em> son ordinateur. Tout système d'exploitation est composé d'un noyau, qui s'occupe des tâches élémentaires (Gestion de la mémoire, dialogues entre les logiciels et le matériel...) et d'un ensemble de logiciels. Le noyau de Linux est... Linux. L'ensemble de logiciels se nomme GNU (A l'époque ou il fut dévellopé, les principaux systèmes d'exploitations étaient des systèmes non-libres dérivés d'UNIX, et très chers. Le nom GNU fut donc donné à cet ensemble, pour signifier "GNU is Not Unix" (c'est un acronyme récursif), soit "GNU n'est pas Unix"). Le système d'exploitation est donc GNU/Linux, mais on dit souvent Linux.</p>
+<h2>Distributions</h2>
+ <p>Linux est libre, chacun est donc libre de voir le code, le modifier et le redistribuer.
+ Cette liberté est la la base de la variété des distributions.</p>
+ <p>Chaque distribution utilise le même noyau Linux, mais les logiciels fournis par défaut (s'il y en a)
+ ne seront pas les mêmes. Les distributions diffèrent également selon leur orientation : certaines comme Red Hat sont plus indiquées pour être utilisées comme <a href="/cestquoi/web/serveur.php">serveur</a>, d'autres comme Ubuntu ou Mandriva sont plus destinées à un système d'exploitation complet. La façon dont elles sont fabriquées et maintenues à jour diffère également : Suse est gérée par une entreprise, alors que Debian et ses dérivés sont fabriquées par les utilisateurs. Enfin, le prix sépare les distributions : la majorité sont gratuites, mais certaines comme mandriva (Pour avoir un plus grand nombre de logiciels) sont payantes.</p>
+<h2>Principales différences avec Windows</h2>
+ <p>(Note : ici, je n'aborde que les différences directement visibles par l'utilisateur)</p>
+ <h3>Gestion des fichiers, dossiers, et périphériques</h3>
+ <p>Sous Windows, l'antislash "\" est utilisé pour délimiter des fichiers/dossiers, et
+ Linux utilise le slash "/".<br />Sous Linux, lorsque l'on utilise le gestionnaire de fichiers (l'équivalent de l'explorateur Windows), on ne voit pas les lecteurs CD/DVD, les disques durs, les clés USB, et tout ce qui peut servir à stocker des données. Chacun de ces éléments est accessible via un dossier, comme s'il n'y avait qu'un seul disque dur. Ce dossier est appelé "point de montage" : par exemple, les CDs et DVDs sont souvent <em>montés</em> (c'est à dire accessibles via) dans le dossier /media/cdrom1, /media/cdrom2, etc. Il est possible de changer les points de montage des périphériques, et de configurer Linux pour monter un périphérique à un certain endroit.<br /> Le dossier le plus haut dans l'arborescence est donc "/".</p>
+ <h3>Gestion des logiciels</h3>
+ <p>Sous Windows, pour installer un logiciel, il faut le chercher sur internet,
+ le télécharger et l'installer quelquepart dans un dossier. Pour le mettre à jour, il faut vérifier soit-même, via le logiciel si cela est possible ou bien sur Internet. C'est assez chaotique.<br />
+ Sous Linux, il y a des serveurs qui fournissent la liste de la majorité des logiciels disponibles, et les mises à jour quand il y en a. Il est possible de choisir différentes sources de logiciels : gérés par la société, gérés par la communauté, open-source ou non. Les mises à jour sont classées par catégories : mises à jour importantes de sécurité, mises à jour recommandées, etc. Pour installer un logiciel, il suffit de regarder dans la liste disponible, puis de l'installer. Les mises à jour de tout le système (noyau et logiciels) sont vérifiées régulièrement. Il n'y a donc pas besoin de s'en occupper.</p>
+ <p>Les adresses des sources ou sont disponibles les logiciels sont apellés les dépôts.
+ Les logiciels sont en fait des paquets. Par exemple, le paquet correspondant à Firefox se nomme... firefox. Mais un logiciel peut nécéssiter plusieurs paquets. Par exemple, il est nécéssaire d'installer un paquet de traduction pour avoir firefox en français.</p>
+ <h3>Interfaces graphiques</h3>
+ <p>Sous Windows, il n'y a qu'une seule interface graphique : il y a forcément une barre des tâches,
+ un menu démarrer, la liste des applications ouvertes. Un seule thème de fenêtres est disponible, et vous pouvez choisir entre trois couleurs. A moins d'installer encore et encore des logiciels, il n'est pas vraiment possible de personaliser l'interface.<br />
+ Avec Linux, l'interface graphique est <em>un logiciel à part entière</em>. Il est donc possible d'en installer plusieurs, et des les configurer à loisir.</p>
+ <p>Voici une capture de chacune des trois interfaces graphiques principales :</p>
+ <div style="margin:0;padding:0;text-align:center">
+ <p>KDE (Voir <a href="http://fr.wikipedia.org/KDE" hreflang="fr" class="wiki">KDE sur wikipédia</a>)<br />
+ <a href="/img/cestquoi/linux-capture-ecran-kde.png">
+ <img src="/img/cestquoi/linux-capture-ecran-kde.png" style="width:512px;height:384px" /></a>
+ </p>
+ <p>Gnome (Voir <a href="http://fr.wikipedia.org/GNOME" hreflang="fr" class="wiki">Gnome sur wikipédia</a>)<br />
+ <a href="/img/cestquoi/linux-capture-ecran-gnome.png">
+ <img src="/img/cestquoi/linux-capture-ecran-gnome.png" style="width:512px;height:384px" /></a>
+ </p>
+ <p>Xfce (Voir <a href="http://fr.wikipedia.org/Xfce" hreflang="fr" class="wiki">Xfce sur wikipédia</a>)<br />
+ <a href="/img/cestquoi/linux-capture-ecran-xfce.png">
+ <img src="/img/cestquoi/linux-capture-ecran-xfce.png" style="width:512px;height:384px" /></a></p></div>
+ <h3>Console</h3>
+ <p>Sous linux, tout est faisable via une interface graphique (c'est à dire
+ en utilisant des logiciels spécifiques, en cliquant sur des boutons, etc...). Mais il est également possible de faire ce que l'on veut (lister des répertoires et des fichiers, installer et gérer des paquets, éditer des fichiers, lancer ou arrêter des programmes...). Bien sûr, il n'est pas du tout obligatoire d'utiliser la console si on préfère passer par des logiciels ordinaires. Mais une fois que l'on est habitué, c'est beaucoup plus rapide.</p>
+ <p>Exemples de ce que l'on peut faire via une console (aussi appelé terminal ou shell) :</p>
+ <dl>
+ <dt>ls -l /</dt>
+ <dd>Liste tous les fichiers et dossiers immédiatement contenus dans / en affichant le nom,
+ la date de modification, la taille, les propriétaires...<br />
+ <em>ls</em> : la commande qui permet de lister des fichiers/dossiers<br />
+ <em>-l</em> : option (les options commencent par deux tirets ou un seul en abrégé) qui demande d'afficher plusieurs renseignements sur les fichiers.<br />
+ <em>/</em> : l'endroit ou sont les fichiers/dossiers à lister. Ici, je choisis de lister le dossier racine.</dd>
+ <dt>apt-cache search office</dt>
+ <dd>Permet de rechercher un paquet dont le nom contient "office".<br />
+ <em>apt-cache</em> : pour manipuler la liste des paquets existants<br />
+ <em>search</em> : pour indiquer à la commande apt-cahce que l'on veut chercher un paquet<br />
+ <em>office</em> : on recherche un paquet qui contient "office". dans cette exemple, on cherche une suite qui peut ressembler à Microsoft office (word), OpenOffice.org, ou autre, mais on peut chercher n'importe quoi.</dd>
+ <dt>sudo aptitude install firefox</dt>
+ <dd>Pour installer le paquet firefox<br />
+ <em>sudo</em> : Commande pour demander les droits d'administrateur (nécéssaires pour installer un paquet)<br />
+ <em>aptitude</em> : commande qui permet de manipuler les paquets<br />
+ <em>install</em> : pour indiquer à aptitude que l'on veut installer un paquet<br />
+ <em>firefox</em> : le nom du paquet à installer</dd>
+ <dt>man ls</dt>
+ <dd>Pour avoir les informations du manuel sur la commande "ls"<br />
+ <em>man</em> : utiliser le manuel, pour avoir des informations sur les commandes<br />
+ <em>ls</em> : la commande que l'on veut apprendre</dd></dl>
+ <p>Il est possible de lancer une console en interface graphique, en utilisant
+ la console fournie par défaut avec son interface, et c'est ce que l'on fait le plus souvent pour utiliser une console, mais la vraie console est en mode texte, c'est à dire que tout l'écran est occupé. Sous Linux, sept consoles peuvent tourner en même temps, indépendemment de l'interface graphique (peut importe qu'elle fonctionne ou non). C'est très utile lorsque l'interface graphique plante par exemple.</p>
+ <p>Note : Windows dispose également d'une console, via le menu Démarrer>Accessoires,
+ mais il ne s'agit que d'une console DOS, et elle est beaucoup moins utilisée que sous Linux.</p>
+<hr />
+<p id="next">Voir également :<br /><br />
+ Pages de ce site :
+ <a href="/cestquoi/libre/">C'est quoi le libre, l'open-source ?</a><br />
+ <!--a href="rien pour le moment">Mon expérience avec GNU/Linux :
+ Tutoriel complet pour installer et configurer Linux et ses trois interfaces, ainsi que tous les logiciels par défaut et les périphériques (imprimantes, scanners, son...)</a><br /--><br />
+ Comprendre Linux :<br />
+ <a href="http://sebsauvage.net/comprendre/linux/" hreflang="fr">Sebsauvage : C'est quoi Linux ?</a><br />
+ <a href="http://fr.wikipedia.org/wiki/Linux" hreflang="fr" class="wiki">Wikipédia : Linux</a><br />
+ <a href="http://www.commentcamarche.net/linux/linintro.php3" hreflang="fr">CCM : Linux</a><br /><br />
+ Plus d'informations sur Linux :<br />
+ <a href="http://www.commentcamarche.net/faq/97" hreflang="fr">CCM : Astuces Linux</a><br />
+ <a href="http://www.commentcamarche.net/faq/sujet-3360" hreflang="fr">CCM : Débuter sous Linux</a><br />
+ <a href="http://www.siteduzero.com/tuto-2-96-linux.html" hreflang="fr">SDZ : Tutoriels Linux</a><br /><br />
+ Quelques sites entièrement dédiés à Linux :<br />
+ <a href="http://linuxfr.org/" hreflang="fr">Linuxfr.org</a><br />
+ <a href="http://lea-linux.org/" hreflang="fr">Lea Linux</a><br />
+ <a href="http://www.passeralinux.fr/" hreflang="fr">Passer à GNU/Linux</a><br />
+ <a href="http://distrowatch.com/?language=FR" hreflang="fr">Distrowatch, un site sur l'actualité des distributions</a><br />
+ <a href="http://www.linux-france.org/" hreflang="fr">Linux France</a><br />
+ <a href="http://www.linux-center.org/fr/" hreflang="fr">Linux Center</a><br /><br />
+ Autres :<br />
+ <a href="http://membres.lycos.fr/cestquoiwindows/" hreflang="fr">Récit d'une expérience (très subjectif) : un utilisateur de Linux a découvert Windows</a></p>
+<?php require'../../autres/source-bas.php'?>
\ No newline at end of file
blob - /dev/null
blob + a0d7fd513a54064b48d6aec944510dab876d4fe6 (mode 644)
--- /dev/null
+++ cestquoi/libre/index.php
+<?php
+$head['css'][0]['filename']='cestquoi';
+$titre='Qu\'est-ce que le libre, l\'open-source?';
+$charset='utf-8';
+require'../../autres/source-haut.php'?>
+<h1><img src="/img/cestquoi/copyleft80.png" style="width:80px;height:80px" alt="Copyleft"/>C'est quoi les logiciels libres ? L'open source ?</h1>
+ <p>Chaque programme que vous utilisez est <em>codé</em>, c'est à dire qu'il est programmé
+ pour faire
+ certaines choses à un moment donné (voir "<a href='/cestquoi/programmation/'>C'est quoi la programmation ?</a>"). Chaque logiciel a donc un code source, qui définit ce que fait le programme.<br />
+ Mais généralement, le programme que vous utilisez est <em>compilé</em>, c'est à dire qu'il a été transformé en fichier binaire, composé de 0 et de 1 et compréhensible uniquement par l'ordinateur. Vous ne pouvez donc pas connaitre le code que vous utilisez, ni savoir précisément ce qu'il fait.</p>
+<h2>L'Open Source</h2>
+ <p>Avec les logiciels open-source, le code source est accessible (open source=source ouvert),
+ et chacun peut savoir (pour peu qu'on ait des connaissances en programmation) ce que fait le logiciel. On peut donc accorder sa confiance au logiciel.</p>
+ <p>Mais c'est loin d'être le seul avantage de l'open source par rapport au logiciel propriétaire
+ (code source non disponible) : selon les restrictions qu'a fixé l'auteur du logiciel, il est également possible de copier le logiciel pour le redistribuer, de le modifier, de le vendre, etc...</p>
+<h2>Le logiciel libre</h2>
+ <p>L'auteur d'un logiciel open-source peut imposer plusieurs restrictions quant à l'utilisation de son
+ logiciel : interdiction de le modifier, interdiction de l'utiliser de façon commerciale, etc. Avec le logiciel libre, il n'y a absolument <strong>aucune restriction</strong> : vous êtes libre de le copier, de le modifier, de revendre les modifications, bref, tout ce que vous voulez.</p>
+ <p>La seule restriction possible sur un logiciel libre est le <strong>gauche d'auteur</strong>
+ (le logo dans le titre) : par opposition au droit d'auteur, cela signifie que si l'on redistribue le logiciel, il n'est pas possible de lui appliquer des restrictions.</p>
+ <p>ATTENTION, contrairement à certaines idées, le logiciel libre n'est pas forcément gratuit.
+ Il existe des versions de Mandriva payantes, et Mandriva est pourtant un logiciel libre.</p>
+<h2>Avantages du logiciel libre ou open source par rapport au logiciel propriétaire</h2>
+ <p>Le logiciel libre étant généralement dévellopé par une communauté
+ d'utilisateurs, et non une entreprise, les failles de sécurité sont corrigées beaucoup plus rapidement. Et si une entreprise qui dévellopait un logiciel libre l'abandonnent, les utilisateurs peuvent le reprendre.</p>
+ <p>Avec le logiciel propriétaire, lorsque l'entreprise arrête de fabriquer ce logiciel,
+ il n'y a plus de mise à jour, et donc des risques de sécurité sont encourus. Il n'y également plus de support (hotline) à propos de ce logiciel. Dans le monde de l'open-source, les utilisateurs eux-mêmes fabriquent le logiciel. S'il y a des utilisateurs, il y a des mises à jour et des nouveautés.</p>
+ <p>Si vous avez des connaissances en programmation, il est possible de modifier le logiciel,
+ pour l'adapter à vos besoins, le personaliser, etc. Ce n'est pas possible avec le logiciel propriétaire.</p>
+<h2>Extensions du mot libre</h2>
+ <p>Initialement, le mot "libre" en informatique signifie "libre de droits" pour un logiciel.
+ Mais cette définition s'est étendue à plusieurs autres choses : des images, des articles...<br />
+ Par exemple, le contenu de ce site est sous License libre.</p>
+<h2>Ou est le libre ?</h2>
+ <p>Sans que vous le sachiez peut-être, le libre vous sert tous les jours :</p>
+ <ul><li>La majorité des serveurs Internet fonctionnent grâce à <a href="/cestquoi/gnu-linux">Linux</a>,
+ un système libre.</li>
+ <li>Le navigateur Firefox, comme beaucoup d'autres logiciels, est libre.</li>
+ <li>Les articles de l'encyclopédie mondiale traitant de tous les sujets, wikipédia, sont libres.</li>
+ <li>Internet utilise le protocole TCP/IP, libre également.</li></ul>
+<hr />
+<p id="next">Voire également :<br />
+<a href="http://sebsauvage.net/comprendre/licences/" hreflang="fr">Sebsauvage : Les licences logicielles</a><br />
+ <a href="http://www.sebsauvage.net/rhaa/?2006/09/08/00/00/01" hreflang="fr">Sebsauvage : Si si. L'opensource, ça marche.</a><br />
+ <a href="http://biologeek.com/journal/index.php/pourquoi-contribuer-aux-logiciels-libres" hreflang="fr">Biologeek.com : Pourquoi contribuer aux logiciels libres ?</a><br />
+ <a href="http://www.siteduzero.com/news-62-6033.html?coms=0" hreflang="fr">SDZ : 2007, essor de la culture libre ?</a><br />
+ <a href="http://fr.wikipedia.org/wiki/Logiciel_Libre" hreflang="fr">Wikipédia : Logiciel Libre</a><br />
+ <a href="http://fr.wikipedia.org/wiki/Open_Source" hreflang="fr">Wikipédia : Open Source</a><br />
+ <a href="http://april.org/" hreflang="fr"><acronym title="Association Pour la Recherche et l'Internet Libre">APRIL</acronym></a></p>
+<?php require'../../autres/source-bas.php'?>
\ No newline at end of file
blob - /dev/null
blob + c50f27781b8d55b2e9aea4576eb92aa3a9267ac4 (mode 644)
--- /dev/null
+++ cestquoi/programmation/index.php
+<?php
+$head['css'][0]['filename']='cestquoi';
+$head['css'][1]['filename']='code';
+$head['access'][0]=array('rel'=>'index','href'=>'../','title'=>'Index de la rubrique "C\'est quoi"');
+$titre='C\'est quoi la programmation ?';
+require'../../autres/source-haut.php'?>
+<h1>
+<!--[if !IE]><--><img class='t48' alt="" src="/img/cestquoi/programmation.png" /><!--><![endif]-->
+<!--[if IE]><img class='t48' src="/img/cestquoi/programmation.gif" /><![endif]-->
+C'est quoi la programmation ?<br />Comment ça fonctionne ?
+</h1>
+<p>Tout logiciel est programmé pour faire certaines choses a un moment donné.
+ Par exemple, votre navigateur ouvre une page quand vous cliquez sur un lien.
+ Cette fonctionnalité a été programmée par le ou les développeurs
+ du logiciel en question. Tous les logiciels sont programmés de cette manière :
+ ils éxecutent différentes instructions selon les actions de l'utilisateur.</p>
+<p>Pour ces explications, mettons-nous dans la peau d'un "programmeur".</p>
+<p>Un logiciel est écrit avec un certain langage de programmation.
+ Il existe plusieurs langages aux syntaxes différentes.
+ Cependant, il y a des choses que l'on retrouve dans la plupart des langages :</p>
+<dl>
+ <dt>Les fonctions</dt>
+ <dd>Elles servent à exécuter une actionspécifique.</dd>
+ <dt>Les variables</dt>
+ <dd>Elles servent à stocker différentes informations.</dd>
+ <dt>Les boucles</dt>
+ <dd>Elles servent à répéter une action pendant un certain temps.</dd>
+ <dt>Les conditions</dt>
+ <dd>Elles servent à exécuter ou pas certaines actions selon certaines condition données.</dd></dl>
+<h2 id="fonctions">Les fonctions</h2>
+<p>Une fonction exécute certaines actions (des calculs par exemple) en utilisant des <em>arguments</em> (aussi apellés paramètres),
+ indiqués entre parenthèses, et séparés par des virgules, après le nom de la fonction lorsqu'on l'utilise :<br />
+ <code>nomDeLaFonction<span class="py_synt">(</span>argument1,argument2<span class="py_synt">)</span></code><br />
+ Une fonction peut avoir un ou plusieurs arguments, voire aucun, et dans ce cas il faut mettre des parenthèses vides.</p>
+<p>La fonction la plus basique est celle qui permet d'afficher du texte.
+ Pour simplifier, admettons qu'elle se nomme "affiche". Donc si l'on veut écrire "Bonjour",
+ on écrira ce code :<br />
+ <code><span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Bonjour"</span><span class="py_synt">)</span></code><br />
+ Il existe des fonctions toutes prêtes. La fonction "affiche" en est une.</p>
+<p>On peut également créer ses propres fonctions.
+ Par exemple, je crée une fonction nommée "Saluer",
+ qui affichera "Bonjour ", puis le nom d'une personne, puis " ! bienvenue sur ",puis le nom d'un logiciel :</p>
+ <pre><span class="py_reserv">fonction</span> Saluer<span class="py_synt">(</span>Nom,Logiciel<span class="py_synt">)</span>:
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">'Bonjour '</span>,Nom,<span class="py_str">' ! Bienvenue dans '</span>,Logiciel<span class="py_synt">)</span></pre>
+<p>Ensuite, on peut "appeler" la fonction en écrivant son nom.
+ Les instructions qui sont contenues dans cette fonction s'exécuteront :
+ il n'y a pas besoin de ré-écrire tout ce que fait la fonction.
+ De plus, si je change la fonction pour qu'elle écrive "Bienvenue" et plus "Bonjour",
+ cela se répercutera partout ou l'on utilise cette fonction !</p>
+<p>Quand on utilise une fonction, il faut mettre à la place des arguments ce que l'on veut utiliser.
+ Par exemple, après avoir crée la fonction "Saluer", je peux faire ceci :<br />
+ <code>Saluer<span class="py_synt">(</span><span class="py_str">"Sylvain"</span>,<span class="py_str">'Firefox'</span><span class="py_synt">)</span></code><br />
+ Qui affichera : <code>"Bonjour Sylvain ! Bienvenue sur Firefox"</code>.</p>
+<h2 id='variables'>Les variables</h2>
+<p>Elles servent a stocker différentes informations. Une variable peut contenir :</p>
+<dl>
+ <dt>Une «chaîne de caractères», c'est a dire un groupe de lettres ou de chiffres. Par exemple :</dt>
+ <dd>"Bonjour". Ou bien : "A". Ou encore : "Il y a 6 lettres dans le mot 'lettre' ". Ou : "Azerty123456blabla()".</dd>
+ <dt>Une valeur numérique :</dt>
+ <dd>1, ou 2, ou 123, ou encore 20.1, etc....</dd>
+ <dt>Un booléen :</dt>
+ <dd>Ce type spécial de variable peut valoir Vrai ou Faux.</dd></dl>
+<p>On peut utiliser les variables pour enregistrer n'importe quelle information (du moment qu'elle correspond à un des trois types).
+ Par exemple, un nom (chaîne de caractères), l'âge de quelqu'un (valeur numérique),
+ ou s'il aime lire (booléen).</p>
+<p>Pour créer (on dit aussi "définir") une variable, il suffit d'écrire son nom et sa valeur :<br />Par exemple :</p>
+<dl>
+ <dt><code>phrase=<span class="py_str">"Ceci est du code"</span></code></dt>
+ <dd>La variable "phrase" aura pour valeur la chaîne de caractères "Ceci est du code".</dd>
+ <dt><code>nombre=<span class="py_num">1</span>+<span class="py_num">4</span></code></dt>
+ <dd>La variable "nombre" aura la valeur numérique 5.</dd>
+ <dt><code>il_aime_le_vert=<span class="py_reserv">faux</span></code></dt>
+ <dd>Le booléen "il_aime_le_vert" vaudra faux.</dd></dl>
+<p>Il ne faut pas se tromper lorsque l'on créée une variable :</p>
+<ul>
+ <li>Il faut délimiter les chaînes de caractères par des guillemets (ou apostrophes)</li>
+ <li>Il ne faut pas délimiter par des guillemets ou apostrophes les valeurs numériques et
+ les booléens, car sinon ils seraient pris pour des chaînes de caractères.</li></ul>
+<h2 id='boucles'>Les boucles</h2>
+<p>Les boucles sont utilisées pour répéter une action pendant qu'une certaine condition est vraie.
+ Par exemple, je peux créer une variable "nombre", et <em>afficher la valeur de cette variable</em> (l'action a faire)
+ pendant qu'elle est inférieure à 20 (la condition) :</p>
+<pre>nombre=<span class="py_num">3</span> <span class="py_com">#On crée d'abord la variable</span>
+<span class="py_reserv">pendant que</span> nombre < <span class="py_num">20</span>:<span class="py_com">#Ceci se passera tant qu'elle sera inférieure (inférieure:"<") à 20</span>
+ <span class="py_func">affiche</span>(nombre)<span class="py_com">#On écrira la valeur de la variable nombre</span>
+ nombre=nombre+<span class="py_num">1</span><span class="py_com">#il faut augmenter la valeur de la variable sinon la boucle sera infinie</span></pre>
+<h2 id="conditions">Les conditions</h2>
+<p>Les conditions servent à exécuter ou pas des actions selon plusieurs critères (généralement,
+ la valeur d'une variable) :<br />
+ <code><span class="py_reserv">si</span> condition(s):<br /> action(s)</code><br />
+ Par exemple, voici ce que je devrais écrire si je veux dire à une personne si elle est
+ majeure ou mineure, selon son âge :</p>
+<pre><span class="py_reserv">si</span> age > <span class="py_num">18</span>:<span class="py_com">#si la personne a plus de 18 ans (supérieur: ">")</span>
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Vous êtes majeur"</span><span class="py_synt">)</span>
+<span class="py_reserv">si</span> age < <span class="py_num">18</span>:<span class="py_com">#Si la personne a moins de 18 ans</span>
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Vous êtes mineur"</span><span class="py_synt">)</span></pre>
+<p>Mais si l'âge est strictement égal a 18, rien ne s'affichera. On peut utiliser une autre condition, "sinon si".</p>
+<p>Voici comment faire :</p>
+<pre><span class="py_reserv">si</span> age > <span class="py_num">18</span>:<span class="py_com">#si la personne a plus de 18 ans</span>
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Vous êtes majeur"</span><span class="py_synt">)</span>
+<span class="py_reserv">sinon si</span> age == <span class="py_num">18</span>:<span class="py_com">#Si la personne <em>N'A PAS</em> plus de 18 ans (la condition précédente), mais qu'elle a exactement 18 ans (il faut mettre deux signes égal)</span>
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Vous avez exactement 18 ans"</span><span class="py_synt">)</span>
+<span class="py_reserv">sinon</span>:<span class="py_com">#si aucune des conditions précédentes n'est vraie, la personne est mineure</span>
+ <span class="py_func">affiche</span><span class="py_synt">(</span><span class="py_str">"Vous êtes mineur"</span><span class="py_synt">)</span></pre>
+<h2 id='ccl'>Conclusion</h2>
+<p>Un langage de programmation est dynamique, il agit en fonction de plusieurs éléments.
+ Il y a des choses que l'on retrouve dans plusieurs langages de programmation :</p>
+<dl><dt>Les fonctions</dt>
+ <dd>Elles servent a exécuter une action spécifique.</dd>
+ <dt>Les variables</dt>
+ <dd>Elles servent a stocker différentes informations.</dd>
+ <dt>Les boucles</dt>
+ <dd>Elles servent a répéter une action pendant un certain temps.</dd>
+ <dt>Les conditions</dt>
+ <dd>Elles servent a exécuter ou pas certaines actions selon certaines condition données.</dd></dl>
+<p>Il existe beaucoup de langages de programmation. Ils ont une syntaxe plus ou moins différente.
+ Le langage que j'ai utilisé pour ces exemples est le langage <em>Python</em> (un des plus simples à mon avis).<br />
+ Evidemment, la fonction qui permet d'afficher du texte ne s'appelle pas "affiche", et les "sinon si", etc... n'ont pas ce nom.
+ Les langages sont souvent anglais. Par exemple, le "Si" des conditions est à remplacer par "if".</p>
+<p id="next">Liens :<br />
+<a href="http://fr.wikipedia.org/wiki/Programmation" hreflang="fr" class="wiki">Wikipédia : La programmation</a><br />
+<a href="http://fr.wikipedia.org/wiki/Langage_de_programmation" hreflang="fr" class="wiki">Wikipédia : Les langages de programmation</a><br />
+<a hreflang="fr" href="http://www.commentcamarche.net/faq/sujet-457">Comment Ca Marche : Comment débuter ? Quel langage ?</a></p>
+<?php require'../../autres/source-bas.php'; ?>
blob - /dev/null
blob + 9ac90fb6c6335742e99542fa0bc90a558aefaea7 (mode 644)
--- /dev/null
+++ cestquoi/starforce.php
+<?php
+$head['css'][0]['filename']='cestquoi';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "C\'est quoi ?"');
+$titre='C\'est quoi Starforce ?';
+require'../autres/source-haut.php'?>
+<h1>
+ <img src="../img/cestquoi/ckstarforce.jpg" style="width: 90px; height: 60px;" alt='' />C'est quoi Starforce?</h1>
+<p>Starforce est une <em>protection anti-copie</em> présente dans certains jeux.
+ Vous savez, une protection qui vérifie si vous avez bien mis le CD dans l'ordinateur
+ au moment ou vous voulez jouer. Jusque là, rien de plus normal.</p>
+<p>Cependant voila. Ce ne sont que des rumeurs, mais certains utilisateurs on eu des problèmes
+ avec leurs graveurs de cd et/ou dvd.Les graveurs sont tombés en panne ou bugaient.
+ Les logiciels de gravure (nero par exemple) ou d'émulation (daemon tools par exemple) fonctionnent
+ parfois mal ou plus du tout.<br />
+ Il y a des erreurs de lecture des CD... En plus le processus de starforce se lance au démarrage du Bios
+ (c'est ce qui se lance des que vous allumez votre ordinateur, il ne peut pas fonctionner sans),
+ donc c'est difficile de l'enlever, et il ralentit le système.
+ Ça ressemble a un rootkit : vous ne voyez pas ses processus dans le gestionnaire des tâches.
+ C'est déjà bien une preuve du mépris du client.
+</p>
+<p>Dans certaines démos (comme Splinter Cell Chaos Theory) Starforce place également
+ une protection (soit disant pour <q>Empêcher les pirates d'exploiter le jeu</q>) !!
+ C'est complètement débile, une démo n'a pas besoin du CD pour fonctionner
+ et il est légal de la copier, la graver, la télécharger...
+</p>
+<p>
+ Mais nous arrivons au pire : Galactic Civilizations II, un jeu édité par Stardock, ne contient
+ <em>AUCUNE PROTECTION</em>. Un beau pied de nez à tous les éditeurs de jeux et/ou de protections
+ qui cherchent des protections de plus en plus efficaces pour empêcher le piratage, qui,
+ de toute façon, sont contournées dans les jours qui suivent par les pirates.
+ De plus, le jeu a été pendant plusieurs mois dans
+ les dix premiers jeux les plus vendus aux Etats-Unis.
+ Une preuve que protection ou pas, ça ne change rien D'autant plus les joueurs ont apprécié,
+ qu'un éditeur leur fasse confiance et distribue un jeu sans protection.
+ Jusque la rien de grave, c'est même très sympa (et légal) de la part de cet éditeur
+ d'avoir distribué des versions non protégées de son jeu.
+</p>
+<p>Oui, mais, respecter les joueurs, ça ne se fait pas chez starforce,
+ et l'attitude de Stardock ne leur a pas plus.
+ Starforce a eu alors une très bonne idée : ils ont mis un lien sur la page d'accueil de leur site
+ vers un téléchargement d'une version piratée de Galactic Civilizations !! C'est honteux.
+</p>
+<p>Plusieurs personnnes boycottent Starforce, d'ailleurs, je ne sais plus sur quel forum j'ai vu
+ une très bonne description de Starforce par un internaute :
+ <q>Une protection tellement efficace qu'elle a tendance à ne pas faire fonctionner le jeu original.</q>
+ C'est exactement ça.
+</p>
+<hr />
+<p id="next">
+ Sources / Liens<br />
+ <a href="http://star-force.com/" hreflang="en">Site officiel de Starforce</a><br />
+ <a href="http://www.sebsauvage.net/rhaa.html#20040713" hreflang="fr">Sebsauvage : C'est gentil de nous avoir invité</a><br />
+ <a href="http://www.glop.org/starforce/" hreflang="en">Boycott Starforce</a><br />
+ <a href="http://www.boycottstarforce.net/" hreflang="en">Boycottstarforce.net</a><br />
+ <a href="http://fr.wikipedia.org/wiki/StarForce" class="wiki" hreflang="fr">Wikipedia : Starforce</a><br />
+ <a href="http://www.boycottstarforce.net/?page_id=3" hreflang="fr">
+ Boycott Starforce.net : Une liste de jeux qui utilisent cette protection</a>
+</p>
+<hr />
+<p>Il y a bien d' autres protections, qui sont des saletés dans le même genre, comme securom.</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + b514338fcdeda7812567ea547ada1e04c85b5e7d (mode 644)
--- /dev/null
+++ cestquoi/web/css.php
+<?php
+$titre='C\'est quoi les CSS ?';
+$head='<link rel="stylesheet" type="text/css" href="/autres/css/cestquoi.css" media="screen" />
+ <link rel="stylesheet" type="text/css" href="/autres/css/exemplecss.css" />
+ <link rel="stylesheet" type="text/css" href="/autres/css/code.css" />
+ <link rel="prev" title="C\'est quoi "(x)HTML" ?" href="index.php" />
+ <link rel="index" title="C\'est quoi ?" href="../" />';
+require'../../autres/source-haut.php';
+?>
+<h1><img style="border:1px solid black;width:80px;height:18px;" alt="CSS" src="/img/cestquoi/ckcss.gif" />C'est quoi les
+ <abbr title="Cascading Style Sheets, ou en français : feuilles de style en cascades.">CSS</abbr> ?</h1>
+<h2 id='intro'>Rappel du <abbr title="eXtensible HyperText Markup Langage">XHTML</abbr></h2>
+ <p>Le <a href="index.php">xhtml</a> est utilisé pour servir le <strong>contenu</strong> d'une page : c'est avec ce langage que l'on dit :
+ ceci est un titre, ceci est un paragraphe, ceci est une image, etc...<br />
+ Mais en <strong>aucun cas</strong> il ne doit être utilisé pour la mise en page.
+ On ne doit pas dire que les titres sont en rouges souligné, ou que les paragraphes sont en blanc sur fond noir.<br />
+ C'est le travail des CSS.</p>
+ <p>En xhtml, dans les balises, on voit parfois des attributs "style" :<br />
+ <code class='xhtml'><<span class='bal'>balise</span> <span class='attr'>style</span>=<span class='style'>"<span class='ppt'>propriété:</span><span class='val'>valeur</span>;"</span>></code></p>
+ <p>Le contenu de ces attributs "style" peut être remplacé par des CSS.</p>
+ <p>Les CSS, appelés Cascading Style Sheets, soit "Feuilles de style en cascades" en français,
+ permettent de créer la mise en page d'un site. Avec les CSS, on peut faire toute la mise en page :
+ Les couleurs de fond, de texte, les polices, la taille du texte, les bordures, les apparences des titres, les marges...</p>
+<hr />
+<h2 id='structure'>La Structure d'un fichier CSS</h2>
+ <p>Voici comment est fait un fichier CSS :<br />
+ <code class='css'><span class='elm'>élément</span><br />
+ {<br />
+
+ <span class='ppt'>propriété:</span><span class='val'>valeur</span>;<br />
+
+ <span class='ppt'>propriété:</span><span class='val'>valeur</span>;<br />
+
+ <span class='ppt'>propriété:</span><span class='val'>etc...</span>;<br />
+ }</code></p>
+ <p>Donc, pour appliquer un style à un élément de la page, il faut :</p>
+ <ul><li>Indiquer l'élément sur lequel on travaille.</li>
+ <li>Ouvrir des <em>accolades</em> "{"pour appliquer des propriétés de style à l'élément.</li>
+ <li>Ne pas oublier de refermer les accolades "}" quand on a fini d'appliquer des propriétés à l'élément.</li>
+ <li>mettre <em>deux points</em> devant chaque propriété pour dire : <em>telle propriété prendra telle valeur</em>,</li>
+ <li>et mettre un <em>point-virgule</em> ";" devant chaque valeur pour dire : <em>on a fini de travailler sur cette propriété</em>.</li></ul>
+
+ <p>Voici un exemple de ce que l'on peut "dire" avec les CSS :<br />
+ <code class='css'><span class='elm'>paragraphes</span><br />
+ {<br />
+ <span class='ppt'>couleur du texte:</span><span class='val'>rouge</span>;<br />
+ <span class='ppt'>taille de police:</span><span class='val'>1 ligne et demie</span>;<br />
+ }</code></p>
+ <p>On peut également faire des commentaires, qui servent à comprendre plus facilement le code plus tard :<br />
+ <code class='css'><span class='com'>/*Ceci est un Commentaire*/</span></code><br /><br />
+ On peut donc écrire les commentaires sur une ou plusieurs lignes avec "/*" et "*/".</p>
+<h2 id='creerstyle'>Créer un style avec les CSS</h2>
+ <p>Pour dire sur quelle élément de la page on veut appliquer certains style, il y a plusieurs façons :</p>
+ <ul><li class='nomargin'>Définir des styles en fonction des <em>balises xhtml</em> : par exemple, ce code CSS
+ "<code class='css'><span class='elm'>p</span>{<span class='ppt'>color:</span><span class='val'>blue</span>}</code>"
+ colorera les paragraphes en bleu :<br />
+ <span class="bleu nomargintop">Ce paragraphe est coloré en bleu.</span></li>
+ <li>Définir des styles en fonction des <em>classes</em>. Par exemple, si l'on veut que certains paragraphes soient colorés en bleu,
+ et d'autres en rouge, nous allons écrire :<br />
+ Le code xhtml :<br />
+ <code class='xhtml'><span class='com'><!--Ce paragraphe sera bleu--></span><br />
+ <<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"bleu"</span>><br />
+ Texte de couleur bleue.<br /> <<span class='bal'>/p</span>><br /><br />
+ <span class='com'><!--Celui ci sera en rouge--></span><br />
+ <<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"rouge"</span>><br />
+ Texte de couleur rouge.<br /><<span class='bal'>/p</span>> </code><br />
+ Et le code CSS :<br /><code class='css'><span class='elm'>p</span>.<span class='class'>rouge</span>
+
+ <span class='com'>/*ceci veut dire "Tous les paragraphes de classe "rouge"*/</span><br />
+ {<span class='ppt'>color:</span><span class='val'>red</span>; <span class='com'>/*seront colorés en rouge*/</span><br />
+ }<br />
+ <span class='elm'>p</span>.<span class='class'>bleu</span><br />
+ {<span class='ppt'>color:</span><span class='val'>blue</span>}
+ <span class='com'>/*et tous les paragraphes de classe "bleu" seront en bleu*/</span></code>
+ Ceci donnera :<br />
+ <span class="rouge nomargin">Ce paragraphe de classe "rouge" est coloré en rouge.</span><br />
+ <span class="bleu nomargintop">Ce paragraphe de classe "bleu" est coloré en bleu.</span></li>
+ <li>Définir un style en fonction des <em>id</em> :<br /><br />
+ Un id est presque le même chose qu'une classe, à la différence près qu'il ne peut
+ être utilisé qu'une seule fois dans une page.<br /><br />
+ Par exemple, vous avez le droit de faire ce code :<br />
+ <code class='xhtml'><<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"rouge"</span>>
+ Paragraphe rouge<<span class='bal'>/p</span>><br />
+ <<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"bleu"</span>>
+ Paragraphe bleu<<span class='bal'>/p</span>>
+ <<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"rouge"</span>>
+ Un autre paragraphe rouge<<span class='bal'>/p</span>></code><br /><br />
+ Mais vous n'avez pas le droit de faire ceci, car un id avec la même valeur est utilisé deux fois :<br />
+ <code class='xhtml'><<span class='bal'>p</span> <span class='attr'>id</span>=<span class='val'>"rouge"</span>>
+ Un paragraphe en rouge<<span class='bal'>/p</span>><br />
+ <<span class='bal'>p</span> <span class='attr'>id</span>=<span class='val'>"bleu"</span>
+ >Puis un en bleu<<span class='bal'>/p</span>><br />
+ <<span class='bal'>p</span> <span class='attr'>id</span>=<span class='val'>"bleu"</span>>
+ Et un autre en bleu. Mais ça ne va pas ! On a utilisé deux fois l'id "bleu" !!<<span class='bal'>/p</span>></code></li></ul>
+<h2 id='exemple'>Exemple</h2>
+ <p>Voyons maintenant comment créer un style particulier pour un bloc.
+ Par exemple, nous voulons faire ressortir un extrait de texte, comme une citation.<br />
+ Nous avons d'abord un paragraphe sans mise en forme :</p>
+ <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec fringilla justo ut dui nonummy scelerisque.
+ In dapibus diam non nisi. Cras et tellus vitae sapien tristique hendrerit. Aliquam quis eros.
+ In faucibus felis vel turpis. Aenean semper, nisl quis eleifend tempus, urna leo fringilla ipsum, vitae laoreet ante massa ac erat.
+ Aliquam nisi velit, faucibus vitae, iaculis sed, vehicula et, sem. Nulla facilisi. Donec placerat pulvinar felis. Sed ultricies leo ut elit.
+ Integer vitae tortor et neque blandit rhoncus. Quisque facilisis enim luctus quam. Vivamus hendrerit congue lacus.
+ Nulla id nunc non nibh egestas vehicula. Nullam varius. Morbi vitae ante in tortor condimentum gravida.</p>
+ <p>Et nous voulons avoir ceci :</p>
+ <p id="exemplelorem">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec fringilla justo ut dui nonummy scelerisque.
+ In dapibus diam non nisi. Cras et tellus vitae sapien tristique hendrerit. Aliquam quis eros.
+ In faucibus felis vel turpis. Aenean semper, nisl quis eleifend tempus, urna leo fringilla ipsum, vitae laoreet ante massa ac erat.
+ Aliquam nisi velit, faucibus vitae, iaculis sed, vehicula et, sem. Nulla facilisi. Donec placerat pulvinar felis. Sed ultricies leo ut elit.
+ Integer vitae tortor et neque blandit rhoncus. Quisque facilisis enim luctus quam. Vivamus hendrerit congue lacus.
+ Nulla id nunc non nibh egestas vehicula. Nullam varius. Morbi vitae ante in tortor condimentum gravida.</p>
+ <p>regardons ce qui à changé :</p>
+ <ul><li>Il y a une <em>bordure</em> bleue de quatre pixels autour du bloc, et de huit pixels a gauche. </li>
+ <li>Le bloc est écrit en <em>blanc sur fond noir</em>.</li>
+ <li>Il y a un espacement entre le texte et la bordure.</li>
+ <li>Le bloc est décalé vers la droite.</li>
+ <li>La première lettre du paragraphe est une <em>lettrine</em>. </li>
+ <li>Elle est en <em>rouge sur fond gris</em>.</li>
+ <li>Elle a une <em>bordure</em> verte de deux pixels.</li>
+ <li>Il y a un espace entre la lettrine et sa bordure,</li>
+ <li>et un espace entre la lettrine et le reste du texte.</li>
+ <li>La lettrine est <em>plus grande</em> que le reste des lettres.</li>
+ <li>La <em>police</em> est "Comic sans MS".</li></ul>
+ <p>Maintenant, voyons comment nous allons faire ceci :<br />
+ Admettons que le paragraphe soit de classe "citation" (on aurait aussi pu utiliser la balise blockquote).
+ (<code class='xhtml'><<span class='bal'>p</span> <span class='attr'>class</span>=<span class='val'>"citation"</span>>
+ Blabla...<<span class='bal'>/p</span>></code>)<br />
+ Pour faire une <em>bordure</em>, nous devons mettre :<br />
+ <code class='css'><span class='elm'>p</span>.<span class='class'>citation</span> {
+ <span class='com'>/*le ou les paragraphes de classe "citation"*/</span><br />
+
+ <span class='ppt'>border-style:</span> <span class='val'>solid</span>;
+ <span class='com'>/* auront une bordure solide, c'est à dire un trait continu*/</span><br />
+
+ <span class='ppt'>border-color:</span> <span class='val'>#6666cc</span>;
+ <span class='com'>/*la couleur de cette bordure sera bleue*/</span><br />
+ <span class='ppt'>border-width:</span> <span class='val'>4px 4px 4px 8px</span>;
+ <span class='com'>/*la bordure sera de 4 pixels, sauf la bordure gauche qui sera de 8 pixels !!*/</span> }</code><br />
+ "#6666cc" est une façon d'écrire plus précisément les couleurs. Les deux premiers chiffres après le dièse
+ indiquent le taux de rouge, les 3° et 4° le taux de vert et les deux derniers le taux de bleu.<br />
+ On indique les couleurs en hexadécimal, c'est a dire avec 16 caractères :0123456789abcdef, #000000 étant noir et #ffffff étant blanc.
+ <br /><br />
+ Pour écrire le texte en <em>blanc sur fond noir</em>, il faut faire :<br />
+ <code class='css'><span class='ppt'>background-color:</span> <span class='val'>black</span>;
+ <span class='com'>/*la couleur de fond sera noire*/</span><br />
+ <span class='ppt'>color:</span><span class='val'>white</span>;
+ <span class='com'>/*la couleur du texte sera blanche*/</span></code><br /><br />
+ Pour décaler le bloc vers la droite, il faut utiliser la propriété margin, qui prend une valeur mesurable.<br />
+ On rajoute "left" à la propriété car il doit y avoir une marge seulement à gauche :<br />
+ <code class='css'><span class='ppt'>margin-left:</span><span class='val'>20%</span>;
+ <span class='com'>/*il y aura une marge de 20% de la fenêtre à gauche*/</span></code></p>
+ <p>Voici ce que nous obtiendrons avec ces propriétés CSS :</p>
+ <p id="exemple1">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec fringilla justo ut dui nonummy scelerisque.
+ In dapibus diam non nisi. Cras et tellus vitae sapien tristique hendrerit. Aliquam quis eros.
+ In faucibus felis vel turpis. Aenean semper, nisl quis eleifend tempus, urna leo fringilla ipsum, vitae laoreet ante massa ac erat.
+ Aliquam nisi velit, faucibus vitae, iaculis sed, vehicula et, sem. Nulla facilisi. Donec placerat pulvinar felis. Sed ultricies leo ut elit.
+ Integer vitae tortor et neque blandit rhoncus. Quisque facilisis enim luctus quam. Vivamus hendrerit congue lacus.
+ Nulla id nunc non nibh egestas vehicula. Nullam varius. Morbi vitae ante in tortor condimentum gravida.</p>
+ <p>Il manque :</p>
+ <ul><li>L'espacement entre le texte et la bordure.</li>
+ <li>Le style de la lettrine.</li></ul>
+ <p>Pour l'espacement entre la bordure et le contenu, il suffit de faire :<br /><br />
+ <code class='css'><span class='ppt'>padding:</span> <span class='val'>10px</span>;
+ <span class='com'>/*de cette façon il y aura un espacement de 10 pixels entre la bordure et le texte*/</span></code>
+ <br />Padding étant les marges intérieures (entre la bordure et le contenu), et margin les marges extérieures
+ (entre la bordure et le reste de la page).</p>
+ <p>Pour la lettrine, c'est plus compliqué :<br />
+ Il faut utiliser ce que l'on appelle une <em>pseudo-classe</em>, une classe qui s'applique sur un élément en particulier
+ qui n'est pas délimité par des balises xhtml, ou à un certain moment (au passage de la souris sur un élément par exemple).<br />
+ Ici, nous allons utiliser la pseudo-classe <em>first-letter</em>, qui désigne la première lettre d'une élément.<br />
+ Donc pour que le style s'applique uniquement à la première
+ lettre du paragraphe, nous allons utiliser ce code CSS :<br />
+ <code class='css'><span class='elm'>p</span>.<span class='val'>citation</span><span class='pc'>:first-letter</span> {
+ <span class='com'>/*seulement la première lettre des paragraphes de classe citation*/</span> }</code></p>
+ <p>Ensuite, on utilise des propriétés comme pour n'importe quel élément. Revoyons les styles qui sont appliqués à cette lettrine :</p>
+ <ul><li>Elle est en <em>rouge sur fond gris</em>. </li>
+ <li>Elle a une <em>bordure</em> verte de deux pixels.</li>
+ <li>Il y a un espace entre la lettrine et sa bordure,</li>
+ <li>et un espace entre la lettrine et le reste du texte.</li>
+ <li>La lettrine est <em>plus grande</em> que le reste des lettres.</li></ul>
+ <p>Pour les couleurs, c'est très simple :<br /><br />
+ <code class='css'><span class='elm'>p</span>.<span class='class'>citation</span><span class='pc'>:first-letter</span>{<br />
+ <span class='ppt'>color:</span><span class='val'>red</span>; <span class='com'>/* la couleur de la lettre sera rouge*/</span><br />
+ <span class='ppt'>background-color:</span><span class='val'>#808080</span>;
+ <span class='com'>/*la couleur de fond sera grise*/</span> }</code></p>
+ <p>Ensuite, il faut faire la bordure :<br />
+ <code class='css'><span class='ppt'>border:</span><span class='val'> 2px solid green</span>;
+ <span class='com'>/*la bordure sera verte et de deux pixels d'épaisseur*/</span></code></p>
+ <p>Puis, les espacements :<br />
+ <code class='css'><span class='ppt'>padding:</span> <span class='val'>10px</span>;
+ <span class='com'>/*Il y aura un espacement de 10 pixels entre la lettre et sa bordure*/</span><br />
+ <span class='ppt'>margin-right:</span> <span class='val'>2px</span>;
+ <span class='com'>/*Un espacemement de 2 pixels entre la bordure droite et le texte*/</span></code></p>
+ <p>Les propriétés de police :<br />
+ <code class='css'><span class='ppt'>font-family:</span> <span class='val'>'comic sans ms'</span>;
+ <span class='com'>/*la police sera 'comic sans ms'*/</span><br />
+ <span class='ppt'>font-size:</span> <span class='val'>2em</span>;
+ <span class='com'>/* et la lettre fera deux lignes de haut (1em = une ligne) */</span></code></p>
+ <p>Et enfin, les propriétés du bloc :<br />
+ <code class='css'><span class='ppt'>height:</span> <span class='val'>4em</span>;
+ <span class='com'>/* le bloc fera 4 lignes de hauteur*/</span><br />
+ <span class='ppt'>float:</span> <span class='val'>left</span>;
+ <span class='com'>/*et il flottera a gauche, sinon il dépasse du paragraphe*/</span></code></p>
+<h2 id='pseudoclasses'>Les pseudo-classes</h2>
+ <p>Certaines classes spéciales sont appelées "<em>pseudo-classes</em>".
+ Ce sont par exemple :<br />Un style qui s'applique seulement...</p>
+ <ul><li>à la première ligne d'un élément : <code class='css'><span class="elm">élément</span><span class='pc'>:first-line</span></code></li>
+ <li>à la première lettre d'un élément : <code class='css'><span class="elm">élément</span><span class='pc'>:first-letter</span></code></li>
+ <li>Quand la souris survole l'élément : <code class='css'><span class='elm'>élément</span><span class='pc'>:hover</span></code></li>
+ <li>Quand on clique sur un élément : <code class='css'><span class='elm'>élément</span><span class='pc'>:focus</span></code> ou
+ <code class='css'><span class='elm'>élément</span><span class='pc'>:active</span></code></li>
+ <li>Aux liens qui sont dans l'historique du navigateur : <code class='css'><span class='elm'>a</span><span class='pc'>:visited</span></code></li></ul>
+ <p>Plus d'informations sur les pseudo-classes : <a href="http://www.siteduzero.com/tuto-3-38-1.html" class='fr externe' hreflang='fr'>http://www.siteduzero.com/tuto-3-38-1.html</a></p>
+<h2 id="ccl">Conclusion</h2>
+ <p>C'est de cette façon que l'on créée un style avec les CSS. Généralement, on fait un fichier CSS que l'on utilise pour toutes les pages.
+ Comme ceci, il est très facile de changer tout le design d'un site en une seule fois. De plus, le chargement des pages est allégé :
+ le navigateur enregistre une seule fois le fichier CSS, et le ré-utilise sans avoir à le charger dès qu'il y en a besoin.
+ Le code html est aussi moins lourd, car on n'utilise plus de <code>style="...."</code> directement dans les balises.</p>
+ <p>Cependant, les navigateurs n'interprètent pas tous de la même façon certaines propriétés CSS compliquées.
+ Par exemple, IE ne gère pas la pseudo-classe ":hover" autre part que sur un lien. En fait, il ne connait pas beaucoup de propriétés CSS 2,
+ car il n'y a pas de nouvelle version depuis 1999. Il ne connait que la première version des CSS. La version 7 devrait peut-être
+ (j'éspère) enfin supporter complètement les CSS 2, ce qui permettrait de faire des designs interessants compatibles avec
+ la majorité des navigateurs.</p>
+<p id="next">Liens :<br />
+<a href="http://www.siteduzero.com/tuto-3-1938-1.html" class='fr' hreflang='fr'>Le site du Zéro : Liste des propriétés CSS</a><br />
+<a href="http://www.csszengarden.com/tr/francais/" class='fr' hreflang='fr'>Toute la "puissance" des CSS sur CSS Zen-garden</a><br />
+<a href="http://www.commentcamarche.net/css/cssintro.php3" class='fr' hreflang='fr'>Comment Ca marche : Les CSS</a></p>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + bdb2a6ae2579dca76a2cb5b88cff39fd8bcbff2f (mode 644)
--- /dev/null
+++ cestquoi/web/hebergement.php
+<?php
+$titre='C\'est quoi l\'hébergement ?';
+$head['css'][0]['filename']='cestquoi';
+$head['access'][0]=array('rel'=>'prev','href'=>'./serveur.php','title'=>'Qu\'est-ce qu\'un serveur Internet ?');
+$head['access'][0]=array('rel'=>'index','href'=>'../','title'=>'Index de la rubrique "C\'est quoi"');
+require'../../autres/source-haut.php'?>
+<h1><img src="/img/cestquoi/serveur-machine.png" style="width:73px;height:39px" alt="serveur" />C'est quoi l'hébergement ?</h1>
+<p class="pintro">Les fichiers que vous voyez sur Internet sont stockés sur un <a href="serveur.php">serveur</a>.
+ Selon le <strong>type d'hébergement</strong>, le serveur peut appartenir à différentes personnes,
+ servir pour différentes choses, etc. C'est souvent un <strong>hébergeur</strong> qui met à disposition un serveur.
+ L'hébergeur est une entreprise, qui peut être votre <abbr title="Fournisseur d'accès à Internet">FAI</abbr>
+ ou une société spécialisée dans l'hébergement.<br />Il existe plusieurs types d'hébergement :</p>
+<h2 id="mutualise">Hébergement mutualisé</h2>
+ <p>C'est le plus courant.
+ Un hébergeur met à disposition une offre d'hébergement, gratuite ou payante,
+ et permet de stocker des fichiers sur un serveur. Plusieurs sites sont stockés sur un seul serveur
+ avec ce type d'hébergement. Il y a plus ou moins de possibilités :<br />
+ Gestion de langages dynamiques, mise à disposition de base de données, publicité ou pas...<br />
+ Ce type d'hébergement, qu'il soit gratuit ou payant, est assez limité par rapport aux autres types d'hébergement.
+ Cependant, le coût d'un hébergement mutualisé payant est souvent assez bas (entre 0 € et 20 € par mois),
+ et s'il est payant, il n'y a pas de publicité.</p>
+<h2 id="dedie">Hébergement dédié</h2>
+ <p>Ce type d'hébergement permet de disposer de son <strong>propre</strong> serveur, que l'on est le seul à utiliser.
+ Cependant il est toujours administré par l'intermédiaire d'un hébergeur.
+ L'hébergement dédié est (très) cher (parfois plusieurs centaines d'Euros par An),
+ mais permet beaucoup plus de possibilités que l'hébergement mutualisé : espace de stockage bien plus élevé,
+ création de plusieurs bases de données, installation de plusieurs serveurs (logiciels),
+ exécution de certains programmes...<br />
+ Les personnes qui utilisent ce type d'hébergement sont surtout des entreprises ou des particuliers
+ disposant de sites important ou qui ont besoin de stocker beaucoup de données,
+ ou encore d'une certaine configuration (installation de logiciel précis).</p>
+<h2 id="soi-meme">Héberger soi-même</h2>
+ <p>Celui-ci permet une totale liberté de configuration.
+ On héberge un serveur chez soi, avec les logiciels et données que l'on veut.
+ Ce type d'hébergement est assez rare, car il nécéssite une maitrise et une connaissance
+ assez importante des serveurs et logiciels que l'on veut installer et utiliser.
+ Il faut par exemple penser à la sécurité du serveur, qui est un point important.<br />
+ Il faut également disposer d'un accès permanent à internet, pour que les pages soient accessibles à tout moment.</p>
+<hr />
+<p>Il existe des types d'hébergement plus rares,
+ par exemple certains particuliers proposent d'héberger des fichiers sur un serveur qu'ils ont mis en place chez eux.</p>
+<p id="next">Pour continuer :<br />
+ <a href="http://www.commentcamarche.net/web/hebergement.php3" hreflang="fr">Comment Ca Marche : Hébergement</a><br />
+ <a href="http://fr.wikipedia.org/wiki/H%C3%A9bergement_Internet" class="wiki" hreflang="fr">Wikipédia : Hébergement Internet</a><br />
+ <a href="http://sebsauvage.net/comprendre/provider/provider_hebergement.html" hreflang="fr">Sebsauvage.net : L'hébergement</a></p>
+<?php require'../../autres/source-bas.php';?>
blob - /dev/null
blob + 9e11e94566a59b6f82787809d4545e6250b0a353 (mode 644)
--- /dev/null
+++ cestquoi/web/index.php
+<?php
+$head='<link rel="stylesheet" type="text/css" media="screen" href="/autres/css/cestquoi.css" />
+ <link rel="stylesheet" type="text/css" media="screen" href="/autres/css/code.css" />
+ <link rel="next" title="C\'est quoi les CSS ?" href="css.php" />
+ <link rel="index" title="C\'est quoi ?" href="../" />';
+$titre='C\'est quoi "(x)HTML" ?';
+require'../../autres/source-haut.php'?>
+<h1><img src="/img/cestquoi/ckxhtml.gif" alt="XHTML" style="border:1px solid #000;width:80px;height:18px;" />
+ C'est quoi "(x)HTML" ?</h1>
+<h2 id="balises">Les balises.</h2>
+ <p>Lorsque vous visitez un site, vous voyez des images, du texte, de la couleur...</p>
+ <p>Mais votre navigateur (Internet explorer, Firefox, Opera, Netscape...) ne voit pas ça. Il lit du <em>code</em>,
+ qu'il transforme pour que vous puissiez le voir normalement. C'est ce code qui est appelé
+ "<abbr title="HyperText Markup Language, en français 'langage hypertexte et à balises'">html</abbr>"
+ (anciennes versions du code) ou "<abbr title="eXtensible HyperText Markup Language">xhtml</abbr>" (versions récentes).</p>
+ <p>Ce code est écrit sous forme de <em>balises</em>, c'est a dire du texte entouré par des chevrons :
+ <code class='xhtml'><<span class='balise'>balise</span>></code></p>
+ <p>Votre navigateur comprend a quoi correspond telle ou telle partie de ce code.
+ Il sait par exemple que la balise <img> correpond à une image, que la balise <a> correspond à
+ un lien, que la balise <p> correspond à un paragraphe, etc...</p>
+ <p>Si votre navigateur voit le code :<br />
+ <code class='xhtml'><<span class='bal'>a</span>
+ <span class='attr'>href</span>=<span class='val'>"http://sylvain.sab.free.fr/"</span>>
+ Mon site<<span class='bal'>/a</span>></code><br /><br />
+ Il saura que cela correspond à un lien (grâce à "<code><a</code>")
+ qui dirige vers http://sylvain.sab.free.fr/ (grâce à
+ "<code class='xhtml'><span class='attr'>href</span>=<span class='val'>"http://sylvain.sab.free.fr/"</span></code>"),
+ et que le texte qui comporte ce lien est "<code>Mon site</code>".
+ Il affichera :<br /><br /><a href="http://sylvain.sab.free.fr/">Mon site</a></p>
+ <p>Si il voit "<code class='xhtml'><<span class='bal'>img</span> <span class='attr'>src</span>=<span class='val'>"xhtml.jpg"</span>
+ <span class='attr'>style</span>=<span class='style'>"<span class='ppt'>width:</span><span class='val'>80px</span>;<span class='ppt'>height:</span><span class='val'>18px</span>;"</span> <span class='as'>/</span>></code>"<br />
+ il saura qu'il doit afficher l'image xhtml.jpg (grâce à
+ "<code class='xhtml'><span class='attr'>src</span>=<span class='val'>"xhtml.jpg"</span></code>"),<br />
+ et que cette image a une lageur de 80 pixels et une longueur de 18 pixels
+ (grâce à <code class='xhtml'><span class='attr'>style</span>=<span class='style'>"<span class='ppt'>width:</span><span class='val'>80px</span>;<span class='ppt'>height:</span><span class='val'>18px</span>;"</span></code>)<br /><br />
+ Il affichera : <img alt='' style='border:1px solid #000;width:80px;height:18px;' src='/img/cestquoi/ckxhtml.gif' /></p>
+ <p>Vous avez peut-être remarqué une différence entre les balises "<code><a></a></code>"
+ et "<code><img /></code>".<br />
+ Les balises "<code><a></a></code>" vont <em>par paire</em>, alors que la balise "<code><img /></code>"
+ est <em>seule</em>.</p>
+ <p>Les balises qui vont par paire comportent deux types de balise :</p>
+ <ol><li>Une qui est apellée "<em>balise ouvrante</em>" (le <code><a></code>)
+ car elle ouvre un élément (ici c'est le lien), et</li>
+ <li>Une autre qui est apellée "<em>balise fermante</em>", reconnaissable au slash "/" car elle
+ indique la fin de l'élément.</li></ol>
+ <p>Les balises qui sont seules sont appelées "auto-fermantes", car elles n'ont pas besoin d'une deuxième balise
+ pour indiquer la fin.<br />Elles le font toutes seules grâce à "<code>/></code>".</p>
+ <p>On peut mettre du texte (ou d'autres balises) entre les balises qui vont par paire.</p>
+ <p>Quelques exemples de balises :</p>
+ <ol><li><strong>Qui vont par paires</strong> :
+ <dl><dt><code class='xhtml'><<span class='bal'>p</span>>Paragraphe<<span class='bal'>/p</span>></code></dt>
+ <dd>Le texte entre ces deux balises est un <em>paragraphe</em>.</dd>
+ <dt><code class='xhtml'><<span class='bal'>h1</span>>Titre<<span class='bal'>/h1</span>></code></dt>
+ <dd>Le texte entre ces deux balises est un <em>titre</em>.
+ Il y a plusieurs niveaux d'importance pour les titres, qui vont de h1 àa h6 :<br />
+ h1 est le titre le plus important, et h6 le moins important.</dd>
+ <dt><code class='xhtml'><<span class='bal'>em</span>>Texte important<<span class='bal'>/em</span>></code></dt>
+ <dd>Ces balises indiquent que le texte est important. Généralement,
+ les navigateurs le mettent en italique, mais il n'y a pas de règle pour cela.<br />
+ On peut également dire que le texte est plus important avec les balises</dd>
+ <dt><code class='xhtml'><<span class='bal'>strong</span>>Texte plus important<<span class='bal'>/strong</span>></code></dt>
+ <dd>Généralement, les navigateurs le mettent en gras.</dd></dl></li>
+ <li><strong>Auto-fermantes :</strong>
+ <dl><dt><code class='xhtml'><<span class='bal'>img</span> <span class='as'>/</span>></code></dt>
+ <dd>Cette balise indique au navigateur qu'il doit aficher une image.</dd>
+ <dt><code class='xhtml'><<span class='bal'>br</span> <span class='as'>/</span>></code></dt>
+ <dd>Cette balise indique un retour à la ligne.</dd>
+ <dt><code class='xhtml'><<span class='bal'>hr</span> <span class='as'>/</span>></code></dt>
+ <dd>Cette balise indique un ligne horizontale, comme celle ci :</dd></dl></li></ol>
+ <hr />
+ <h2 id="attributs">Les attributs et leurs valeurs.</h2>
+ <p>J'ai énoncé plusieurs balises, comme par exemple<br />
+ <code><br /></code>, qui provoque un retour à ligne ou encore <code><img /></code>,
+ qui indique la présence d'une image.</p>
+ <p>Si je mets ce code la, le navigateur ira à la ligne, puis qu'il doit afficher une image.<br />
+ Mais <em>quelle image ?</em> Et de <em>quelle taille ?</em>
+ <br />
+ C'est pour indiquer cela que l'on se sert des <em>attributs</em>.</p>
+ <p>Pour une image, l'attribut "src" prend une valeur qui indique la source de l'image,
+ c'est à dire l'endroit ou elle se trouve.</p>
+ <p>Voici comment est formée une balise, avec ses attributs :</p>
+ <ol><li>Pour les balises qui vont par paire :
+ <code class='xhtml'><<span class='bal'>balise</span> <span class='attr'>attribut1</span>=<span class='val'>"valeur1"</span> <span class='attr'>attribut2</span>=<span class='val'>"valeur2"</span>>Texte<<span class='bal'>/balise</span>></code></li>
+ <li>Pour les balises auto-fermantes :
+ <code class='xhtml'><<span class='bal'>balise</span> <span class='attr'>attribut1</span>=<span class='val'>"valeur1"</span> <span class='attr'>attribut2</span>=<span class='val'>"valeur2"</span> <span class='as'>/</span>></code></li></ol>
+ <p>Voici une image avec les attributs habituels :<br />
+ <code class='xhtml'><<span class='bal'>img</span> <span class='attr'>src</span>=<span class='val'>"bateau.jpg"</span> <span class='attr'>style</span>=<span class='style'>"<span class='ppt'>width:</span><span class='val'>30px</span>;<span class='ppt'>height:</span><span class='val'>10px</span>;"</span> <span class='as'>/</span>></code></p>
+ <p>L'attribut "<em>src</em>", qui à pour valeur "bateau.jpg", indique que l'image à afficher est le fichier
+ "bateau.jpg".<br />L'attribut "<em>style</em>" indique diverses choses correspondant à l'image,
+ ici "width:30px;" correspond à la largeur (width) de 30 pixels (30px),<br />
+ et "height:10px," à la hauteur (height) de 10 pixels (10px).</p>
+ <p>Evidemment, l'image n'est pas la seule balise qui utilise les attributs. Toutes les balises peuvent en avoir.<br />
+ Pour certaines, c'est obligatoire, pour d'autres, c'est facultatif.</p>
+ <p>Par exemple, la balise <code><a></a></code>, qui correspond à un lien,
+ doit obligatoirement avoir un attibut, sinon le navigateur ne saurait pas ou il doit aller quand on clique dessus.
+ L'attribut correspondant est "href".</p>
+ <p id="accueil">Si l'attribut "href" à pour valeur "accueil.html", le code poura être :<br />
+ <code class='xhtml'><<span class='bal'>a</span> <span class='attr'>href</span>=<span class='val'>"accueil.html"</span>>Page d'accueil<<span class='bal'>/a</span>></code>.<br />
+ Le navigateur affichera :<br /><a href="#accueil">Page d'accueil</a></p>
+ <p>Pour un lien, l'attribut href est obligatoire,
+ mais la balise peut également prendre plusieurs autres attributs facultatifs :</p>
+ <ul><li>L'attribut "<em>title</em>", qui affiche une infobulle lorsque l'on survole le lien avec la souris. </li>
+ <!--<li>L'attribut "<em>tabindex</em>", qui indique l'ordre des liens sélectionnés avec la touche TAB
+ <img src="/img/autres/tab.jpg" alt="- ->" style="width:46px;height:28px;" />.<br />
+ Si vous appuyez sur TAB sur cette page, vous verrez que l'image de la page d'accueil située
+ en haut de la page s'entourera de pointillés. Appuyez sur "Entrée" pour aller à cette page,
+ ou appuyez encore sur la touche tab pour passer au lien suivant. </li>
+ <li>L'attribut "accesskey". Cet attribut ressemble un peu au précédent.
+ (<a href="/apropos/accesskeys.php">Plus d'information sur les accesskeys</a>)</li>-->
+ <li>L'attribut "<em>hreflang</em>", qui indique la langue de la page vers laquelle dirige le lien.</li>
+ <li>etc... </li></ul>
+ <hr />
+ <h2 id="balisescomplexes">Des balises plus complexes</h2>
+ <p>Le code html contient quelques balises spéciales :
+ Par exemple, les balises qui indiquent le titre de la page, l'auteur...</p>
+ <p>Voici le code minimal pour une page WEB :
+ <br />
+ <code class='xhtml'>
+ <span class='dxml'><?xml version="1.0" encoding="iso-8859-1"?></span><br />
+ <span class='doctype'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"></span><br />
+ <<span class='bal'>html</span> <span class='attr'>xmlns</span>=<span class='val'>"http://www.w3.org/1999/xhtml"</span> <span class='attr'>xml:lang</span>=<span class='val'>"fr"</span> ><br />
+ <<span class='bal'>head</span>><br />
+ <<span class='bal'>title</span>><<span class='bal'>/title</span>><br />
+ <<span class='bal'>/head</span>><br />
+ <<span class='bal'>body</span>><br /> <<span class='bal'>/body</span>><br /></<span class='bal'>html</span>></code></p>
+ <p>En premier, il y a ce code (apellé "déclaration xml") :<br />
+ <code class='xhtml'><span class='dxml'><?xml version="1.0" encoding="iso-8859-1"?></span></code><br />
+ C'est la version du fichier (1.0), et l'encodage.<br />
+ L'encodage sert à indiquer quel type de caractères utilisera la page.<br />
+ Pour les langues anglaises, l'ASCII ou l'utf-8 sont souvent utilisés.
+ Cependant, certains ne prennent pas en compte les caractères latins (les accents par exemple).
+ On peut mettre des caractères latins dans un document en ASCII,
+ mais il faut indiquer que ce sont des caractères spéciaux avec "&" : "&eacute;" affiche é.
+ En iso, il n'est pas nécéssaire d'indiquer que c'est un caractère spécial,
+ on peut mettre directement "é" dans le code.
+ C'est pourquoi on utilise souvent "iso" dans les documents en français.
+ Il existe également des formats pour les langues chinoises, arabes...
+ (<a href="http://sebsauvage.net/comprendre/ascii/"
+ class='fr externe' hreflang='fr'>plus d'informations sur les encodages</a>)</p>
+ <p>Puis :<br />
+ <code class='xhtml'><span class='doctype'><!<em>DOCTYPE</em> html PUBLIC "-//W3C//DTD <em>XHTML 1.0 Strict</em>//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"></span></code><br />
+ Cette partie de code (qui se place en premier), appellée "Doctype",
+ indique la version du xhtml ou html utilisée. Ici la version du xhtml est la 1.0 Strict.</p>
+ <p>Ensuite, il y à<br />
+ <code class='xhtml'><<span class='bal'><em>html</em></span> <span class='attr'>xmlns</span>=<span class='val'>"http://www.w3.org/1999/xhtml"</span> <em><span class='attr'>xml:lang</span>=<span class='val'>"fr"</span></em>></code><br />
+ C'est la balise html, qui contient tout le reste du code (sauf le Doctype) et indique la langue de la page.</p>
+ <p>Puis, voici les balises "<em>head</em>"<br />
+ Elles contiennent plusieurs informations relatives à la page ou au site :<br />
+ Le titre de la page, les flux RSS, les feuilles de style (<a href="css.php">CSS</a>), les favicônes...<br />
+ Cependant, seulement le titre est obligatoire (mais il peut être vide) :<br />
+ <code class='xhtml'> <<span class='bal'>head</span>><br /> <<span class='bal'>title</span>><<span class='bal'>/title</span>><br /> <<span class='bal'>/head</span>></code></p>
+ <p>Ensuite, il y a les balises "<em>body</em>".<br />
+ Ce sont les balises les plus importantes, car elles contiennent le <em>corps</em> de la page.<br />
+ C'est <em>entre ces deux balises</em> que sont placées <em>la majorité des autres balises</em> :<br />
+ Les liens, les paragraphes, les images, les titres...<br />
+ <code class='xhtml'> <<span class='bal'>body</span>><br /> <<span class='bal'>/body</span>></code></p>
+ <p>Après la fermeture de la balise body, on ferme la balise html :<br />
+ <code class='xhtml'> <<span class='bal'>/body</span>><br /><<span class='bal'>/html</span>></code></p>
+ <p>Le schéma d'une page pourrait donc se résumer à ceci :<br />
+ <code class='xhtml'>
+ <span class='com'><!--On indique la version du xml et du xhtml que l'on va utiliser,
+ puis la langue et l'encodage du document--></span><br />
+ <span class='dxml'><?xml version="1.0" encoding="iso-8859-1"?></span><br />
+ <span class='doctype'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"></span><br />
+ <<span class='bal'>html</span> <span class='attr'>xmlns</span>=<span class='val'>"http://www.w3.org/1999/xhtml"</span> <span class='attr'>xml:lang</span>=<span class='val'>"fr"</span> ><br />
+ <span class='com'><!--La balise d'en tête contient plusieurs informations relatives au document.--></span><br />
+ <<span class='bal'>head</span>><br />
+ <<span class='bal'>title</span>>
+ <span class='com'><!--Le titre de la page. Par exemple "Bienvenue sur mon site".--></span>
+ </title><br /><<span class='bal'>/title</span>><br />
+ <<span class='bal'>/head</span>><br />
+ <<span class='bal'>body</span>><br />
+ <span class='com'><!--Ici, c'est le code de la page qui s'affiche à l'écran.--></span><br />
+ <<span class='bal'>/body</span>><br /></<span class='bal'>html</span>>
+ <span class='com'><!--Ensuite, on ferme les balises body et html.--></span></code></p>
+ <p>Il y a beaucoup de balises que l'on peut mettre dans l'en-tête. En voici quelques unes :</p>
+ <ul><li><strong>Les balises link</strong>
+ <dl><dt>Des Liens vers des flux RSS :</dt>
+ <dd><code class='xhtml'><<span class='bal'>link</span> <span class='attr'>rel</span>=<span class='val'>"alternate"</span> <span class='attr'>type</span>=<span class='val'>"application/rss+xml"</span> <span class='attr'>title</span>=<span class='val'>"Flux RSS"</span> <span class='attr'>href</span>=<span class='val'>"mon-flux-rss.xml"</span> <span class='as'>/</span>></code></dd>
+ <dt>Des liens vers des fichiers <abbr title="Cascading Style Sheets"><a href="css.php">CSS</a></abbr>
+ (ou feuilles de style) pour la mise en page :</dt>
+ <dd> <code class='xhtml'><<span class='bal'>link</span> <span class='attr'>rel</span>=<span class='val'>"stylesheet"</span> <span class='attr'>type</span>=<span class='val'>"text/css"</span> <span class='attr'>href</span>=<span class='val'>"mon-style.css"</span> <span class='as'>/</span>></code></dd>
+ <dt>Des pages d'aide à la navigation :</dt>
+ <dd><code class='xhtml'><<span class='bal'>link</span> <span class='attr'>rel</span>=<span class='val'>"help"</span> <span class='attr'>title</span>=<span class='val'>"Accessibilité"</span> <span class='attr'>href</span>=<span class='val'>"accessibilite.php"</span> <span class='as'>/</span>></code></dd>
+ <dt>Des liens vers des favicônes :</dt>
+ <dd><code class='xhtml'><<span class='bal'>link</span> <span class='attr'>rel</span>=<span class='val'>"icon"</span> <span class='attr'>type</span>=<span class='val'>"image/png"</span> <span class='attr'>href</span>=<span class='val'>"favicon.png"</span> <span class='as'>/</span>></code></dd></dl></li>
+ <li><strong>Les balises meta</strong>
+ <dl><dt>Indiquer l'auteur de la page :</dt>
+ <dd><code class='xhtml'> <<span class='bal'>meta</span> <span class='attr'>name</span>=<span class='val'>"author"</span> <span class='attr'>content</span>=<span class='val'>"Sylvain SABOUA"</span> <span class='as'>/</span>></code></dd>
+ <dt>Un copyright</dt>
+ <dd><code class='xhtml'><<span class='bal'>meta</span> <span class='attr'>name</span>=<span class='val'>"copyright"</span> <span class='attr'>content</span>=<span class='val'>"© Sylvain SABOUA"</span> <span class='as'>/</span>></code></dd>
+ <dt>Des mot-clés en rapport avec la page (pour les moteurs de recherche) :</dt>
+ <dd><code class='xhtml'><<span class='bal'>meta</span> <span class='attr'>name</span>=<span class='val'>"Keywords"</span> <span class='attr'>content</span>=<span class='val'>"xhtml"</span> <span class='as'>/</span>></code></dd>
+ <dt>Une description de la page (idem) :</dt>
+ <dd><code class='xhtml'><<span class='bal'>meta</span> <span class='attr'>name</span>=<span class='val'>"Description"</span> <span class='attr'>content</span>=<span class='val'>"Site d'informatique"</span> <span class='as'>/</span>></code></dd>
+ <dt>Le titre du site :</dt>
+ <dd><code class='xhtml'><<span class='bal'>meta</span> <span class='attr'>name</span>=<span class='val'>"title"</span> <span class='attr'>content</span>=<span class='val'>"Sylvain.sab"</span> <span class='as'>/</span>></code></dd></dl></li></ul>
+<hr />
+<h2 id="ccl">Conclusion</h2>
+ <p>le langage xhtml, nouvelle version du html, est un langage dit "<em>à balises</em>".
+ Il existe <em>deux types de balises</em> : celles qui vont par paires (une ouvrante et une fermante) et les auto-fermantes.
+ <br /><br />
+ Les balises utilisent souvent des <em>attributs</em>. Pour une image, l'attibut src est obligatoire par exemple.
+ Cependant quelques balises utilisent très rarement des attributs, comme la balise de retour a la ligne : <br <span class='as'>/</span>>.
+ <br /></p>
+ <p>Le xhtml est utilisé avec les <abbr title="Cascading Style Sheets"><a href="css.php">CSS</a></abbr>.
+ Le xhtml sert à donner le contenu, et les CSS à la mise en page.
+ </p>
+<p id="next">Pour continuer :<br />
+ <a href="css.php">C'est quoi les <abbr title="Cascading Style Sheets">CSS</abbr> ?</a><br />
+ <a href='http://www.commentcamarche.net/html/htmlintro.php3'
+ class='fr externe'>Comment ça marche : Introduction au HTML</a><br />
+ <a href="http://fr.wikipedia.org/wiki/HTML" class='externe wiki fr'>Le html sur Wikipedia</a><br />
+ <a href="http://www.siteduzero.com/tuto-3-4874-1.html"
+ class='fr externe'>Le site du Zéro : Liste des balises xhtml</a><br />
+ <a href="http://www.sebsauvage.net/html.html" class='fr externe'>Sebsauvage : conseils html</a></p>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + f7bce0bb71f6867da3354856c913c320a7ccaa0e (mode 644)
--- /dev/null
+++ cestquoi/web/serveur.php
+<?php
+$titre='Les notions de serveur et de client';
+$head['css'][0]['filename']='cestquoi';
+$head['access'][0]=array('rel'=>'next','href'=>'hebergement.php','title'=>'C\'est quoi l\'hébergement ?');
+$head['access'][1]=array('rel'=>'index','href'=>'../','title'=>'Index de la rubrique "C\'est quoi"');
+require'../../autres/source-haut.php'?>
+<h1><img src="/img/moyen/apache32.png" class="t32" alt="Une plume, le logo d'Apache" />Qu'est-ce qu'un serveur, un client ?</h1>
+<h2 id="serveur">Le serveur</h2>
+<p>Les pages et les fichiers que vous voyez sur internet sont stockées quelquepart, plus précisément sur une machine apellée «serveur».
+ C'est un ordinateur qui stocke des fichiers, et les envoie au client (le client, c'est vous, qui regardez la page).<br />
+ Parfois, dans le cas d'un site dynamique par exemple, le serveur exécute des instructions indiquées dans le code du fichier et
+ utilise d'autres logiciels avant d'envoyer le fichier au client.</p>
+<p>On utilise le terme "serveur" à la fois pour désigner la <em>machine</em> ou sont installés les logiciels,
+ et le <em>logiciel principal</em> installé sur cette machine, qui intéragit avec les autres logiciels.
+ C'est ambigü, on pourrait dire "Le serveur est installé sur le serveur". Il faut comprendre la différence entre la machine et le logiciel.</p>
+<p>Voici un schéma qui représente cette disposition :<br />
+ <img src="/img/cestquoi/schema-serveur.png" style="border:2px solid black;width:345px;height:319px"
+ alt="La machine contient le serveur (logiciel) et les logiciels facultatifs. Le serveur (logiciel) peut intéragir avec les autres logiciels."/></p>
+<h3>Logiciels</h3>
+<p style="margin-bottom:0">Plusieurs logiciels sont installés sur la machine :</p>
+ <dl style="margin-top:1">
+ <dt>Le système d'exploitation</dt>
+ <dd>Il fait tourner le serveur (logiciel). Le système d'exploitation le plus courant sur les serveurs est Linux,
+ mais il y a certains serveurs sous Windows ou autres.</dd>
+ <dt>Le serveur (logiciel)</dt>
+ <dd>Le plus courant sous Linux est Apache. Sous Windows, on trouve <acronym title="Internet Information Services" xml:lang="en">IIS</acronym>.</dd>
+ <dt>Les logiciels facultatifs</dt>
+ <dd>Sur la machine, seuls le serveur et le système d'exploitation doivent être installés.
+ Cependant, d'autres logiciels, même s'ils ne sont pas obligatoires, sont couramment utilisés :
+ <dl><dt>Un langage dit "dynamique"</dt>
+ <dd>Un langage dynamique est utilisé sur tous les sites importants. Sans ce type de langage, on dit qu'un site est statique.
+ Un langage dynamique permet par exemple de gérer une base de données, un forum, des articles éditables façon "Wiki",
+ des inscriptions et des membres. On dit que ce langage est dynamique car le site n'a pas besoin de son créateur pour se mettre à jour.<br />
+ <abbr title="PHP : HyperText Preprocessor" xml:lang="en">PHP</abbr> est utilisé sous Linux comme langage dynamique.<br />
+ Sous Windows, il y a l'<abbr title="Active server page">ASP</abbr>.</dd>
+ <dt>Une base de données</dt>
+ <dd>Comme son nom l'indique, elle permet d'enregistrer toutes sortes de données. C'est avec elle que l'on peut enregistrer des articles
+ ou des coordonnées, pour gérer des inscriptions sur un site par exemple.<br />
+ L'une des plus utilisée est <abbr title="My Search Query Langage" xml:lang="en">MySQL</abbr>.
+ On peut l'installer sous Linux ou Windows, mais elle est plus souvent liée avec Linux et PHP.
+ Il existe aussi Oracle, sous Windows, qui est souvent liée avec ASP.</dd></dl>
+ On peut utiliser beaucoup d'autres logiciels. Par exemple, on peut installer plusieurs serveurs (logiciels) sur un ordinateur,
+ pour disposer des avantages de chacun.</dd></dl>
+<h2 id="client">Le client</h2>
+<p>La notion de "client" est simple. Toutes les personnes qui demande à afficher une page ou un fichier sont des clients (par opposition à "Serveur").
+ Vous êtes un client, comme tous les internautes.<br />
+ Lorsqu'un client demande l'affichage d'une page, ou un fichier, on dit qu'il <em>envoie une requête</em>.
+ Ensuite, le serveur lit la requête, l'exécute, puis renvoie le résultat au client.<br />
+ Si l'on reprend le schéma, voici la succession et le déroulement des étapes :<br />
+ <img src="/img/cestquoi/schema-requete-client-serveur.png" style="border:2px solid black;width:345px;height:319px" alt="Schéma et représentation d'une requête"/></p>
+<p id="next">Pour continuer :<br />
+ <a href="hebergement.php">Qu'est-ce que l'hébergement ?</a><br />
+ <a href="http://fr.wikipedia.org/wiki/Serveur_%28informatique%29" hreflang="fr" class="wiki">Wikipédia : Serveur informatique</a><br />
+ <a href="http://www.commentcamarche.net/cs/csintro.php3" hreflang="fr">CCM : Environnement Client/Serveur</a></p>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + 3a8e9c911d2a24166f39b71cd5edef77b7b3740c (mode 644)
--- /dev/null
+++ configurer/ccleaner.php
+<?php
+$titre='Configurer Ccleaner';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Accueil de la rubrique "Configurer"');
+require'../autres/source-haut.php'?>
+<h1><img class="t128" alt="" src="/img/big/ccleaner128.png" />Configurer Craps Cleaner</h1>
+<p>Il y a une vidéo en deux parties :<br />
+<a href="/temp/?video=ccleaner">1° partie</a> : Télécharger et installer le logiciel<br />
+<a href="/temp/?video=ccleaner2">2° partie</a> : Configurer et utiliser le logiciel.
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 910270e67630789cbedbaaee9614b9922603bb1f (mode 644)
--- /dev/null
+++ configurer/firefox.php
+<?php
+$titre='Configurer Firefox';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Accueil de la rubrique "Configurer"');
+require'../autres/source-haut.php'?>
+<h1><img class="t64" alt="" src="/img/moyen/firefox64.png" />Configurer Firefox</h1>
+<p>Il y a pour le moment :</p>
+<ul>
+ <li>Une vidéo pour vous montrer comment effacer ses traces (Video de 421 Ko) :
+ <a href="/temp/?video=configfirefoxtraces">/temp/?video=configfirefoxtraces</a></li>
+ <li>Une autre pour vous montrer comment gérer les flux RSS (Vidéo de 588 Ko) :
+ <a href="/temp/?video=firefoxrss">/temp/?video=firefoxrss</a></li>
+ <li>Une autre qui explique comment utiliser les onglets (Vidéo de 400 Ko) :
+ <a href="/temp/?video=ffonglets">/temp/?video=ffonglets</a></li>
+</ul>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + dd0a4fd3b994c133d9d1389870035d339d5b025e (mode 644)
--- /dev/null
+++ configurer/index.php
+<?php
+$titre='Configurer/Optimiser';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Accueil de la rubrique "Configurer"');
+require'../autres/source-haut.php'?>
+<h1>Configurer</h1>
+<hr />
+<p style="float:right;">Optimiser <span style="font-family:'comic sans ms',serif;">W</span>indows
+ <a href="windows/"><img style="width:161px;height:144px" alt="Windows" src="/img/big/windows.gif" /></a></p>
+<p>Aller à : <a href="#internet">Internet</a> - <a href="#securite">Securité</a></p>
+<hr style="clear:both" />
+<h2 id="internet">Internet</h2>
+ <p><a href="firefox.php">Firefox</a> ; <a href="zonealarm.php">Zone alarm</a></p>
+ <h3 id="internet-thunderbird"><a href="thunderbird.php">Thunderbird</a></h3>
+ <ul><li><a href="thunderbird.php#filtrer-ses-messages" title="Pour classer vos messages, et réduire le spam">
+ Filtrer et classer ses messages</a></li>
+ <li>Astuces :<br />
+ <ul><li><a href="thunderbird.php#atuces-1-mail-groupe">Envoyer un mail à plusieurs personnes</a></li>
+ <li><a href="thunderbird.php#astuces-2-mail-format-texte">Envoyer ses messages au format texte plutôt que HTML</a></li></ul></li></ul>
+<h2 id="securite">Securité</h2>
+ <p><a href="ccleaner.php">Ccleaner</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + ce67c4e2b2a0585ef769bfaea149e48d11f9a460 (mode 644)
--- /dev/null
+++ configurer/thunderbird.php
+<?php
+$titre='Configurer Thunderbird';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Accueil de la rubrique "Configurer"');
+require'../autres/source-haut.php'?>
+<h1><img src="/img/moyen/thunderbird48.png" alt="" class="t48" />Configurer Thunderbird</h1>
+<ul><li><a href="#filtrer-ses-messages" title="Pour classer vos messages, et réduire le spam">
+ Filtrer et classer ses messages</a></li>
+ <li>Astuces :<br />
+ <ul><li><a href="#atuces-1-mail-groupe">Envoyer un mail à plusieurs personnes</a></li>
+ <li><a href="#astuces-2-mail-format-texte">Envoyer ses messages au format texte plutôt que HTML</a></li></ul></li></ul>
+<h2 id="filtrer-ses-messages">Filtrer et classer ses messages</h2>
+ <p>Si vous recevez beaucoup de spam (mail indésirable), vous avez sûrement envie de vous en débarrasser et de ne pas avoir à faire le tri
+ parmi les messages que vous recevez chaque jour. Si vous échangez des messages avec beaucoup de personnes,
+ il est également pratique de classer les mails reçus dans des dossiers spécifiques.<br />
+ Grâce aux règles de filtrage, Thunderbird (et la plupart des logiciels de messagerie) permet ceci.
+ L'exemple ici est en cas de spam. Nous allons voir comment définir des règles de filtrage et des actions spécifiques pour certains messages.</p>
+ <p>Pour créer des filtres, ouvrez le menu "Outils", puis "Filtres de messages...".<br />
+ <img src="/img/configurer/thunderbird/menu-outils.png" style="width:351px;height:47px"
+ alt="Fichier - Edition - Affichage - Aller à - Messages-=Outils=- Aide" />
+ <br /><br />
+ <img src="/img/configurer/thunderbird/liste-menu.png" style="width:242px;height:253px" /></p>
+ <p>Une fenêtre comme cell-ci s'ouvre. Elle vous permet de créer de nouvelles règles pour classer et filtrer vos messages :<br />
+ <img src="/img/configurer/thunderbird/fenetre-liste-filtres-vierge.png" style="width:504px;height:501px" alt="" /><br /><br />
+ Cliquez sur "Nouveau" pour définir un nouveau filtre, et les actions qui iront avec. Cette fenêtre s'ouvre :<br />
+ <img src="/img/configurer/thunderbird/fenetre-filtres-vierge.png" style="width:581px;height:459px" alt="" /><br /><br />
+ Ensuite, il faut définir les règles. Ici, si l'objet contient "site-spam.com", le message sera automqtiquement
+ déplacé vers la corbeille du dossier "Compte".<br />
+ <img src="/img/configurer/thunderbird/fenetre-filtres-1.png" style="width:581px;height:460px" alt="" /><br /><br />
+ Vous pouvez ajouter autant de règles que vous le voulez en cliquant sur le bouton "+".<br />
+ Voici un exemple avec plusieurs actions possibles,
+ et plusieurs conditions (règles) pour supprimer ou classer les messages indésirables :<br />
+ <img src="/img/configurer/thunderbird/fenetre-filtres-configure.png" style="width:581px;height:393px" alt="" /></p>
+ <p>"Supprimer du serveur POP" signifie effacer le message en ligne, et pas seulement sur votre ordinateur.<br />
+ Les filtres de messages sont également très pratique pour classer les messages de sa famille,
+ de ses collègues, etc, dans différents dossiers.</p>
+ <p>Dans la fenêtre "Filtres des messages", il y a un bouton "Journal de filtrage".
+ Le journal de filtrage sert à garder une trace de chaque règle utilisée :
+ "Une règle a été utilisée sur tel message à telle date et telle(s) action(s) a (ont) été réalisées.".<br />
+ Vous pouvez effacer les traces des actions utilisées ou tout simplement le désactiver.</p>
+<h2 id="astuces">Astuces</h2>
+ <h3 id="atuces-1-mail-groupe">Envoyer un mail groupé</h3>
+ <p>S'il vous arrive d'envoyer un mail à plusieurs personnes, chaque destinataire peut voir les adresses des autres destinataires.
+ C'est assez gênant : si une personne est infectée par un virus, spyware (logiciel espion) ou autre saleté indésirable,
+ toutes les adresse peuvent être récupérées !!<br />
+ Il en est de même si une partie du message est récupérée par un spammeur, qui ajoutera ces adresse à sa "collection".<br />
+ Tout simplement, il est aussi désagéable de voir que des personnes que l'on ne connait pas connaissent sa propre adresse,
+ surtout si c'est une adresse personelle.</p>
+ <p>Heureusement il existe une solution simple, et qui n'est <strong>pas seulement valable pour Thunderbird</strong>,
+ c'est d'utiliser le champ "CCI", "<abbr title="Black Carbon Copy">BCC</abbr>", ou autre "Copie Cachée".
+ De cette façon, le message sera correctement envoyé, sans risque que qui que ce soit récupère une adresse.<br />
+ Sous Thunderbird, il faut utiliser le champ "Copie Cachée".<br />
+ Sans utiliser "Copie cachée", le champ est :<br />
+ <img src="/img/configurer/thunderbird/champ-pour.png" style="width:343px;height:22px"
+ alt="-v- Pour: | adresse@mail.tld" /><br />
+ Il faut séléctionner cette option :<br />
+ <img src="/img/configurer/thunderbird/selection-champ-bcc.png" style="width:127px;height:126px"
+ alt="Pour / Copie à /=Copie cachée=/ Répondre à / Forum / Faire suivre à" /></p>
+ <p>Cette option est bien sûr disponible dans la plupart des logiciels de messagerie ou webmail,
+ avec différents noms.</p>
+ <h3 id="astuces-2-mail-format-texte">Envoyer ses messages au format texte plutôt que HTML</h3>
+ <p>Il y a énormément d'inconvénients à envoyer un mail au format HTML. Voir cet article :
+ <a href="http://www.freeantispam.org/gratuit/email-html.php" hreflang="fr">Pourquoi ne pas utiliser des emails en HTML</a>.<br />
+ Qu'est-ce qu'un mail en HTML ?
+ C'est tout ce qui contient du texte mis en forme (gras, italique, couleurs...) ou autre chose que du texte (images par exemple).
+ (Voir aussi : <a href="/cestquoi/web/">“ C'est quoi "(x)HTML" ? ”</a>).<br />
+ Pour envoyer ses e-mails au format texte simple dans Thunderbird, il faut se rendre dans le menu "Outils", puis "Paramètres des comptes",
+ et sélectionner "Rédaction et adressage" d'un compte. Décochez ensuite la case "Rédiger les messages en HTML".<br />
+ <img src="/img/configurer/thunderbird/redaction-format-texte.png" style="width:733px;height:582px" alt="" /></p>
+ <p>Effectivement, vos mails seront moins "beaux" (question de goût), mais ils seront plus légers, plus agréables à lire,
+ et ils ne seront pas filtrés par les logiciels de messagerie.<br />
+ De plus, certains WebMails gèrent mal le HTML.</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + c56be52d8cdf0f2893f14f645aca024e9a9f1752 (mode 644)
--- /dev/null
+++ configurer/windows/1.php
+<?php
+$titre='Optimiser Windows 1';
+$head['css'][0]['filename']='configwindows';
+$head['access'][0]=array('rel'=>'next','href'=>'2.php','title'=>'Optimiser Windows 2');
+$head['access'][1]=array('rel'=>'last','href'=>'2.php','title'=>'Optimiser Windows 2');
+$head['access'][2]=array('rel'=>'index','href'=>'./','title'=>'Optimiser Windows');
+require'../../autres/source-haut.php';?>
+<table summary="rubriques" class="som" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td class="g"></td>
+ <td class="c"><a href="index.php#sommaire">Sommaire</a></td>
+ <td class="d"><a href="2.php#optimisationsysteme">Suite : Optimisation du système </a></td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="avant">1) Avant de commencer</h2>
+<h4 id="toutdabord">Tout d'abord</h4>
+<p>Avant de faire quoi que ce soit sur votre ordinateur, mieux vaut le "nettoyer".<br />Faites donc dans cet ordre :</p>
+<ol><li><p>Une analyse antivirus avec un <strong>BON</strong> logiciel antivirus. Pour des analyses en ligne :
+ <a href="http://sebsauvage.net/logiciels/fprot.html#online" hreflang="fr">http://sebsauvage.net/logiciels/fprot.html#online</a></p></li>
+ <li><p>une analyse anti-spywares, malwares etc... Pour ceci je vous recommande les logiciels
+ <a href="/logiciels/spybot.php">Spybot et Ad-aware.</a></p></li>
+ <li><p>supprimmez le <em>maximum</em> de fichiers temporaires et inutiles avec le logiciel <a href="/logiciels/ccleaner.php">Ccleaner.</a></p>
+ </li>
+</ol>
+<h4 id='defragmentation'>Une défragmentation des disques durs</h4>
+ <p>Au fur et à mesure que vous utilisez votre ordinateur, il copie, déplace et supprime des fichiers sur votre disque.<br />
+ Vous ne le voyez pas, mais <span class="motcle">les fichiers sont "découpés"</span> sur le disque en plusieurs morceaux,
+ et quand vous avez besoin d'un fichier,<br /> il faut chercher toutes ses morceaux avant de pouvoir l'utiliser.</p>
+ <p>C'est pourquoi plus votre disque est <span class="motcle">fragmenté</span>, plus il sera <span class="motcle">lent</span>.
+ Il est donc conseillé de faire une <span class="motcle">défragmentation</span> de temps en temps
+ (environ <span class="motcle">tous les mois</span>).<br />Si vous n'avez pas fait de défragmentation depuis assez longtemps,
+ vous pouvez défragmenter <span class="motcle">plusieurs fois de suite chaque disque</span>.<br />
+ Ah oui, et dernière chose, il vaut mieux ne rien faire pendant la défragmentation, et même redémarrer avant.<br />
+ C'est encore mieux de défragmenter en mode sans échec (appuyez sur "F8" au démarrage.)<br />
+ Et c'est <span class="motcle">encore plus efficace</span> de défragmenter avec <span class="motcle">le logiciel </span>
+ <a href="/logiciels/pagedefrag.php">PageDefrag</a>.</p>
+ <p>Je vous conseille d'utiliser ce logiciel :<br />
+ Une fois téléchargé et décompréssé, ouvrez le fichier "<span class="motcle">pagedfrg.exe</span>".<br />
+ Vous verrez cette fenêtre s'afficher :<br />
+ <img style="width:497px;height:403px;" alt='' src="img/pagedfrg.jpg" /></p>
+ <p>Dans "Defragmentation Control", vous pouvez cocher "Defragment at next boot"
+ (défragmenter au <span class="motcle">prochain</span> démarrage) ou "Defragment every boot"
+ (défragmenter à <span class="motcle">chaque</span> démarrage).<br />
+ Je vous <span class="motcle">conseille</span> de défragmenter à <span class="motcle">chaque</span>
+ démarrage : les premières fois votre ordinateur mettra du temps à démarrer, mais ensuite il sera <span class="motcle">plus rapide</span>.
+ <br />L'option "Defrag abort countdown xx seconds" correspond au nombre de secondes que vous aurez
+ avant la défragmentation pour appuyer sur une touche et l'annuler.</p>
+ <p>Quand vous avez terminé, cliquez sur OK et redémarrez pour lancer la défragmentation.</p>
+ <p>toutefois si vous ne voulez pas utiliser ce logiciel, voici la marche à suivre :</p>
+ <p>1 - Ouvrez le Menu Démarrer, puis Tous les programmes>Accessoires>Outils système>Défragmenteur de disque.<br />
+ <img style="width:951px;height:326px;" alt="Menu démarrer" src="img/defrag1.jpg" /></p>
+ <p>2 - Sélectionnez un disque, puis cliquez sur défragmenter et attendez que cela se termine
+ (il est conseillé de ne rien faire pendant la défragmentation).</p>
+ <p>3 - Défragmentez chaque disque.<br /><img style="width:682px;height:468px" alt="" src="img/defrag2.jpg" /></p>
+<h4 id='verificationdd'>Une vérification des disques durs</h4>
+ <p>A force d'utiliser <span class="motcle">vos disques durs</span>, des parties (appelées "clusters")
+ peuvent <span class="motcle">s'abimer</span> ou être <span class="motcle">déffectueuses</span>.<br />
+ Pour reperer ces clusters abimés et les corriger (quand c'est possible),
+ il est nécéssaire de <span class="motcle">vérifier vos disques</span>.</p>
+ <p>Pour cela, déroulez le Menu Démarrer, puis Poste de Travail, faites un clic droit sur un disque dur et sélectionnez Propriétés.<br />
+ Dans l'onglet Outils, cliquez sur vérifier maintenant, puis dans la fenêtre qui s'ouvre cochez les deux cases.
+ Cliquez ensuite sur Démarrer et patientez.<br /> sRépetez la marche à suivre pour chaque disque.</p>
+ <p>Si, lorsque vous cliquez sur Démarrer, Windows affiche ceci (ce qui est assez probable) :<br />
+ <img style="width:788px;height: 133px;" alt="Vérification du disque." src="img/verifdsk.jpg" /><br />
+ Cliquez sur "Oui", refaites la marche à suivre pour chaque disque et redémarrez.</p>
+ <p>Attention, les vérifications sont longues...</p>
+<h4 id='pointrestoration'>Un point de Srestauration</h4>
+ <p>Nous allons ici créer un "Point de restoration", ce qui nous permettra,
+ <span class="motcle">en cas de problème</span> plus tard, de <span class="motcle">restaurer le système</span>
+ à la date de création de ce point de restoration.<br />
+ Cependant, toutes les <span class="motcle">modifications</span> que vous aurez effectuées
+ <span class="motcle">après la création</span> de votre point de restauration
+ seront <span class="motcle">annulées</span> si vous restaurez votre système.</p>
+ <p>Pour créer un point de restoration, ouvrez le Menu Démarrer, puis Tous les programmes>Accessoires>Outils
+ système>Restauration du sytème.<br />Sélectionnez ensuite "Créer un point de restauration", cliquez sur "Suivant",
+ entrez une description de ce point de restauration (par exemple "Avant Optimisation Windows"),
+ puis cliquez sur "Créer", et ensuite sur fermer.</p>
+ <p>Si vous avez un jour besoin de restaurer votre système, il faut ouvrir le Menu Démarrer, puis Tous les
+ programmes>Accessoires>Outils système>Restauration du sytème, sélectionner "Restaurer mon Ordinateur à une Date Antérieure,
+ puis cliquer sur Suivant et choisir votre point de restauration.</p>
+ <p>Si vous ne pouvez <span class="motcle">plus démarrer</span> Windows à un moment ou un autre
+ (mais je le répète, il y a <span class="motcle">très peu de chances que cela arrive</span>), démarrez votre ordinateur puis
+ appuyez <span class="motcle">tout de suite</span> sur la touche "F8" de votre clavier et laissez la enfoncée.<br />
+ On vous demandera de quelle facon vous voulez démarrer (mode sans échec...), choisissez "Dernière bonne configuration connue".<br />
+ Ceci revient à faire une restauration du système.</p>
+<h4 id='sauvegarderegistre'>Une sauvegarde du registre</h4>
+ <p>Le <span class="motcle">registre</span>, c'est l'endroit ou sont enregistrés <span class="motcle">tous les paramètres</span>
+ de votre ordinateur. Tous, tous, tous, absolument tous.<br />
+ De l'apparence de votre curseur au nombre d'icônes sur votre bureau,
+ en passant par les programmes qui se lancent au démarrage, tout est là.</p>
+ <p>C'est pourquoi une <span class="motcle">erreur</span> peut <span class="motcle">endommager</span> votre ordinateur.</p>
+ <p>Au cas ou ceci arriverait, nous allons faire une "Sauvegarde du registre".
+ Ceci ressemble un peu au point de restauration, mais concerne seulement le fichier spécial qu'est le registre.<br />
+ Nous allons copier puis exporter le registre quelquepart dans votre ordinateur.
+ Le mieux est de le graver sur CD, comme ceci vous l'aurez quoi qu'il arrive
+ (même si, et je vous le repete, il est peu probable de faire une erreur).</p>
+ <p>Pour faire une sauvegarde du registre, ouvrez le registre en ouvrant le Menu Démarrer>Executer,
+ puis tapez "regedit". Si cela ne marche pas, le fichier executable correspondant au registre est souvent dans le répertoire
+ C:\Windows\regedit.exe.<br /> Ouvrez ensuite le menu Fichier, puis exporter.
+ Une fenêtre qui ressemble a celle-ci s'affichera.<br /> Dans "étendue de l'exportation",
+ vérifiez bien que "<span class="motcle">Tout</span>" est coché.<br />
+ Donnez un nom au fichier, sélectionnez l'endroit ou vous voulez l'enregistrer puis cliquez sur
+ "enregistrer" et fermez le registre.
+ <img style="width:561px;height:514px;" alt="Sauvegarde du registre" src="img/savereg.jpg" /><br />
+ Vous pouvez aussi le graver sur CD (par exemple), mais à mon avis ca n'en vaut pas la peine..</p>
+ <p>Si un jour vous voulez "Restaurer" le registre, il vous suffira d'ouvrir le regitre, d'ouvrir le Menu Fichier,
+ puis importer et de sélectionner votre fichier.</p>
+<table summary="rubriques" class="som" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td class="g"></td>
+ <td class="c"><a href="index.php#sommaire">Sommaire</a></td>
+ <td class="d"><a href="2.php#optimisationsysteme">Suite : Optimisation du système</a></td>
+ </tr>
+ </tbody>
+</table>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + 67e679328992fff19fcea9eb877c45ce427b3f83 (mode 644)
--- /dev/null
+++ configurer/windows/2.php
+<?php
+$head['css'][0]['filename']='configwindows';
+$head['access'][0]=array('rel'=>'prev','href'=>'1.php','title'=>'Optimiser Windows 1');
+$head['access'][1]=array('rel'=>'first','href'=>'2.php','title'=>'Optimiser Windows 2');
+$head['access'][2]=array('rel'=>'index','href'=>'./','title'=>'Optimiser Windows');
+$titre='Optimiser Windows 2';
+require'../../autres/source-haut.php'?>
+<table summary="rubriques" class="som" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr>
+ <td class="g"><a href="1.php#avant">Précédent : Avant de commencer</a></td>
+ <td class="c"><a href="index.php#sommaire">Sommaire</a></td>
+ <td class="d"></td>
+ </tr>
+ </tbody>
+</table>
+<h2 id='optimisationsysteme'>2) optimisation du système</h2>
+<h3 id="manipulationsregistre"><img class='t16' alt="/!\" src="/img/mini/exclamation.gif" />
+Manipulations du registre</h3>
+<p class="ex">
+ <img class='t16' alt="/!\" src="/img/mini/exclamation.gif" />
+ Cette astuce peut avoir des conséquences sur votre système si vous faites mal les manipulations.
+ Cependant si vous suivez bien ce que j'ai donné, cela n'arrivera pas.<br />
+ Et n'oubliez pas que vous avez fait <a href="1.php#sauvegarderegistre">une sauvegarde du registre</a>
+ au cas ou ceci arriverait.
+</p>
+<p class="pintro">
+ Vous devrez ouvrir le registre à chaque étape de cette rubrique. Pour l'ouvrir, déroulez le menu démarrer,
+ exécuter et tapez "<em>regedit</em>" puis appuyez sur Entrée.<br />
+ Si il ne s'ouvre pas, l'executable correspondant au registre est souvent dans le répertoire
+ "C:\Windows\regedit.exe" (vous pouvez également taper ceci dans "executer").<br />
+ Vous voyez une <em>arborescence de dossiers</em> qui sont en fait des clés.
+ Si je dis "Déroulez la clé HKEY_CLASSES_ROOT", vous devez cliquer sur le
+ <img style="width: 19px; height: 18px;" alt="+" src="/img/mini/plus.gif" />
+ à coté du <img class='t16' alt="dossier" src="/img/mini/folder.png" />
+ placé à coté de "HKEY_CLASSES_ROOT".<br />
+ Les clés "HKEY_CURRENT_USER" et "HKEY_CURRENT_CONFIG" correspondent
+ à des réglages qui affectent seulement la session en cours (<em>current</em>).<br />
+ Si je vous dis de modifier une valeur, il faut double-cliquer dessus pour la changer.
+</p>
+<p class="pintro">
+ Il est également important de <em>respecter la casse</em>,
+ c'est à dire la différence majuscules/minuscules, ainsi que
+ <em>les espaces</em> :
+ Si je dis : "créez une valeur Dword que vous appellerez 'TimeSettings'",
+ il est important de l'apeller "TimeSettings" et pas "Time Settings" ou
+ "timesettings".
+</p>
+<p class="pintro">
+ Lorque vous modifier une valeur, elle est tout de suite enregistrée.
+ Vous ne devez pas confirmer quoi que ce soit ou enregistrer vous même.<br />
+ J'utiliserais souvent des abréviations pour les clés principales :<br />
+ HKCR pour HKEY_CLASSES_ROOT, HKCU pour HKEY_CURRENT_USER, etc...<br />
+</p>
+<h5 id='stopwinfast'>Arrêter windows plus vite</h5>
+<p>
+ Lorsque vous arrêtez Windows, il met parfois très longtemps avant de s'éteindre.
+ Pourquoi ?<br /> Car il laisse par défaut 20 secondes à chaque
+ logiciel encore actif avant de l'arrêter.<br />
+ Vous pouvez changer cette valeur pour que les logiciels s'arrêtent plus vite.
+</p>
+<p>
+ Déroulez les clés HKLM, puis System, CurrentControlSet et Control.
+ Modifiez la valeur WaitToKillServiceTimeOut fixée par défaut à 20000 millisecondes (20 secondes).
+ Entrez par exemple 5000 pour 5 secondes d'attente par logiciel.</p>
+<h5 id='liberermem'>Libérer la mémoire vive</h5>
+<p>
+ Windows conserve les dll de plusieurs logiciels dans la mémoire vive,
+ pour y avoir accès plus rapidement en cas de besoin.
+ Mais elles sont gardées en mémoire même quand le logiciel est fermé, et cela prend
+ inutilement de la place qui pourrait être utilisée par d'autres logiciels.</p>
+<p>
+ Pour déchargera les dll après usage, déroulez les clés HKLM, SOFTWARE, Microsoft,
+ Windows, CurrentVersion, Explorer.<br />La valeur AlwaysUnloadDll est fixée par défaut à 0,
+ changez la à 1.
+</p>
+<h3 id='fonctionrecherche'>La fonction de recherche</h3>
+<h4 id='desactiveindex'>Désactiver l'indexation</h4>
+<p>
+ Pour que vos recherches dans votre ordinateur soient plus rapides,
+ Windows indexe chaque fichier au fur et à mesure que vous les utilisez.<br />
+ Cette fonction est plutôt encombrante, car elle ralentit
+ votre ordinateur.
+</p>
+<p>
+ Pour la désactiver, ouvrez le menu démarrer puis rechercher (ou appuyez sur F3).<br />
+ Cliquez ensuite sur "Modifier les préférences", puis sur "avec le service d'indexation"
+ et choisissez non.
+</p>
+<h3 id='desactiveservices'><img class='t16' alt="/!\" src="/img/mini/exclamation.gif" />
+Désactiver les services inutiles</h3>
+<p class="ex">
+ <img class='t16' alt="/!\" src="../../img/mini/exclamation.gif" />
+ Cette manipulation peut avoir des conséquences si vous désactivez de mauvais services.
+</p>
+<p>
+ XP charge au démarrage plusieurs logiciels apellés "services".
+ Tous ne sont pas utiles, certains ne servent même à rien!<br />
+ Vous pouvez donc les désactiver pour gagner en rapidité.
+ (Cependant, vous devez être administrateur de l'ordinateur pour accèder à ces options)
+</p>
+<p>
+ Pour cela, ouvrez le Menu Démarrer, Executer, puis tapez "services.msc".
+ Si cela ne marche pas, executez le fichier services.msc situé dans le répertoire C:\WINDOWS\system32\.<br />
+ Vous devriez voir une fenêtre ressemblant a ceci :<br />
+ <img style="width: 649px; height: 452px;" alt="Services" src="img/servicesmsc.jpg" />
+</p>
+<p>
+ Ce sont tous les services. Pour arrêter et désactiver un service, double cliquez dessus,
+ puis cliquez sur arrêter (si il est démarré).<br />
+ Changez ensuite la valeur à coté de "démarrage" en "désactivé",
+ puis cliquez sur appliquer. C'est bon, le service est désactivé.<br />
+ Vous pouvez également regarder cette vidéo :
+</p>
+<div style="text-align:center;">
+ <object type="application/x-shockwave-flash" data="/temp/videos/stopservice.swf" height="488" width="410">
+ <param name="movie" value="/temp/videos/stopservice.swf" />
+ </object>
+</div>
+<h4>Services inutiles, à désactiver dans tous les cas :</h4>
+<p>
+ Accès distant au registre ; Administration IIS ; Affichage des messages ; Avertissement ; Carte à puce ;
+ Carte de performance WMI ; Client de suivi de lien distribué ; Connexion secondaire ; DDE réseau ;
+ Distribued Transaction Coordinator ; DSDM DDE sréseau ; Fournisseur de la prise en charge de sécurité LM NT ;
+ Gestionnaire de l'album ; Journaux et alertes de performance ; Partage de Bureau à Distance Netmeeting ;
+ Prise en charge des cartes à puce ; Publication FTP ; Publication World Wide Web ; QoS RSVP ;
+ Routage et accès distant ; Service de rapport d'erreur ; Services d'indexation ; Services IPSEC ;
+ Simple Mail Transfert Protocol (SMTP) ; Telnet ; WebClient.
+</p>
+<h4>Services à désactiver selon les cas :</h4>
+<table summary="Services à desactiver selon les cas" class="service" border="1" cellpadding="2" cellspacing="2">
+ <thead><tr><td>Service</td><td>à désactiver si...</td></tr></thead>
+ <tfoot><tr><td>service</td><td>à désactiver si...</td></tr></tfoot>
+ <tbody>
+ <tr><td>Acquisition d'image windows</td><td>Vous n'avez pas de scanner ni de webcam</td></tr>
+ <tr><td>Aide et support</td><td>Vous ne vous servez pas de l'aide de windows</td></tr>
+ <tr><td>Assistance TCP/IP netbios</td><td>Vous n'avez pas de réseau local</td></tr>
+ <tr><td>Compatibilité avec le changement rapide d'utilisateur</td>
+ <td>Vous n'avez qu'un compte sur votre ordinateur</td></tr>
+ <tr><td>Configuration automatique sans fil</td><td>Vous n'utilisez pas de réseau wi-Fi (Sans fil)</td></tr>
+ <tr><td>Explorateur d'ordinateur</td><td>Vous n'avez pas de réseau local</td></tr>
+ <tr><td>Fax</td><td>Vous n'utilisez pas la fonction "Fax" de windows</td></tr>
+ <tr><td>Gestionnaire de session d'aide sur le bureau à distance</td>
+ <td>Vous n'utilisez pas l'aide à distance</td></tr>
+ <tr><td>Onduleur</td><td>Vous n'utilisez pas d'onduleur</td></tr>
+ <tr><td>Planificateur de tâches</td><td>Vous n'utilisez pas les tâches planifiées</td></tr>
+ <tr><td>Serveur</td><td>Vous n'utilisez pas d'imprimante en réseau</td></tr>
+ <tr><td>Service de découverte SSPD</td><td>Vous n'avez pas de réseau local</td></tr>
+ <tr><td>Service de numéro de série du lecteur multimédia portable</td>
+ <td>Vous n'avez pas de baladeur MP3/Vidéo</td></tr>
+ <tr><td>Téléphonie</td><td>Vous avez le câble ou l'ADSL ou que vous n'avez pas internet</td></tr>
+ </tbody>
+</table>
+<table summary="rubriques" class="som" border="1" cellpadding="2" cellspacing="2">
+ <tbody>
+ <tr><td class="g"><a href="1.php#avant">Précédent : Avant de commencer</a></td>
+ <td class="c"><a href="index.php#sommaire">Sommaire</a></td>
+ <td class="d"></td>
+ </tr>
+ </tbody>
+</table>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + ac96f7190d58b5a952d38c9faf874fc88e79b8f8 (mode 644)
Binary files /dev/null and configurer/windows/img/defrag1.jpg differ
blob - /dev/null
blob + 79685c2bf4958687eaab8d110f6c2856d73c86d7 (mode 644)
Binary files /dev/null and configurer/windows/img/defrag2.jpg differ
blob - /dev/null
blob + 59b4f7dd5b7f1c7acf5c454cbe40e51bfcd135e1 (mode 644)
Binary files /dev/null and configurer/windows/img/savereg.jpg differ
blob - /dev/null
blob + 70b8b523a2ebd07cfbaba72194bf7e5657499c3e (mode 644)
Binary files /dev/null and configurer/windows/img/verifdsk.jpg differ
blob - /dev/null
blob + 98a8978328faa0d7d6a9acf5beb17f42a70137bd (mode 644)
--- /dev/null
+++ configurer/windows/index.php
+<?php
+$titre='Optimiser Windows';
+$head='<link title="windows" rel="stylesheet" href="/autres/css/configwindows.css" type="text/css" />';
+require'../../autres/source-haut.php'?>
+<h1><img style="width:161px;height:144px;" alt="Windows" src="/img/big/windows.gif" /><br />
+Configurer et optimiser windows</h1>
+<div style="width:90%;margin:auto;">
+ <p class="pintro">Je donne ici diverses façons de <em>manipuler Windows</em> pour le rendre <em>plus performant</em>
+ ou l'<em>adapter à vos besoins</em>.<br />Quelques manipulations peuvent s'effectuer avec le logiciel
+ <a href="http://www.microsoft.com/ntworkstation/downloads/PowerToys/Networking/NTTweakUI.asp">TweakUI</a>.<br />
+ Certaines peuvent <em>causer des problèmes</em> dans votre ordinateur suite a des manipulations.<br />
+ Ceci ne devrait pas arriver si vous suivez les astuces comme elles sont données, mais il vaut mieux se préparer en cas d'erreur.
+ <br />Je vous conseille donc de faire un <em>point de restauration</em> et une <em>sauvegarde du registre</em> avant de commencer
+ ces manipulations.<br />
+ La plupart des astuces sont sans "danger". Celles qui peuvent causer de graves erreurs dans votre ordinateur suite a de mauvaises
+ manipulations seront signalées par l'image :<img class='t16' alt="/!\"
+ src="/img/mini/exclamation.gif" />
+ </p>
+ <p>Attention, <strong>je ne suis pas responsable des dommages qui peuvent être causés dans votre ordinateur suite
+ à de telles manipulations.</strong>
+ </p>
+</div>
+<h1 id="sommaire">sommaire</h1>
+<h2><a href="1.php#avant">#</a>1) Avant de commencer</h2>
+ <h3><a href="1.php#toutdabord">#</a>Tout d'abord</h3>
+ <h3><a href="1.php#defragmentation">#</a>Une défragmentation des disques durs</h3>
+ <h3><a href="1.php#verificationdd">#</a>Une vérification des disques</h3>
+ <h3><a href="1.php#pointrestoration">#</a>Un point de restauration</h3>
+ <h3><a href="1.php#sauvegarderegistre">#</a>Une sauvegarde du registre</h3>
+<h2><a href="2.php#optimisationsysteme">#</a>2) Optimisation du système</h2>
+ <h3><a href="2.php#manipulationsregistre">#</a><img alt="/!\" src="/img/mini/exclamation.gif" />Manipulations du registre</h3>
+ <h4><a href="2.php#stopwinfast">#</a>Arrêter windows plus vite</h4>
+ <h4><a href="2.php#liberermem">#</a>Libérer la mémoire vive</h4>
+ <h3><a href="2.php#fonctionrecherche">#</a>La fonction de recherche</h3>
+ <h4><a href="2.php#desactiveindex">#</a>désactiver l'indexation</h4>
+ <h3><a href="2.php#desactiveservices">#</a><img alt="/!\" src="/img/mini/exclamation.gif" />Désactiver les services inutiles</h3>
+<?php require'../../autres/source-bas.php'?>
blob - /dev/null
blob + c26cae0e6a6c8e4a8addabdf970f2afb11a9600e (mode 644)
--- /dev/null
+++ configurer/zonealarm.php
+<?php
+$titre='Configurer Zone Alarm';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Accueil de la rubrique "Configurer"');
+require'../autres/source-haut.php'?>
+<h1><img class="t128" alt="ZA" title="Configurez Zone Alarm !" src="/img/big/zonealarm128.png" />
+ Configurer zone alarm</h1>
+<p>Il y a une vidéo complète en deux parties :<br />
+ <em>1° partie</em> (Vidéo de 2602 Ko) : <a href="/temp/?video=dlinstallza">Télécharger et installer</a><br />
+ <em>2° partie</em> (Vidéo de 976 Ko) : <a href="/temp/?video=dlinstallza2">Configurer et utiliser</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 781c188e6f66d6ec385f693a4ab2110e66345dd0 (mode 644)
--- /dev/null
+++ delxml/delxml2html.py
+#!/usr/bin/python
+# -*- coding: iso-8859-1 -*-
+import datetime, time
+import xml.dom.minidom
+#
+# delxml2html.py version 1.0.0
+# del.icio.us XML export to HTML converter.
+#
+# This program takes the XML export of your bookmarks
+# and creates an HTML page from it.
+#
+# Instructions:
+#
+# 1) Go to http://del.icio.us/api/posts/all
+# 2) Enter your del.icio.us login and password
+# 3) Save the page as all.xml
+# 4) Run this program
+# 5) You have your bookmarks in favs.html
+#
+# Requirements:
+# - a del.icio.us account.
+# - Python 2.4 or later.
+#
+# License: This program is public domain.
+#
+# Author: Sébastien SAUVAGE (webmaster of http://sebsauvage.net)
+#
+# Ce programme a été modifé.
+#
+# Modifications apportées :
+#
+# -Respect des normes du W3C
+# -Version xhtml 1.0 Strict
+# -Utilisation d'une feuille de style CSS.
+#
+print 'Reading all.xml and writing favs.html...'
+document = xml.dom.minidom.parse('all.xml')
+attrv = document.getElementsByTagName('posts')[0].attributes['update'].value
+export_date = attrv.replace('T',' ').replace('Z','')[:10]
+posts = {}
+# Get all posts, put them in a dictionnary (key = date/time of post)
+for post in document.getElementsByTagName('post'):
+ timep = post.attributes['time'].value.replace('T',' ').replace('Z','')
+ attributes = {'time':timep}
+ for attributename in ('href','description','extended','tag'):
+ attributes[attributename] = u""
+ try:
+ attributes[attributename] = post.attributes[attributename].value
+ except KeyError:
+ pass # Value not found. Nevermind.
+ # Strip ridiculously long page titles:
+ attributes['description'] = attributes['description'][:150]
+ posts[timep] = attributes
+
+# Take the list of posts (chronological order) and build HTML
+htmlbody = u""
+for timep in reversed(sorted(posts.keys())):
+ htmlbody += (u'<span class="d"><a href="%(href)s">%(description)s</a></span> - <span class="l">'
+ +u'%(href)s</span><br /><span class="n">%(extended)s (Tags: %(tag)s)</span>'
+ +u'<br /><br />\n') % posts[timep]
+
+htmlout=u'''
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
+ <head>
+ <title>Bookmarks %s</title>
+ <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
+ <link type="text/css" href="favs.css" rel="stylesheet" />
+ </head>
+ <body> <h1>Bookmarks %s</h1>
+ <p>
+ %s
+ </p>
+ </body>
+ </html>
+''' % (export_date,export_date,htmlbody)
+file = open('favs.html','w+b')
+file.write(htmlout.encode('UTF-8'))
+file.close()
+
+print "Done."
blob - /dev/null
blob + d433240b53a6cd9ca44dfd9e76ece4afd3102522 (mode 644)
--- /dev/null
+++ delxml/delxmloriginal.py
+#!/usr/bin/python
+# -*- coding: iso-8859-1 -*-
+import datetime, time
+import xml.dom.minidom
+#
+# delxml2html.py version 1.0.0
+# del.icio.us XML export to HTML converter.
+#
+# This program takes the XML export of your bookmarks
+# and creates an HTML page from it.
+#
+# Instructions:
+#
+# 1) Go to http://del.icio.us/api/posts/all
+# 2) Enter your del.icio.us login and password
+# 3) Save the page as all.xml
+# 4) Run this program
+# 5) You have your bookmarks in favs.html
+#
+# Requirements:
+# - a del.icio.us account.
+# - Python 2.4 or later.
+#
+# License: This program is public domain.
+#
+# Author: Sébastien SAUVAGE (webmaster of http://sebsauvage.net)
+#
+print 'Reading all.xml and writing favs.html...'
+document = xml.dom.minidom.parse('all.xml')
+attrv = document.getElementsByTagName('posts')[0].attributes['update'].value
+export_date = attrv.replace('T',' ').replace('Z','')[:10]
+posts = {}
+# Get all posts, put them in a dictionnary (key = date/time of post)
+for post in document.getElementsByTagName('post'):
+ timep = post.attributes['time'].value.replace('T',' ').replace('Z','')
+ attributes = {'time':timep}
+ for attributename in ('href','description','extended','tag'):
+ attributes[attributename] = u""
+ try:
+ attributes[attributename] = post.attributes[attributename].value
+ except KeyError:
+ pass # Value not found. Nevermind.
+ # Strip ridiculously long page titles:
+ attributes['description'] = attributes['description'][:150]
+ posts[timep] = attributes
+
+# Take the list of posts (chronological order) and build HTML
+htmlbody = u""
+for timep in reversed(sorted(posts.keys())):
+ htmlbody += (u'<a href="%(href)s"><b>%(description)s</b></a> - <small>'
+ +u'%(href)s</small><br><dd>%(extended)s (Tags: %(tag)s)</dd>'
+ +u'<br><br>\n') % posts[timep]
+
+htmlout=u'''<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css"><!--body{
+font-family:"Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;font-size:10pt;}
+--></style> <title>Bookmarks %s</title></head><body><h1>Bookmarks %s</h1><body>
+%s
+</body>
+</html>
+''' % (export_date,export_date,htmlbody)
+
+file = open('favs.html','w+b')
+file.write(htmlout.encode('UTF-8'))
+file.close()
+
+print "Done."
blob - /dev/null
blob + 7d1f39e31d87086851537addff1db589d8ff78d3 (mode 644)
--- /dev/null
+++ delxml/index.php
+<?php
+$head['css'][0]['filename']='code';
+$titre='Delxml2html';
+require'../autres/source-haut.php'?>
+<h1>Utiliser le programme "delxml2html".</h1>
+<p class="pintro">Ce programme vous permet, si vous avez un compte del.icio.us, de mettre tous vos marques pages en une seule page html, que vous pouvez
+ ensuite mettre sur votre site.
+ <br /> J'ai rédigé quelques instructions pour montrer comment utiliser le programme, réalisé par
+ Sébastien Sauvage : <a href="http://www.sebsauvage.net/" hreflang="fr">http://www.sebsauvage.net/</a>.
+</p>
+<h2 id="instructions">Instructions</h2>
+<ol>
+ <li>Rendez-vous sur
+ <a href="http://del.icio.us/api/posts/all/" hreflang="en">http://del.icio.us/api/posts/all/</a></li>
+ <li>Entrez votre login et votre mot de passe del.icio.us</li>
+ <li>Enregistrez la page sous le nom "all.xml" (appuyez sur [Ctrl] + S ou allez dans le menu Fichier > Enregistrer sous)</li>
+ <li>Enregistrez le programme dans le même dossier que le fichier "all.xml"</li>
+ <li>Lancez le programme</li>
+ <li>Si vous utilisez le programme modifié, enregistrez le fichier CSS dans un fichier nommé "favs.css" que vous placerez dans le même répertoire que "favs.html"</li>
+ <li>C'est bon ! Vous avez votre page favs.html, avec tous vos favoris en un seule page</li>
+ <li>Mettez à jour de temps en temps en ré-enregistrant le fichier "all.xml"</li>
+</ol>
+<h2 id="code">Code du programme</h2>
+<p>Programme original (<a id="codeoriginal" href="delxmloriginal.py">Télécharger au format Python</a>) (<a hreflang="fr" href="http://sebsauvage.net/python/programs.html#delxml2html">http://sebsauvage.net/python/programs.html#delxml2html</a>) :
+</p>
+<pre>#!/usr/bin/python
+# -*- coding: iso-8859-1 -*-
+import datetime, time
+import xml.dom.minidom
+#
+# delxml2html.py version 1.0.0
+# del.icio.us XML export to HTML converter.
+#
+# This program takes the XML export of your bookmarks
+# and creates an HTML page from it.
+#
+# Instructions:
+#
+# 1) Go to http://del.icio.us/api/posts/all
+# 2) Enter your del.icio.us login and password
+# 3) Save the page as all.xml
+# 4) Run this program
+# 5) You have your bookmarks in favs.html
+#
+# Requirements:
+# - a del.icio.us account.
+# - Python 2.4 or later.
+#
+# License: This program is public domain.
+#
+# Author: Sébastien SAUVAGE (webmaster of http://sebsauvage.net)
+#
+print 'Reading all.xml and writing favs.html...'
+document = xml.dom.minidom.parse('all.xml')
+attrv = document.getElementsByTagName('posts')[0].attributes['update'].value
+export_date = attrv.replace('T',' ').replace('Z','')[:10]
+posts = {}
+# Get all posts, put them in a dictionnary (key = date/time of post)
+for post in document.getElementsByTagName('post'):
+ timep = post.attributes['time'].value.replace('T',' ').replace('Z','')
+ attributes = {'time':timep}
+ for attributename in ('href','description','extended','tag'):
+ attributes[attributename] = u""
+ try:
+ attributes[attributename] = post.attributes[attributename].value
+ except KeyError:
+ pass # Value not found. Nevermind.
+ # Strip ridiculously long page titles:
+ attributes['description'] = attributes['description'][:150]
+ posts[timep] = attributes
+
+# Take the list of posts (chronological order) and build HTML
+htmlbody = u""
+for timep in reversed(sorted(posts.keys())):
+ htmlbody += (u'<a href="%(href)s"><b>%(description)s</b></a> - <small>'
+ +u'%(href)s</small><br><dd>%(extended)s (Tags: %(tag)s)</dd>'
+ +u'<br><br>\n') % posts[timep]
+
+htmlout=u'''<html><head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css"><!--body{
+font-family:"Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;font-size:10pt;}
+--></style> <title>Bookmarks %s</title></head><body><h1>Bookmarks %s</h1><body>
+%s
+</body>
+</html>
+''' % (export_date,export_date,htmlbody)
+
+file = open('favs.html','w+b')
+file.write(htmlout.encode('UTF-8'))
+file.close()
+
+print "Done."</pre>
+<p id="codemodifie">Programme modifié (<a href="delxml2html.py">Télécharger au format Python</a>) :<br />
+Modifications apportées :
+</p>
+<ul>
+ <li>Respect des normes du W3C</li>
+ <li>Version xhtml1.0 strict</li>
+ <li>Utilisation d'une feuile de style CSS</li>
+</ul>
+<pre>#!/usr/bin/python
+# -*- coding: iso-8859-1 -*-
+import datetime, time
+import xml.dom.minidom
+#
+# delxml2html.py version 1.0.0
+# del.icio.us XML export to HTML converter.
+#
+# This program takes the XML export of your bookmarks
+# and creates an HTML page from it.
+#
+# Instructions:
+#
+# 1) Go to http://del.icio.us/api/posts/all
+# 2) Enter your del.icio.us login and password
+# 3) Save the page as all.xml
+# 4) Run this program
+# 5) You have your bookmarks in favs.html
+#
+# Requirements:
+# - a del.icio.us account.
+# - Python 2.4 or later.
+#
+# License: This program is public domain.
+#
+# Author: Sébastien SAUVAGE (webmaster of http://sebsauvage.net)
+#
+# Ce programme a été modifé.
+#
+# Modifications apportées :
+#
+# -Respect des normes du W3C
+# -Version xhtml 1.0 Strict
+# -Utilisation d'une feuille de style CSS.
+#
+print 'Reading all.xml and writing favs.html...'
+document = xml.dom.minidom.parse('all.xml')
+attrv = document.getElementsByTagName('posts')[0].attributes['update'].value
+export_date = attrv.replace('T',' ').replace('Z','')[:10]
+posts = {}
+# Get all posts, put them in a dictionnary (key = date/time of post)
+for post in document.getElementsByTagName('post'):
+ timep = post.attributes['time'].value.replace('T',' ').replace('Z','')
+ attributes = {'time':timep}
+ for attributename in ('href','description','extended','tag'):
+ attributes[attributename] = u""
+ try:
+ attributes[attributename] = post.attributes[attributename].value
+ except KeyError:
+ pass # Value not found. Nevermind.
+ # Strip ridiculously long page titles:
+ attributes['description'] = attributes['description'][:150]
+ posts[timep] = attributes
+
+# Take the list of posts (chronological order) and build HTML
+htmlbody = u""
+for timep in reversed(sorted(posts.keys())):
+ htmlbody += (u'<span class="d"><a href="%(href)s">%(description)s</a></span> - <span class="l">'
+ +u'%(href)s</span><br /><span class="n">%(extended)s (Tags: %(tag)s)</span>'
+ +u'<br /><br />\n') % posts[timep]
+
+htmlout=u'''
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
+ <head>
+ <title>Bookmarks %s</title>
+ <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
+ <link type="text/css" href="favs.css" rel="stylesheet" />
+ </head>
+ <body> <h1>Bookmarks %s</h1>
+ <p>
+ %s
+ </p>
+ </body>
+ </html>
+''' % (export_date,export_date,htmlbody)
+file = open('favs.html','w+b')
+file.write(htmlout.encode('UTF-8'))
+file.close()
+
+print "Done."</pre>
+<p id="codecss">Et le fichier CSS qui va avec le programme modifié :</p>
+<pre>body{font-family:"Trebuchet MS",Verdana,Arial,Helvetica,sans-serif;font-size:10pt;}
+p span.d{font-weight:bold;}
+p span.l{font-size:0.8em;}
+p span.n{margin-left:3%;}</pre>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 952ee297a725c80996a5f0b9620ec6e78c1676be (mode 644)
--- /dev/null
+++ extract.php
+<?php
+//Extrait de la documentation de la class.
+require_once('pclzip.lib.php');
+$archive = new PclZip('wordpress-4.8.2-fr_FR.zip'); //METTRE LE VRAI NOM DU ZIP ;)
+//Extrait dans le repertoire courant.
+if ($archive->extract() == 0) {
+ die("Error : ".$archive->errorInfo(true));
+}
+?>
blob - /dev/null
blob + e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 (mode 644)
blob - /dev/null
blob + 7e5ea2571816f2c98829176a89f574a1a6604c93 (mode 644)
--- /dev/null
+++ html.php
+<?php
+$titre='Conseils et astuces pour vos sites WEB';
+$head['css'][0]['filename']='stylemotcle';
+require'autres/source-haut.php';
+?>
+<h1>Conseils et astuces pour vos sites</h1>
+ <hr />
+ <h2>
+ <a id="divers"></a>divers
+ </h2>
+ <h4>
+ <a id="sitemap"></a>faire une sitemap (Plan du
+ site)
+ </h4>
+
+ <div style="text-align: center;">
+ <span style="font-style: italic;">Attention : ce tutoriel
+ vous apprendra a faire une sitemap, pas une googlemap. Si
+ c'est ce que vous voulez, il existe le logiciel gratuit
+ YoodaMAP.</span><br />
+ <span style="font-style: italic;">Vous pouvez voir aussi :
+ <a href=
+ "http://www.commentcamarche.net/faq/sujet-3649-plan-du-site-sitemap-consultable-avec-navibar-pour-firefox">
+ http://www.commentcamarche.net/faq/sujet-3649-plan-du-site-sitemap-consultable-avec-navibar-pour-firefox</a></span>
+ </div>
+ <p>
+ sur certains sites, (dont le mien) si vous
+ utilisez <span class="motcle">Firefox muni de
+ l'extension Navibar</span>, vous avez déja vu un <span class=
+ "motcle">plan du site dans le panneau latéral</span>. Vous
+ trouvez ceci très pratique et vous aimeriez en faire profiter
+ les visiteurs de votre site mais vous ne savez pas comment
+ faire ? Ce n'est pas très compliqué. Il existe des logiciels
+ qui font ceci en quelques clics, mais ils sont payants. Ne
+ vous fiez pas non plus aux versions d'évaluation de ces
+ logiciels, la plupart ont des restrictions assz
+ contraignantes(ex: sitemap pro : seulement 6 urls!!).
+ Toutefois si vous trouvez un logiciel gratuit qui fait ca
+ bien, vous pouvez <a href="mail/">me contacter</a>
+
+ </p>
+ <p>
+ vous devrez faire un fichier que vous nommerez "<span class=
+ "motcle">sitemap.rdf</span>" et que vous deposerez a la
+ racine de votre site. Vous pouvez faire ce fichier avec le
+ bloc-notes mais cest plus pratique d'avoir un logiciel qui
+ <span class="motcle">colore et range le code</span>, comme
+ <a href="logiciels/pspad.php">PSPad editor</a>. Si vous
+ n'avez pas ce logiciel ou un logiciel similaire je vous
+ invite à le télécharger. En plus il fait aussi xslt, rss,
+ html... et une multitude d'autres formats. Si vous voulez
+ vous pouvez également regarder la <span class=
+ "motcle">sitemap de mon site</span> : <a href=
+ "sitemap.rdf">sitemap.rdf</a>. Appuyez sur Ctrl+U dans
+ Firefox pour voir son code source.
+ </p>
+
+ <p>
+ quand vous avez téléchargé et installé le logiciel, crééz un
+ nouveau fichier texte que vous nommerez "sitemap.rdf", puis
+ ouvrez le avec votre éditeur. Vous voyez une page vide. C'est
+ normal pour le moment. Nous allons maintenant remplir cette
+ page. Tout d'abord il faut indiquer la version de votre
+ fichier, c'est à dire la première version. Vous devez écrire
+ sur la première ligne de votre fichier le code
+ </p>
+ <div class="codexml">
+ <span class="xml1"><?xml version="1.0"?></span>
+ </div>
+ <p>
+ qui indique que la version du fichier xml est la version
+ numéro 1.<br />
+
+ </p>
+ <p>
+ vous devez ensuite indiquer le code qui suit : ce sont
+ diverses adresses en rapport avec la validité de votre
+ fichier.
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:RDF</span> <span class=
+ "xml3">xmlns</span><span class="xml2">="</span><span class=
+ "xml4">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span class="xml2">"</span><br />
+
+ <span class=
+ "xml3">xmlns:rdf</span><span class=
+ "xml2">="</span><span class=
+ "xml4">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span class="xml2">"</span><br />
+
+ <span class=
+ "xml3">xmlns:map</span><span class=
+ "xml2">="</span><span class=
+ "xml4">http://www.oaklett.org/map/1.0#</span><span class=
+ "xml2">"</span><br />
+
+ <span class=
+ "xml3">xmlns:dc</span><span class=
+ "xml2">="</span><span class="xml4">http://purl.org/dc/elements/1.1/</span><span class="xml2">"></span>
+ </div>
+ <p>
+ vous avez terminé la première partie. Maintenant nous allons
+ faire votre sitemap. Une sitemap est présentée sous forme
+ d'<span class="motcle">arborescence</span> : des dossiers
+ contenant des fichiers ou d'autres dossiers.
+ </p>
+
+ <p>
+ nous allons indiquer le <span class="motcle">contenu</span>
+ de votre sitemap. Vous n'êtes pas obligé d'indiquer tout le
+ contenu de votre site dans la sitemap, c'est vous qui
+ choisissez ce que les visiteurs pourront voir ou pas. Vous
+ pouvez aussi y mettre des <span class="motcle">liens
+ externes</span> (vers d'autres sites).Vous choisissez
+ également <span class="motcle">l'organisation des dossiers et
+ des fichiers</span> de votre sitemap : elle ne dépend pas de
+ celle de votre site.
+ </p>
+ <p>
+
+ la première partie de ma sitemap est :
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml4">urn:sitemap:root</span><span class=
+ "xml2">"></span><br />
+ <span class="xml2"><map:container></span><br />
+ <span class="xml2"><rdf:Seq></span><br />
+
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:home</span><span class="xml2">"/></span><br />
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:cestquoi</span><span class=
+ "xml2">"/></span><br />
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:configurer</span><span class=
+ "xml2">"/></span><br />
+
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:logiciels</span><span class=
+ "xml2">"/></span><br />
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:temp</span><span class="xml2">"/></span><br />
+ [...]<span style="font-style: italic;">etc</span><br />
+
+ <span class="xml2"></rdf:Seq></span><br class="xml2" />
+ <span class="xml2"></map:container></span><br class=
+ "xml2" />
+ <span class="xml2"></rdf:Description></span>
+ </div>
+ <p>
+ ? Ca veut dire quoi tout ce <span class=
+ "motcle">charabia</span> ?<br />
+
+ Ne vous inquiétez pas. Ceci vous paraitra beaucoup plus clair
+ une fois que vous aurez fini de lire ce tutoriel. Je vous
+ explique ce code :
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml4">urn:sitemap:root</span><span class="xml2">"></span>
+ </div>
+ <p>
+
+ Cette ligne est <span class="motcle">obligatoire</span>
+ pour une sitemap. Elle indique le <span class="motcle">début
+ de l'arborescence</span> et les éléments qui seront au
+ "premier niveau"(disons ca comme ca).<br />
+ <br />
+ </p>
+ <div class="codexml">
+ <span class="xml2"><map:container></span><br />
+
+ <span class="xml2"><rdf:Seq></span>
+ </div>
+ <p>
+ Indique le <span class="motcle">début du contenu</span> de la
+ sitemap, de ce que les visiteurs de votre site verront.
+ Obligatoire également.<br />
+ <br />
+ </p>
+
+ <div class="codexml">
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:home</span><span class="xml2">"/></span><span class="xml2"><br />
+
+ <rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:cestquoi</span><span class=
+ "xml2">"/></span><br />
+
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:configurer</span><span class="xml2">"/></span>
+ </div>
+ <p>
+ Veut dire : l'élément "syl:home" sera affiché en
+ premier, puis celui "syl:cestquoi", etc...<br />
+ Obligatoire aussi, a moins de ne rien vouloir mettre dans sa
+ sitemap...<br />
+
+ <br />
+ </p>
+ <div class="codexml">
+ <span class="xml2"></rdf:Seq></span><br class="xml2" />
+ <span class="xml2"></map:container></span><br class=
+ "xml2" />
+ <span class="xml2"></rdf:Description></span>
+ </div>
+
+ <p>
+ Indique la fin du contenu de votre sitemap.
+ Obligatoire.<br />
+ </p>
+ <p>
+ c'est maintenant que cela devient intéressant. Je vous ai
+ parlé "d'éléments", nous allons maintenant les rajouter dans
+ votre sitemap. Nous allons par exemple indiquer le contenu de
+ l'élément
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:home</span><span class="xml2">"/></span>
+
+ </div>
+ <p>
+ il faut mettre du code qui donnera le titre du contenu ainsi
+ qu'un lien vers la page correspondante. Le code
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">syl:home</span><span class=
+ "xml2">"></span><br />
+
+ <span class=
+ "xml2"><dc:title></span>Ssylvainsab -
+ Accueil<span class="xml2"></dc:title></span><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://ssylvainsab.free.fr/index.html<span class="xml2"></dc:identifier></span><br />
+
+ <span class="xml2"></rdf:Description></span>
+ </div>
+
+ <p>
+ Indique le contenu de l'élément "syl:home"<br />
+ </p>
+ <p>
+ que veut dire ce code?
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class="xml2">="<span class=
+ "xml4">syl:home</span></span><span class="xml2">"></span>
+
+ </div>
+ <p>
+ Indique le début d'un élément et dit : Cet élément est
+ l'élément "syl:home".<br />
+ </p>
+ <div class="codexml">
+ <span class=
+ "xml2"><dc:title></span>Ssylvainsab -
+ Accueil<span class="xml2"></dc:title></span>
+
+ </div>
+ <p>
+ Veut dire : Le titre de cet élément est "Ssylvainsab -
+ Accueil"<br />
+ <br />
+ </p>
+ <div class="codexml">
+ <span class=
+ "xml2"><dc:identifier></span>http://ssylvainsab.free.fr/index.html<span class="xml2"></dc:identifier></span>
+
+ </div>
+ <p>
+ Indique la page vers laquelle dirige l'élément.<br />
+ <br />
+ </p>
+ <div class="codexml">
+ <span class="xml2"></rdf:Description></span>
+ </div>
+
+ <p>
+ Indique la fin du contenu de l'élément.
+ </p>
+ <p>
+ donc le code :
+ </p>
+ <div class="codexml">
+ <span class="xml1"><?xml version="1.0"?></span><br />
+ <br />
+
+ <span class="xml2"><rdf:RDF</span> <span class=
+ "xml3">xmlns</span><span class="xml2">="</span><span class=
+ "xml4">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span class="xml2">"</span><br />
+
+ <span class=
+ "xml3">xmlns:rdf</span><span class=
+ "xml2">="</span><span class=
+ "xml4">http://www.w3.org/1999/02/22-rdf-syntax-ns#</span><span class="xml2">"</span><br />
+
+ <span class=
+ "xml3">xmlns:map</span><span class=
+ "xml2">="</span><span class=
+ "xml4">http://www.oaklett.org/map/1.0#</span><span class=
+ "xml2">"</span><br />
+ <span class=
+ "xml3">xmlns:dc</span><span class=
+ "xml2">="</span><span class="xml4">http://purl.org/dc/elements/1.1/</span><span class="xml2">"></span>
+
+ <span class="xml2">
+ <rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml4">urn:sitemap:root</span><span class=
+ "xml2">"></span><br />
+ <span class="xml2">
+ <map:container></span><br />
+ <span class="xml2">
+
+ <rdf:Seq></span><br />
+ <span class="xml2">
+ <rdf:li</span>
+ <span class="xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">syl:home</span><span class="xml2">"/></span><br />
+
+ <span class="xml2">
+ </rdf:Seq></span><br class="xml2" />
+ <span class="xml2">
+ </map:container></span><br class="xml2" />
+ <span class="xml2">
+ </rdf:Description></span> <span class=
+ "xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">syl:home</span><span class=
+ "xml2">"></span><br />
+
+ <span class=
+ "xml2"><dc:title></span>Ssylvainsab -
+ Accueil<span class="xml2"></dc:title></span><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://ssylvainsab.free.fr/index.html<span class="xml2"></dc:identifier></span><br />
+
+ <span class="xml2"></rdf:Description><br />
+ <br />
+
+ </rdf:RDF></span>
+ </div>
+ <p>
+ Veut dire : La version de ce fichier est la version 1.<br />
+ Le contenu de la sitemap sera l'élément "syl:home".<br />
+ Le titre de l'élément "syl:home" est Ssylvainsab - Accueil et
+ c'est un lien vers la page
+ http://ssylvainsab.free.fr/index.html.
+ </p>
+ <p>
+
+ evidemment une sitemap avec seulement la page d'accueil
+ n'aurait pratiquement aucun intêret. Il vous faut donc
+ rajouter des éléments.
+ </p>
+ <p>
+ nous allons voir ici comment faire pour ajouter des dossiers
+ a votre sitemap. Par exemple, nous voulons que la sitemap
+ contienne la page d'accueil et un dossier de photos. il
+ faudra entrer le code :
+ </p>
+ <div class="codexml">
+ [...]<br />
+ <br />
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml4">urn:sitemap:root</span><span class=
+ "xml2">"></span><!--Le début de la sitemap--><br />
+
+ <span class="xml2">
+ <map:container></span><!--Le contenu de la
+ sitemap--><br />
+ <span class="xml2">
+ <rdf:Seq></span><br />
+ <span class="xml2">
+ <rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class=
+ "xml4">pagedaccueil</span><span class=
+ "xml2">"/></span><!--On affichera en premier l'element
+ "pagedaccueil"--><br />
+
+ <span class="xml2">
+ <rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photos</span><span class=
+ "xml2">"/></span><!--On affiche ensuite l'element
+ "photos"--><br />
+ <span class="xml2">
+ </rdf:Seq></span><br class="xml2" />
+
+ <span class="xml2">
+ </map:container></span><!--On ferme le contenu de la
+ sitemap--><br class="xml2" />
+ <span class="xml2"></rdf:Description></span>
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">pagedaccueil</span><span class=
+ "xml2">"></span><!--Ceci est l'element
+ "pagedaccueil"--><br />
+
+ <span class=
+ "xml2"><dc:title></span>Accueil<span class=
+ "xml2"></dc:title></span><!--Le titre de cet element
+ est "Accueil"--><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/index.html<span class="xml2"></dc:identifier></span><!--Il
+ y a un lien vers ma page d'accueil sur cet
+ element--><br />
+ <span class="xml2"></rdf:Description></span><!--On
+ ferme l'element "pagedaccueil"--><br />
+
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photos</span><span class=
+ "xml2">"></span><!--Ceci est l'element "photos". C'est
+ un dossier avec mes photos--><br />
+ <span class="xml2">
+ <dc:title></span>Les Photos de Mes Vacances<span class=
+ "xml2"></dc:title></span><!--Le titre du dossier est
+ "Les Photos de Mes Vacances--><br />
+
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/index.html<span class="xml2"></dc:identifier></span><!--Il
+ y a un lien vers la page de mes photos sur cet element
+ --><br />
+ <span class="xml2"> </span> <span class=
+ "xml2"><map:container></span><!--Le contenu de
+ l'element "photos"--><br />
+ <span class="xml2">
+ <rdf:Seq>
+
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo1</span><span class=
+ "xml2">"/></span><!--On affiche d'abord la premiere
+ photo--><br />
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo2</span><span class=
+ "xml2">"/></span><!--Puis la deuxieme--><br />
+
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo3</span><span class=
+ "xml2">"/></span><!--puis la troisieme--><br />
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo4</span><span class=
+ "xml2">"/></span><!--...etc--><br />
+
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo5</span><span class=
+ "xml2">"/></span><!--etc--><br />
+ <span class="xml2">
+ </rdf:Seq><br />
+
+ </map:container></span><!--On
+ ferme le contenu du dossier--><span class="xml2"><br />
+ </rdf:Description></span><br />
+ <span class="xml2"><br />
+ <rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photo1</span><span class=
+ "xml2">"></span><!--Ceci est le contenu de l'element
+ "photo1"--><br />
+
+ <span class=
+ "xml2"><dc:title></span>Moi a la plage<span class=
+ "xml2"></dc:title></span><!--Le titre de cet element
+ est "Moi a la plage"--><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/premierephoto.jpg<span class="xml2"></dc:identifier></span><!--Il
+ y a un lien vers la photo de moi a la plage dans cet
+ element--><br />
+ <span class="xml2"></rdf:Description></span><!--On
+ ferme l'element "photo1"--><br />
+
+ <br />
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photo2</span><span class=
+ "xml2">"></span><!--Ceci est le contenu de l'element
+ "photo2"--><br />
+ <span class=
+ "xml2"><dc:title></span>Moi a la montagne<span class=
+ "xml2"></dc:title></span><!--Le titre de cet element
+ est "Moi a la montagne"--><br />
+
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/deuxiemephoto.jpg<span class="xml2"></dc:identifier></span><!--Il
+ y a un lien vers la photo de moi a la montagne dans cet
+ element--><br />
+ <span class="xml2"></rdf:Description></span><!--On
+ ferme l'element "photo2"--><br />
+ <br />
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photo3</span><span class=
+ "xml2">"></span><!--On ouvre l'element--><br />
+
+ <span class=
+ "xml2"><dc:title></span>Moi et mes amis<span class=
+ "xml2"></dc:title></span><!--Le titre est "Moi et
+ mes amis"--><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/troisiemephoto.jpg<span class="xml2"></dc:identifier></span><!--Il
+ y a un lien vers la photo de moi et mes amis--><br />
+ <span class="xml2"></rdf:Description></span><!--On
+ ferme l'element--><br />
+
+ <br />
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photo4</span><span class=
+ "xml2">"></span><!--On ouvre l'element--><br />
+ <span class=
+ "xml2"><dc:title></span>Mon chien<span class=
+ "xml2"></dc:title></span><br />
+
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/monchien.jpg<span class="xml2"></dc:identifier></span><!--photo
+ de mon chien--><br />
+ <span class="xml2"></rdf:Description></span><!--On
+ ferme l'element--><br />
+ <br />
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photo5</span><span class=
+ "xml2">"></span><!--...etc--><br />
+
+ <span class=
+ "xml2"><dc:title></span>Moi<span class=
+ "xml2"></dc:title></span><br />
+ <span class=
+ "xml2"><dc:identifier></span>http://www.monsite.com/photos/photo.jpg<span class="xml2"></dc:identifier></span><!--...etc--><br />
+
+ <span class=
+ "xml2"></rdf:Description></span><!--etc--><br />
+
+ <span class="xml2"><br />
+ </rdf:RDF></span> [...]
+ </div>
+ <p>
+ voici ce que le visiteur verra lorsqu'il visitera votre site
+ :<br />
+ <img style="border: 1px solid ; width: 297px; height: 253px;"
+ alt="ACCUEIL | PHOTOS> 1 2 3 4 5" src=
+ "img/autres/navibarexemple.jpg" />
+ </p>
+ <p>
+
+ Si vous ne voulez pas mettre de lien sur un dossier, il
+ suffit de mettre une ancre (un dièze) à la place. Exemple :
+ </p>
+ <div class="codexml">
+ <span class="xml2"><rdf:Description</span> <span class=
+ "xml3">rdf:about</span><span class=
+ "xml2">="</span><span class=
+ "xml3 xml4">photos</span><span class=
+ "xml2">"></span><!--Ceci est l'element "photos". C'est
+ un dossier avec mes photos--><br />
+ <span class="xml2">
+ <dc:title></span>Les Photos de Mes Vacances<span class=
+ "xml2"></dc:title></span><!--Le titre du dossier est
+ "Les Photos de Mes Vacances--><br />
+
+ <span class=
+ "xml2"><dc:identifier></span>#<span class=
+ "xml2"><</span><span class=
+ "xml2">/dc:identifier></span><!--J'AI MIS UN DIEZE DONC
+ IL N'Y A PAS DE LIENS ATTRIBUE A CE DOSSIER--><br />
+ <span class="xml2"> </span> <span class=
+ "xml2"><map:container></span><!--Le contenu de
+ l'element "photos"--><br />
+ <span class="xml2">
+ <rdf:Seq>
+
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo1</span><span class=
+ "xml2">"/></span><!--On affiche d'abord la premiere
+ photo--><br />
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo2</span><span class=
+ "xml2">"/></span><!--Puis la deuxieme--><br />
+
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo3</span><span class=
+ "xml2">"/></span><!--puis la troisieme--><br />
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo4</span><span class=
+ "xml2">"/></span><!--...etc--><br />
+
+ <span class="xml2">
+ </span> <span class=
+ "xml2"><rdf:li</span> <span class=
+ "xml3">rdf:resource</span><span class=
+ "xml2">="</span><span class="xml4">photo5</span><span class=
+ "xml2">"/></span><!--etc--><br />
+ <span class="xml2">
+ </rdf:Seq><br />
+
+ </map:container></span><!--On
+ ferme le contenu du dossier--><span class="xml2"><br />
+ </rdf:Description></span>
+ </div>
+ <p>
+ vous pouvez faire autant de dossiers et de fichiers que vous
+ voulez à l'interieur d'autant de dossiers que vous voulez.
+ Par contre attention, il ne faut pas mettre d'accent ou
+ d'autre caractere à part "-" ou "_" dans votre fichier, sinon
+ il y aura à la place un point d'interrogation.
+ </p>
+ <p>
+
+ voila, vous savez maintenant comment faire une sitemap. Notez
+ qu'il existe un validateur pour ce type de documents :
+ <a href=
+ "http://www.w3.org/RDF/Validator/">http://www.w3.org/RDF/Validator/</a>
+ </p>
+ <p>
+ Si votre document n'est pas valide, vérifiez :
+ </p>
+ <ul>
+ <li>Que toutes les balises sont bien fermées dans le bon
+ ordre
+ </li>
+ <li>Que vous n'avez pas oublié de guillemets
+ </li>
+
+ <li>Que vous n'avez pas mi un caractère invalide
+ </li>
+ </ul>
+ <h2>
+ <a id="tableaux"></a>les tableaux
+ </h2>
+ <h4>
+ <a id="summary"></a>attribut summary
+ </h4>
+ <p>
+
+ Utilisez <span class="motcle">toujours</span> l'attribut
+ "<span class="motcle">summary</span>" dans vos tableaux.
+ C'est une règle pour <span class="motcle">respecter les
+ normes</span> (<a href=
+ "http://www.w3.org/">http://www.w3.org/</a>)
+ d'internet.<br />
+ Cet attribut est une sorte de "alt" pour un tableau.
+ </p>
+ <p>
+
+ L'attribut "<span class="motcle">alt</span>" est le
+ <span class="motcle">texte</span> qui s'affiche <span class=
+ "motcle">à la place d'une image</span> lorqu'elle n'est pas
+ chargée. Par exemple le code html :
+ </p>
+ <div class="code">
+ <span class="code1"><img</span> style="<span class=
+ "code2">width: 150px; height: 35px;</span>" alt="<span class=
+ "code2">html</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btlogiciels.gif</span>"<span class="code1">></span><br />
+
+ </div>
+ <p>
+ affichera : <img style="width: 110px; height: 36px;" alt=
+ "html" src="img/boutons/btlogiciels.gif" />
+ </p>
+ <p>
+ Cependant <span class="motcle">si la source est
+ éronnée</span> (par exemple en se trompant on met .png au
+ lieu de .gif) :
+ </p>
+
+ <div class="code">
+ <span class="code1"><img</span> style="<span class=
+ "code2">width: 150px; height: 35px;</span>" alt="<span class=
+ "code2">logiciels</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btlogiciels.png</span>"<span class="code1">></span>
+ </div>
+ <p>
+
+ ce qui sera affiché à l'écran sera : <img style=
+ "width: 150px; height: 35px;" alt="logiciels" src=
+ "img/autres/imgalt.png" /> car le lien vers l'image est
+ erronné.<br />
+ Mais avec l'attribut "alt" on sait quand même de quoi va
+ parler la page. <span class="motcle">Très utile</span>.
+ </p>
+ <p>
+ Si on n'avait <span class="motcle">pas mis d'attribut
+ "alt"</span> ce qui aurait été affiché serait :<br />
+
+ <img alt="pas de alt" style="width: 150px; height: 35px;"
+ src="img/autres/imgssalt.png" />.<br />
+ La, aucun idée du thème de la page. Beaucoup moins pratique.
+ </p>
+ <p>
+ eh bien c'est un peu pareil pour un tableau. Par exemple
+ l'attribut <span class="motcle">"summary" du tableau</span>
+ de la page <span class="motcle"><a href=
+ "temp/">Temp</a></span> de mon site est <span class=
+ "motcle">"Videos et fichiers"</span>.<br />
+
+ De cette façon le visiteur de mes pages sait de quoi va
+ parler le tableau.
+ </p>
+ <p>
+ En fait cet attribut et l'attribut "alt" servent plutot dans
+ les <span class="motcle">navigateurs en mode texte</span>,
+ comme Lynx,<br />
+ ou pour les personnes qui ont <span class="motcle">désactivé
+ les images</span> sur leur navigateur.
+ </p>
+ <hr style="width: 100%; height: 2px;" />
+
+ <h4>
+ <a id="thead"></a>"Thead" et "Tfoot"
+ </h4>
+ <p>
+ dans vos tableaux, vous avez sans doute déja voulu
+ mettre <span class="motcle">un en-tête ou un
+ pied</span>, mais vous ne savez pas comment faire?<br />
+ C'est <span class="motcle">très simple</span>.
+ </p>
+
+ <p>
+ habituellement votre tableau est en une partie : le corps
+ (tbody) : regardez ce <span class="motcle">tableau de
+ base</span> :
+ </p>
+ <table summary="exemple de tableau simple" style=
+ "text-align: center; width: 400px;" border="2" cellpadding="2"
+ cellspacing="2">
+ <tbody>
+ <tr>
+ <td>
+ liens.html
+ </td>
+
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Liens"
+ src="img/boutons/btliens.gif" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ news.html
+ </td>
+ <td>
+
+ <img style="width: 110px; height: 36px;" alt="News"
+ src="img/boutons/btnews.gif" />
+ </td>
+ </tr>
+ <tr>
+ <td>
+ index.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Accueil"
+ src="img/boutons/btaccueil.gif" />
+
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ <br />
+ ...et son code html (que j'ai coloré pour qu'il soit plus
+ "lisible") :<br />
+ <br />
+
+ </p>
+ <div class="code">
+ <span class="code1"><table</span> summary="<span class=
+ "code2">exemple de tableau simple</span>" style="<span class=
+ "code2">text-align: center; width: 400px;</span>"
+ border="<span class="code2">2</span>"
+ cellpadding="<span class="code2">2</span>"
+ cellspacing="<span class="code2">2</span>"<span class=
+ "code1">></span><br />
+
+ <span class="code1"><tbody></span><br />
+ <br />
+ <span class="code1"><tr></span><br />
+ <span class="code1">
+ <td></span>liens.html<span class=
+ "code1"></td></span><br />
+ <span class="code1">
+
+ <td><img</span> style="<span class="code2">width:
+ 150px; height: 35px;</span>" alt="<span class=
+ "code2">Liens</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btliens.gif</span>"><span class="code1"></td></span><br />
+
+ <span class="code1"></tr></span><br />
+
+ <br />
+ <span class="code1"><tr></span><br />
+ <span class="code1">
+ <td></span>news.html<span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td><img</span> style="<span class="code2">width:
+ 150px; height: 35px;</span>" alt="<span class=
+ "code2">News</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btnews.gif</span>"<span class="code1">></td></span><br />
+
+ <span class="code1"></tr></span> <span class=
+ "code1"><tr></span><br />
+ <span class="code1">
+ <td></span>index.html<span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td><img</span> style="<span class="code2">width:
+ 150px; height: 35px;</span>" alt="<span class=
+ "code2">Accueil</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btaccueil.gif</span>"<span class="code1">></td></span><br />
+
+ <span class="code1"></tr></span><br />
+ <br class="code1" />
+ <span class="code1"></tbody></span><br class="code1" />
+ <span class="code1"></table></span>
+ </div>
+ <p>
+ <a id=
+ "decortictableau"></a>décortiquons-le :
+ </p>
+
+ <div class="code">
+ <span class="code1"><table</span> [...] <span class=
+ "code1">></span>
+ </div>
+ <p>
+ Indique le début du tableau<br />
+ <br />
+ </p>
+
+ <div class="code">
+ summary="<span class="code2">exemple de tableau
+ simple</span>"
+ </div>
+ <p>
+ Est l'attribut "summary". Si vous ne savez pas ce que c'est
+ voyez plus haut : <a href="#summary">^</a>
+ </p>
+ <div class="code">
+
+ <span class="code2">text-align: center; width: 400px;</span>"
+ </div>
+ <p>
+ Est le "style" (comme son nom l'indique) du tableau. Il est
+ indiqué ici que le texte est aligné au centre des cellules
+ (les "cases") et que mon tableau fait 400 pixels de
+ large.
+ </p>
+ <div class="code">
+ border="<span class="code2">2</span>"
+ cellpadding="<span class="code2">2</span>"
+ cellspacing="<span class="code2">2</span>"
+ </div>
+
+ <p>
+ Indique que la bordure fera 2 pixels, qu'il y aura 2 pixels
+ entre la bordure et le contenu de chaque cellule et qu'il y
+ aura une marge de 2 pixels entre chacune des cellules.<br />
+ <br />
+ <br />
+ </p>
+ <div class="code">
+ <span class="code1"><tbody></span>
+ </div>
+
+ <p>
+ Tout ce qui va suivre dans cette balise sera <span class=
+ "motcle">le corps</span> du tableau.
+ </p>
+ <div class="code">
+ <span class="code1"><tr></span>
+ </div>
+ <p>
+
+ Tout ce qui va suivre dans cette balise sera <span class=
+ "motcle">une ligne</span> du tableau (une balise <span class=
+ "code1"><tr></span> = une ligne avec un nombre x de
+ colonnes)
+ </p>
+ <div class="code">
+ <span class="code1"><td></span>
+ </div>
+ <p>
+
+ Ceci indique <span class="motcle">une cellule</span>. Ce qui
+ va suivre sera son contenu. Il y a autant de balises
+ <span class="code1"><td></span> par ligne que de
+ colonnes dans votre tableau.
+ </p>
+ <p>
+ Donc :
+ </p>
+ <div class="code">
+ <span class="code1"><tbody></span><br />
+
+ <span class="code1"><br />
+ <tr></span><br />
+ <span class="code1">
+ <td></span>liens.html<span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td><img</span> style="<span class="code2">width:
+ 150px; height: 35px;</span>" alt="<span class=
+ "code2">Liens</span>" src="<span class=
+ "code2">http://ssylvainsab.free.fr/img/boutons/btliens.gif</span>"><span class="code1"></td></span><br />
+
+ <span class="code1"></tr></span>
+ </div>
+ <p>
+ <br />
+ Veut dire : Dans le <span class="motcle">corps du
+ tableau</span> (<span class="code1"><tbody></span>), il
+ y a <span class="motcle">une ligne</span> (<span class=
+ "code1"><tr></span>[...]<span class=
+ "code1"></tr></span>) qui comporte <span class=
+ "motcle">deux cellules</span> (<span class=
+ "code1"><td></span>liens.html<span class=
+ "code1"></td><td></span>[...]<span class=
+ "code1"></td></span>).<br />
+
+ Le contenu de la première cellule est "liens.html" et
+ celui de la deuxième est
+ </p>
+ <div class="code">
+ <span class="code1"><img</span> style="<span class=
+ "code2">width: 150px; height: 35px;</span>" alt="<span class=
+ "code2">Liens</span>" src="<span class=
+ "code2">liens.gif</span>">
+
+ </div>
+ <p>
+ qui veut dire : Il y a ici un image de largeur 150 pixels et
+ de hauteur 35 pixels.<br />
+ Cette image se nomme : liens.gif<br />
+ Si elle ne s'affiche pas, il faut afficher à la place le
+ texte "Liens".
+ </p>
+ <p>
+ donc un tableau est formé comme ceci :
+ </p>
+
+ <div class="code">
+ <span class="code1"><table</span> summary="<span style=
+ "font-style: italic;">Le "thème" de votre tableau</span>"
+ style="<span style="font-style: italic;">La "présentation" de
+ votre tableau(taille...)</span>" [ce que nous avons vu
+ <a href="#decortictableau">plus haut</a>]<span class=
+ "code1">></span> <span style="font-style: italic;">On
+ ouvre le tableau</span> <span class=
+ "code1"><tbody></span><br />
+
+ <span style="font-style: italic;">Le contenu du corps de
+ votre tableau</span><span class="code1"><br />
+ <br />
+ <tr></span><span style="font-style: italic;">Le contenu
+ de la première ligne</span><br />
+ <span class=
+ "code1"><td></span><span style="font-style: italic;">Le
+ contenu de la première cellule</span><span class=
+ "code1"></td></span><br />
+ <span class=
+ "code1"><td></span><span style="font-style: italic;">Le
+ contenu de la deuxième cellule</span><span class=
+ "code1"></td></span><br />
+
+ <span class="code1"></tr></span><span style=
+ "font-style: italic;">On ferme la première ligne</span><br />
+ <p>
+ <br />
+ <br />
+ <span class="code1"><tr></span><span style=
+ "font-style: italic;">Le contenu de la deuxième
+ ligne</span><br />
+ <span class="code1">
+ <td></span><span style="font-style: italic;">Le
+ contenu de la première cellule</span><span class=
+ "code1"></td></span><br />
+
+ <span class="code1">
+ <td></span><span style="font-style: italic;">Le
+ contenu de la deuxième cellule</span><span class=
+ "code1"></td></span><span class="code1"><br />
+ </tr></span><span style="font-style: italic;">On
+ ferme la deuxième ligne</span>
+ </p>
+ <p>
+ <br />
+
+ <span class="code1"><tr></span><span style=
+ "font-style: italic;">etc...</span><br />
+ <span class=
+ "code1"><td></span><span style=
+ "font-style: italic;">etc...</span><span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td></span><span style=
+ "font-style: italic;">etc...</span><span class=
+ "code1"></td></span><br />
+
+ <span class="code1"></tr></span><span style=
+ "font-style: italic;">etc...</span><br />
+ <br class="code1" />
+ <span class="code1"></tbody></span> <span style=
+ "font-style: italic;">On ferme le corps du
+ tableau</span><span class="code1"><br />
+ </table></span><br />
+ <span style="font-style: italic;">On ferme le
+ tableau</span><br />
+
+ </p>
+ </div>
+ <p>
+ <span class="motcle">Vous pouvez ajouter autant de lignes, de
+ colonnes et de celulles que vous voulez :</span> exemple : un
+ tableau à quatre colonnes et deux lignes :
+ </p>
+ <div class="code">
+ <span class="code1"><table</span> [...]<span class=
+ "code1">></span> <span style="font-style: italic;">On
+ ouvre le tableau</span><span class=
+ "code1"><tbody></span><span style=
+ "font-style: italic;"><br />
+
+ Le contenu du corps de votre tableau</span><br />
+ <br />
+ <span class="code1"><tr></span><span style=
+ "font-style: italic;">Le contenu de la première
+ ligne</span><br />
+ <span class=
+ "code1"><td></span><span style="font-style: italic;">Le
+ contenu de la première cellule</span><span class=
+ "code1"></td></span><br />
+ <span class="code1">
+
+ <td></span><span style="font-style: italic;">Le contenu
+ de la deuxième cellule</span><span class=
+ "code1"></td></span> <span class=
+ "code1"> <td></span><span style=
+ "font-style: italic;">Le contenu de la troisième
+ cellule</span><span class="code1"></td></span><br />
+ <span class="code1">
+ <td></span><span style="font-style: italic;">Le contenu
+ de la quatrième cellule</span><span class=
+ "code1"></td></span><br />
+
+ <span class="code1"></tr></span><span style=
+ "font-style: italic;">On ferme la première ligne</span><br />
+ <br />
+ <span class="code1"><tr></span><span style=
+ "font-style: italic;">Le contenu de la deuxième
+ ligne</span><br />
+ <span class=
+ "code1"><td></span><span style="font-style: italic;">Le
+ contenu de la première cellule</span><span class=
+ "code1"></td></span><br />
+ <span class="code1">
+
+ <td></span><span style="font-style: italic;">Le contenu
+ de la deuxième cellule</span><span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td></span><span style="font-style: italic;">Le contenu
+ de la troisième cellule</span><span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ <td></span><span style="font-style: italic;">Le contenu
+ de la quatrième cellule</span><span class=
+ "code1"></td></span><br />
+
+ <span class="code1"></tr></span><span style=
+ "font-style: italic;">On ferme la deuxième ligne</span><br />
+ <br class="code1" />
+ <span class="code1"></tbody></span> <span style=
+ "font-style: italic;">On ferme le corps du
+ tableau</span><span class="code1"></table></span><br />
+ <span style="font-style: italic;">On ferme le tableau</span>
+ </div>
+
+ <p>
+ cela donne :
+ </p>
+ <table summary="exemple de tableau" style=
+ "text-align: left; height: 30%;" border="2" cellpadding="2"
+ cellspacing="2">
+ <tbody style=
+ "font-style: italic; text-transform: capitalize;">
+ <tr>
+ <td>
+ le contenu de la première cellule
+ </td>
+
+ <td>
+ le contenu de la deuxième cellule
+ </td>
+ <td>
+ le contenu de la troisième cellule
+ </td>
+ <td>
+ le contenu de la quatrième cellule
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ le contenu de la première cellule
+ </td>
+ <td>
+ le contenu de la deuxième cellule
+ </td>
+ <td>
+ le contenu de la triosième cellule
+ </td>
+
+ <td>
+ le contenu de la quatrième cellule
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ <br />
+ maintenant je vais vous montrer comment faire un en-tête et
+ un pied à votre tableau (si vous avez bien compris ce que
+ j'ai expliqué avant, ce sera facile) :
+ </p>
+
+ <p>
+ Vous vous souvenez, je vous ai dit :<br />
+ <cite>"</cite>
+ </p>
+ <div class="code">
+ <span class="code1"><tbody></span>
+ </div>
+
+ <p>
+ <cite>Tout ce qui va suivre dans cette balise sera
+ <span class="motcle">le corps</span> du tableau."</cite>
+ </p>
+ <p>
+ eh bien c'est très simple, les en-têtes et les pieds se
+ forment de la même manière que le corps du tableau :<br />
+ il suffit de mettre des balises <span class=
+ "code1"><thead></span>[...]<span class=
+ "code1"></thead></span> (pour l'en-tête) ou
+ <span class="code1"><tfoot></span>[...]<span class=
+ "code1"></tfoot></span> (pour le pied) <span class=
+ "motcle">avant</span> les balises <span class=
+ "code1"><tbody></span>[...]<span class=
+ "code1"></tbody></span>.<br />
+
+ <br />
+ <span style="text-decoration: underline;">La seule chose qui
+ peut paraître illogique, c'est que le pied est placé</span>
+ <span class="motcle">avant le corps dans le code html</span>,
+ mais il apparait <span style="text-decoration: underline;"
+ class="motcle">après dans le tableau</span>. Retenez bien
+ ceci pour ne pas vous tromper.<br />
+ <br />
+ Par exemple, pour le tableau que vous avez vu avant cela
+ donne :
+ </p>
+ <table summary="exemple de tableau simple" style=
+ "text-align: center; width: 400px;" border="2" cellpadding="2"
+ cellspacing="2">
+
+ <thead>
+ <tr>
+ <td>
+ page
+ </td>
+ <td>
+ image
+ </td>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td>
+ liens.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Liens"
+ src="img/boutons/btliens.gif" />
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ news.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="News"
+ src="img/boutons/btnews.gif" />
+ </td>
+ </tr>
+ <tr>
+
+ <td>
+ index.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Accueil"
+ src="img/boutons/btaccueil.gif" />
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>
+ <br />
+ Et le code html est :<br />
+ <br />
+ </p>
+ <div class="code">
+ <span class="code1"><table</span> summary="<span class=
+ "code2">exemple de tableau simple</span>" style="<span class=
+ "code2">text-align: center; width: 400px;</span>"
+ border="<span class="code2">2</span>"
+ cellpadding="<span class="code2">2</span>"
+ cellspacing="<span class="code2">2</span>"><br />
+
+ <span class="code1"><br />
+ <thead><br />
+ <tr></span><br class="code1" />
+ <span class="code1">
+ <td></span>page<span class=
+ "code1"></td></span><br class="code1" />
+
+ <span class="code1">
+ <td></span>image<span class=
+ "code1"></td></span><br class="code1" />
+ <span class="code1">
+ </tr></span><span class="code1"><br />
+ </thead><br />
+ <br />
+
+ <tbody></span><br />
+ <span style="font-style: italic;">Contenu du
+ tableau</span><br />
+ <span class="code1"></tbody></span><br class="code1" />
+ <span class="code1"><br />
+ </table></span>
+ </div>
+ <p>
+
+ <br />
+ <br />
+ Vous pouvez choisir ce que vous voulez faire : avec/sans
+ : pied/en-tête.<br />
+ avec un pied le code aurait été :<br />
+ <br />
+ </p>
+
+ <div class="code">
+ <span class="code1"><table</span> [...]><br />
+ <span class="code1"><br />
+ <tfoot><br />
+ <tr></span><br class="code1" />
+ <span class="code1">
+
+ <td></span>page<span class=
+ "code1"></td></span><br class="code1" />
+ <span class="code1">
+ <td></span>image<span class=
+ "code1"></td></span><br />
+ <span class="code1">
+ </tr></span><span class="code1"><br />
+
+ </tfoot><br />
+ <br />
+ <tbody></span><br />
+ <span style="font-style: italic;">Contenu du
+ tableau</span><br />
+ <span class="code1"></tbody></span><br class="code1" />
+ <span class="code1"><br />
+ </table></span><br />
+
+ </div>
+ <table summary="exemple de tableau simple" style=
+ "text-align: center; width: 400px;" border="2" cellpadding="2"
+ cellspacing="2">
+ <tfoot>
+ <tr>
+ <td>
+ page
+ </td>
+ <td>
+ image
+ </td>
+
+ </tr>
+ </tfoot>
+ <tbody>
+ <tr>
+ <td>
+ liens.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Liens"
+ src="img/boutons/btliens.gif" />
+
+ </td>
+ </tr>
+ <tr>
+ <td>
+ news.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="News"
+ src="img/boutons/btnews.gif" />
+ </td>
+
+ </tr>
+ <tr>
+ <td>
+ index.html
+ </td>
+ <td>
+ <img style="width: 110px; height: 36px;" alt="Accueil"
+ src="img/boutons/btaccueil.gif" />
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+ <p>
+ <br />
+ Ca ne sert pratiquement à rien, mais je vous le dis quand
+ même : vous pouvez mettre autant de pied/en-tête que vous
+ voulez. Par contre, seul le premier "pied" sera considéré
+ comme tel(sera placé en bas du tableau). Les autres seront
+ considérés comme des en-têtes(en haut du tableau).
+ </p>
+ <p>
+ ah mais au fait, a quoi ca sert d'utiliser des en-têtes et
+ des pieds, on aurait pu utiliser des lignes normales,
+ c'aurait été pareil!<br />
+ <br />
+
+ Pas tout à fait : avec les balises "thead" et "tfoot" :
+ </p>
+ <ul>
+ <li>Votre code est mieux organisé, c'est plus facile de s'y
+ retrouver
+ </li>
+ <li>Si vous mettez des lignes à la place, si vous voulez
+ ajouter une ligne à votre tableau, vous devrez faire bien
+ attention à ne pas l'ajouter avant les en-têtes ou pieds de
+ page, alors qu'avec ceci, la ligne se mettra au bon endroit.
+ </li>
+ <li>Avec le CSS, vous pouvez faire un style différent aux
+ en-tête, pieds de pages et corps du tableau.
+ </li>
+ </ul>
+ <h2>
+
+ <a id="astuces"></a>astuces
+ </h2>
+ <h4>
+ <a id="favicon"></a>mettre une favicône sur
+ son site
+ </h4>
+ <p>
+ Sur certains sites, peut-être avez vous remarqué
+ une <span class="motcle">petite image</span> à gauche de
+ l'url(et de l'onglet dans firefox) :
+ </p>
+ <table style="margin: 2.5%;" border="0" cellpadding="2"
+ cellspacing="2">
+
+ <tbody>
+ <tr>
+ <td>
+ favicône :
+ </td>
+ <td>
+ <img style="width: 262px; height: 22px;" alt=
+ "S http://ssylvainsab.free.fr/index.html .\" src=
+ "img/autres/bafavrss.jpg" />
+ </td>
+ </tr>
+
+ </tbody>
+ </table>
+ <p>
+ Par exemple quand vous surfez sur les pages de mon site, vous
+ voyez : <img class='16' alt="::" title="C'est la favicône de mon site" src="/img/mini/favicon.png" />.
+ Cette image s'apelle une "<em>favicône</em>". C'est pratique pour repérer quel
+ onglet correspond à quel site.<br />
+ Vous en voulez une sur votre site?
+ </p>
+ <p>
+ Voici les étapes à suivre pour mettre un favicône sur votre site :
+ </p>
+ <ol>
+ <li>Créez une image aux dimensions 16 pixels sur 16 pixels
+ (environ) (avec paint : menu image puis attributs)
+ </li>
+ <li>Enregistrez-la sous le nom "favicon.ico"
+ </li>
+ <li>Deposez-la à la racine de votre site
+ </li>
+ <li>C'est tout ! Dorénavant les visiteurs qui iront sur votre
+ site verront cette favicône.
+ </li>
+
+ </ol>
+ <p>
+ Notez que si vous ne déposez pas la favicone a la racine de
+ votre site, vous devrez indiquer son emplacement dans chaque
+ page pour qu'elle s'affiche, en faisant de cette facon
+ :<br />
+ Dans les balises <span class="code1"><head></span> de
+ votre page, mettez le code suivant : <<span class=
+ "code1">link</span> rel="<span class="code2">shortcut
+ icon</span>" href="<span class="code2">emplacement de votre
+ favicone</span>">.
+ </p>
+
+ <p>
+ Vous pouvez également utiliser plusieurs favicones sur des
+ pages différentes pour votre site, en changeant l'emplacement
+ de la favicone.
+ </p>
+ <p>
+ Il existe un validateur pour les favicones : <a href=
+ "http://www.html-kit.com/favicon/validator/">http://www.html-kit.com/favicon/validator/</a>
+ </p>
+ <p>
+ voyez aussi : <a href=
+ "http://www.commentcamarche.net/faq/sujet-332">http://www.commentcamarche.net/faq/sujet-332</a>
+
+ <a href=
+ "http://www.xhtml.net/xhtmlcss/favicon">http://www.xhtml.net/xhtmlcss/favicon</a>
+ </p>
+ <hr />
+ <h4>
+ <a id="iconrss"></a>mettre une icône signalant
+ la préscence d'un flux RSS sur son site
+ </h4>
+ <p>
+ sur certains sites, vous avez sans doute remarqué la présence
+ de <span class="motcle">l'image</span> <img style=
+ "width: 16px; height: 16px;" alt="RSS" title=
+ "Cette image a droite de l'url signale un flux RSS." src=
+ "img/mini/minirss.png" />, située à droite de l'url et
+ signalant un <span class="motcle">flux RSS</span> sur le
+ site. Vous aimeriez bien faire pareil ?
+ </p>
+
+ <table style="margin: 2.5%;" border="0" cellpadding="2"
+ cellspacing="2">
+ <tbody>
+ <tr>
+ <td>
+ <img style="width: 262px; height: 22px;" alt=
+ "S http://ssylvainsab.free.fr/index.html .\" src=
+ "img/autres/bafavrss.jpg" />
+ </td>
+ <td>
+ Icône signalant un flux RSS
+ </td>
+
+ </tr>
+ </tbody>
+ </table>
+ <p>
+ C'est très simple :<br />
+ Une fois que vous avez <span class="motcle">créé votre flux
+ RSS</span>, mettez le <span class="motcle">code html</span>
+
+ </p>
+ <div class="code">
+ <span class="code1"><link</span> rel="<span class=
+ "code2">alternate</span>" type="<span class=
+ "code2">application/rss+xml</span>" title="<span style=
+ "font-style: italic;" class="code2">Titre de votre
+ flux</span>" href="<span style="font-style: italic;" class=
+ "code2">Emplacement de votre flux</span>">
+
+ </div>
+ <p>
+ <br />
+ entre les balises <span class="code1"><head></span> et
+ <span class="code1"><head></span> de la page/des pages
+ ou vous souhaitez voir cette image.
+ </p>
+ <p>
+
+ exemple : sur ma page d'accueil, j'ai indiqué le code
+ suivant :
+ </p>
+ <div class="code">
+ <span class="code1"><link</span> rel="<span class=
+ "code2">alternate</span>" type="<span class=
+ "code2">application/rss+xml</span>" title="<span class=
+ "code2">Les news de Ssylvainsab par flux RSS</span>"
+ href="<span class="code2">rss/rss.xml</span>"<span class=
+ "code1">></span>
+
+ </div>
+ <p>
+ cependant attention : il faut <span class="motcle">mettre ce
+ code sur chaque page ou vous voulez voir cette image.</span>
+ Sur ce site je l'ai mis sur la <span class="motcle">page
+ d'acccueil, les news et la page du flux.</span>
+ </p>
+ <h2>
+ <a id="retenir"></a>a retenir pour vos pages :
+ </h2>
+
+ <p>
+ vous pouvez regarder le code sources des pages des autres
+ sites. C'est assez instructif.
+ </p>
+ <p>
+ Pour les images sur internet, n'utilisez que les formats
+ .gif,(pour les dessins sans trop de nuances) .png(pour les
+ dessins) ou .jpg(pour les photos). Les autres formats sont
+ trop lourds ou pas adaptés.
+ </p>
+ <p>
+ Utilisez les attributs "alt" pour vos images et "summary"
+ pour vos tableaux. Sinon vos pages ne seront pas
+ valides(<a href="http://www.w3.org/">http://www.w3.org/</a>).
+ </p>
+
+ <p>
+ respectez les standards du WEB (<a href=
+ "http://www.w3.org/">http://www.w3.org/</a>)
+ </p>
+ <p>
+ si vous le pouvez, utilisez le logiciel <a href=
+ "logiciels/tidy.php">TidyGUI</a> pour vérifier vos pages
+ avant de les mettre en ligne.
+ </p>
+ <p>
+
+ L'extension <a href=
+ "logiciels/firefox.php#webdeveloper">WebDeveloper</a> pour
+ Firefox est très pratique : elle vous permet de vérifier vos
+ fichiers CSS, html, rss.... et bien d'autres choses.
+ </p>
+ <p>
+ validez vos pages avant de les mettre en ligne :
+ </p>
+ <p>
+ les validateurs :
+ </p>
+ <ul>
+
+ <li>html : <a href=
+ "http://validator.w3.org">http://validator.w3.org/</a>
+ </li>
+ <li>css : <a href=
+ "http://jigsaw.w3.org/css-validator/">http://jigsaw.w3.org/css-validator/</a>
+ </li>
+ <li>rss : <a href=
+ "http://validator.w3.org/feed/">http://validator.w3.org/feed/</a>
+ </li>
+
+ <li>xml, rdf, sitemap : <a href=
+ "http://www.w3.org/RDF/Validator/">http://www.w3.org/RDF/Validator/</a>
+ </li>
+ <li>favicône : <a href=
+ "http://www.html-kit.com/favicon/validator/">http://www.html-kit.com/favicon/validator/</a>
+ </li>
+ </ul>
+<?php require'autres/source-bas.php'?>
blob - /dev/null
blob + 0c41da62c2b691ea5135169c231dc6f32345bfd3 (mode 644)
--- /dev/null
+++ index.php
+<?php
+$titre='Flux RSS';
+require'../autres/source-haut.php'?>
+<p>Le flux RSS est a l'adresse : <a href="rss.xml">rss.xml</a></p>
+<p>
+ Pour s'abonner a ce flux, il suffit de cliquer sur l'icône
+ <img class="t16" alt="RSS" src="/img/mini/minirss.png" /> à droite de l'url,
+ ou de marquer l'url : <a href="http://sylvain.sab.free.fr/rss/rss.xml">http://sylvain.sab.free.fr/rss/rss.xml</a>
+ dans votre lecteur de flux.
+</p>
+<p>
+ Vous pouvez également vérifier sa validité :
+ <a title="Le Flux RSS 2.0 de ce site est valide" href="http://validator.w3.org/feed/check.cgi?url=http://sylvain.sab.free.fr/rss/rss.xml">
+ <img style="width:80px;height:15px;" alt="W3C RSS 2.0" src="/img/valide/w3crss.gif" /></a>
+</p>
+<p>Les News : <a href="../news.php">news.php</a></p>
+<p>
+ Vous pouvez aussi regarder une vidéo (588 Ko) qui explique comment gérer les Flux RSS avec Firefox :
+ <a href="/temp/?video=firefoxrss">/temp/?video=firefoxrss</a>
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + e82ad30e8bff7e62714cbb7ad1a8ddde1507451b (mode 644)
--- /dev/null
+++ liens.php
+<?php
+$head['css'][0]['filename']='liens';
+$head['autres']='<link rel="alternate" type="application/rss+xml" title="Del.icio.us - Sylvain.sab" href="http://del.icio.us/rss/Ssylvainsab/" />'."\n\t".
+ '<meta http-equiv="robots" content="none" />';
+$titre='Liens';
+require'autres/source-haut.php';?>
+<h1>Liens</h1>
+<hr />
+<p>Je suis inscrit au service "del.icio.us".<br />Ce service permet de partager ses marques pages avec tout le monde.
+ Vous pouvez voir mes marques-pages de différentes façons :</p>
+<ol><li>Directement depuis del.icio.us (mise à jour en temps réel) : <a href="http://del.icio.us/ssylvainsab/">http://del.icio.us/ssylvainsab/</a></li>
+ <li>Depuis le flux RSS de del.icio.us (mise à jour en temps réel également) :
+ <a href="http://del.icio.us/rss/ssylvainsab/">http://del.icio.us/rss/ssylvainsab/</a></li>
+ <li>Sur une seule page (crée avec le programme Delxml2html), mise à jour de temps en temps :
+ <a href="/pages/">http://sylvain.sab.free.fr/pages/</a></li></ol>
+<p>Pour utiliser le programme delxml2html, voir la page <a href="/delxml/">Utiliser le programme delxml2html.</a></p>
+<hr />
+<p class="quevoir">
+ Quels liens voulez-vous voir ?<br />
+ || <a href="#securite">Securité</a> || <a href="#informatique">Informatique</a> || <a href="#telecharger">Télécharger / Logiciels</a> || <a href="#siteprog">Site WEB / Programmation</a> || <a href='#multimedia'>Multimedia</a> || <a href="#images">Images - Dessin - Graphisme</a> || <a href='#recherche'>Recherche</a> || <a href="#divers">Divers</a> || <a href="#liens">Liens</a> ||</p>
+<hr /><?php
+
+if(isset($_GET['nocss']))
+{
+ function callback_liens($page)
+ {
+ return preg_replace('#<em>(.+)</em>#sU','<br /><em>$1</em><br />',$page);
+ }
+ ob_start('callback_liens');
+ echo'<p><a href="',$_SERVER['PHP_SELF'],'">Cliquez ici pour revenir à l"affichage normal avec CSS.</a></p><hr />';
+}
+else echo'<div style="display:none"><p><a href="',$_SERVER['PHP_SELF'],'?nocss">Vous n\'avez pas activé les CSS ? Cliquez ici pour voir les liens normalement.</a></p><hr /></div>';
+?>
+<!--S E C U R I T E-->
+<div id="securite">
+<h2>Securité</h2>
+ <h3>Documentation</h3>
+ <p class="liste">
+ <em><a class="fr externe" href="http://www.claymania.com/safe-hex-fr.html">Claymania</a> :</em>
+ Savoir se protéger contre les virus.
+
+ <em><a class="externe fr" href="http://assiste.free.fr/">Assiste</a> :</em>
+ Documentation et explications sur les logiciels malveillants.
+
+ <em><a class="externe fr" href="http://www.sebsauvage.net/safehex.html">Safe-hex - Sébastien sauvage</a> :</em>
+ Les recommandations de Sébastien Sauvage.
+
+ <em><a class="externe fr" href="http://abcdelasecurite.free.fr/site-abc-de-la-securite/">Abc de la sécurité</a> :</em>
+ Plusieurs reccommandations utiles.
+ </p>
+ <h3>Test de fichiers</h3>
+ <p class="liste">
+ <em><a class="externe en" href="http://www.eicar.org/anti_virus_test_file.htm">Eicar antivirus test file</a> :</em>
+ Téléchargez un des fichiers, puis analysez le avec votre antivirus. Il devrait reconnaitre un virus. (faux bien sur)
+
+ <em><a class="externe en" href="http://virusscan.jotti.org/">Online Malware Scan</a> :</em>
+ Si vous avez un doute sur un fichier, vous pouvez le scanner avec 14 antivirus différents.
+ <em><a class="externe en" href="http://www.virustotal.com/en/virustotalx.html">VirusToal</a> :</em>
+ La même chose, mais avec 25 antivirus !
+
+ <em><a href="http://www.cryptodox.com/" class="en externe wiki">CryptoDox</a> :</em>
+ Un wiki sur la cryptographie.
+ </p>
+
+ <h3>Espionnage</h3>
+ <p class="liste">
+ <span class="groupe">Pour voir comme il est facile de connaitre des informations sur vous (souvent via des variables php).<br />
+ <a class="externe fr" href="http://www.actulab.com/big-brother-vous-observe.php">http://www.actulab.com/big-brother-vous-observe.php</a><br />
+ <a class="externe fr" href="http://www.adresseip.com/">http://www.adresseip.com/</a><br />
+ <a href="http://abcdelasecurite.free.fr/site-abc-de-la-securite/variables-informations-adresse-ip.php"
+ class="fr externe">http://abcdelasecurite.free.fr/[...]variables-informations-adresse-ip.php</a><br />
+ <a class="externe fr" href="http://www.monip.net/">http://www.monip.net/</a><br />
+ <a class="externe en" href="http://www.dnsstuff.com/tools/aboutyou.ch">http://www.dnsstuff.com/tools/aboutyou.ch</a></span>
+ </p>
+</div>
+
+<!--I N F O R M A T I Q U E-->
+<div id="informatique">
+<h2>Informatique</h2>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.siteduzero.com">Le Site du zér0</a> :</em>
+ De bons tutoriels pour apprendre plusieurs choses sur l"informatique.
+
+ <em><a class="externe fr" href="http://www.sebsauvage.net/">Sebsauvage.net</a> :</em>
+ Un excellent site sur l"informatique. L"auteur est un adepte de python, il y a plein de scripts intéressants.
+
+ <em><a class="externe fr" href="http://www.commentcamarche.net/">Comment Ca Marche</a> :</em>
+ Beaucoup d"explications sur l"informatique en général.
+ Tout le monde peut agrandir la base de connaissances et aider sur les forums, il suffit de s"y inscrire.<br />J"y participe régulièrement.<br />
+ Sebsauvage a également archivé la <a class="externe fr" href="http://sebsauvage.net/temp/ccmfaq/">Base de connaissance Comment Ca marche :</a>
+
+ <em><a class="externe fr" href="http://www.info-3000.com/">Info-3000</a> :</em>
+ Quelques astuces et explications utiles.
+
+ <em><a class="externe fr" href="http://www.webarck.com/">WebArck</a> :</em>
+ Un site avec des tutoriels et explications pour les Webmasters débutants.
+
+ <em><a class="externe fr" href="http://perso.orange.fr/jesses/">Jesses Entraide</a> :</em>
+ Un site plein d"explications pour les débutants.
+
+ <em><a class="externe fr wiki" href="http://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Informatique">Wikipédia - Catégorie informatique</a> :</em>
+ La rubrique Informatique de Wikipedia. Vous pouvez y contribuer sans vous inscrire.
+
+ <em><a class="externe fr" href="http://www.aide-informatique.org/">Aide-Informatique</a> :</em>
+ Comme le nom l"indique...
+
+ <em><a class="externe fr" href="http://leregistre-fr.net/">Leregistre-fr</a> :</em>
+ Comprendre ce qu"est le registre et le modifier.
+
+ <em><a class="externe fr" href="http://logiciellibre.free.fr/">Logiciel Libre</a> :</em>
+ Un site sur l"informatique, nottament les logiciels libres.
+
+ <em><a class="externe fr" href="http://a.vouillon.online.fr/faq-winxp.htm">FAQ Windows XP</a> :</em>
+ Une <abbr title="Foire Aux Questions"><span>FAQ</span></abbr> sur Windows XP.
+ Il existe également <a href="http://www.faqoe.com/">une <abbr title="Foire Aux Questions"><span>FAQ</span></abbr>
+ sur outlook express</a>, et <a href="http://www.kellys-korner-xp.com/xp_tweaks.htm">des astuces pour optimiser Windows</a>.
+ </p>
+</div>
+
+<!--T E L E C H A R G E R-->
+<div id="telecharger">
+<h2>Télécharger / Logiciels</h2>
+ <h3>Liste de sites</h3>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.liensutiles.org/logiciels.htm">Liens utiles.org</a></em>
+ Une liste de sites ou télécharger des fichiers et logiciels.
+
+ <span class="groupe"><em>Sites dédiés au téléchargement :</em>
+ <a class="externe fr" href="http://www.01net.com/">01net.com</a><br />
+ <a class="externe fr" href="http://www.gratilog.net/">Gratilog</a><br />
+ <a class="externe fr" href="http://telecharger.yacapa.com/">télécharger.Yacapa</a><br />
+ <a class="externe fr" href="http://www.clubic.com/download/">Clubic.com</a></span>
+
+ <span class="groupe"><em>Des forums dédiés aux logiciels gratuits :</em>
+ <a class="externe fr" href="http://www.koreus.com/modules/newbb/topic250-3.html">Koreus.com</a><br />
+ <a class="externe fr" href="http://www.3dchips-fr.com/forum/showthread.php?threadid=59147">3D Chips</a><br />
+ <a class="externe en" href="http://www.photoshophow.com/freeware.htm">Photoshopow</a><br />
+ <a class="externe fr" href="http://www.presence-pc.com/forum/ppc/Logiciels/2005-sujet-7937-1.htm">Presence-pc.com</a></span>
+
+ <span class="groupe"><em>Des Sites de logiciels open-source et/ou gratuits :</em>
+ <a class="externe en" href="http://www.concisefreeware.com/">Concise Freeware</a><br />
+ <a class="externe fr" href="http://loliwin.org/">LoLiWin</a><br />
+ <a class="externe en" href="http://www.nirsoft.net/">NirSoft/</a><br />
+ <a class="externe en" href="http://www.freewarefind.com/">Freeware Find</a><br />
+ <a class="externe fr" href="http://www.framasoft.net/">Framasoft</a><br />
+ <a class="externe fr" href="http://gnuwin.epfl.ch/fr/index.html">GNUWin</a><br />
+ <a class="externe fr" href="http://jesuislibre.org/">Je Suis Libre</a><br />
+ <a class="externe en" href="http://www.pricelessware.org/thelist/index.htm">Pricelessware</a></span>
+ </p>
+ <h3>Logiciels</h3>
+ <p class="liste">
+ <em><a href="http://www.anappaday.com/" class="en externe">An App A Day</a> :</em>
+ Waow ! Cette personne fait un logiciel par jour.
+
+ <em><a class="externe en" href="http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx">Microsoft Powertoys</a> :</em>
+ Plusieurs utilitaires pour Windows
+
+ <em><a href="http://osswin.sourceforge.net/" class="externe en">The OSSwin project : Open Source for Windows !</a> :</em>
+ Une liste de projets (logiciels entre autres) open-source pour Windows.
+
+ <em><a class="externe en" href="http://www.theorica.net/safexp.htm">Safe XP</a> :</em>
+ Un programe similaire à TweakUI, qui permet de manipuler Windows.
+
+ <em><a class="externe en" href="http://portableapps.com/">PortableApps</a> :</em>
+ Le site des logiciels portables. Plusieurs logiciels habituels (firefox, vlc, gimp...)
+ qui ne nécéssitent pas d"installation pour fonctionner et permettent d"être transportés sur clé USB
+ </p>
+</div>
+
+<!--S I T E W E B-->
+<div id="siteprog">
+<h2>Site WEB / Programmation</h2>
+ <h3>Site WEB</h3>
+ <h4>Débuter</h4>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.siteduzero.com/tuto-3-6-0.html">Tutoriel - le Site du zér0</a> :</em>
+ Un tutoriel Ultra complet pour apprendre le xhtml et les CSS.
+
+ <em><a class="externe fr" href="http://www.siteduzero.com/tuto-3-20-1.html">Tutoriel PHP - Le Site du zér0</a> :</em>
+ Le même site et la même chose, mais sur le PHP.
+
+ <em><a class="externe fr" href="http://sebsauvage.net/html.html">Sebsauvage.net - Conseils HTML</a> :</em>
+ Les conseils de Sébastien Sauvage, ce qu"il faut éviter dans ses pages.
+
+ <em><a class="externe fr" href="http://www.startyourdev.com/">StarYouDev</a> :</em>
+ Tutoriels sur les différents langages du WEB.
+ </p>
+
+ <h4>Les standards, l"accessibilité</h4>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.openweb.eu.org/">Open WEB</a> :</em>
+ Un site sur les standards du WEB.
+
+ <em><a class="externe fr" href="http://pompage.net/">Pompage.net</a> :</em>
+ Des articles sur les standards du WEB.
+
+ <em><a class="externe fr" href="http://alsacreations.com/">Alsacreations</a> :</em>
+ Plusieurs tutoriels sur les standards, l"accessibilité, etc...
+
+ <em><a class="externe en" href="http://tjkdesign.com/" hreflang="en">Building Standards Compliant WebSites</a> :</em>
+ Un site qui aide a respecter les standards du WEB.
+
+ <em><a class="externe en" href="http://www.vischeck.com/vischeck/vischeckURL.php">VisCheck</a> :</em>
+ Ce site permet de voir ce que verrait un daltonien en visitant un autre site : il change les couleurs.
+ Utile pour vérifier l"accessibilité de votre site.
+ </p>
+
+ <h4>Outils et ressources</h4>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.freeguppy.org/">Guppy</a> :</em>
+ Guppy est un <abbr title=""Content Management System", ou "Système de Gestion de Contenu"">CMS</abbr> libre.
+ Il vous permet de créér un site complet (zone membre, flux rss, etc...) sans rien connaitre au html ou php.<br />
+ Il existe plusieurs autres CMS :
+ <a class="externe fr wiki" href="http://fr.wikipedia.org/wiki/Liste_de_syst%C3%A8mes_de_gestion_de_contenu">Wikipedia : Liste des CMS</a>
+
+ <em><a class="externe fr" href="http://xhtmlcsskits.xooit.net/base.html">Editeur en ligne</a> :</em>
+ Génial. Cette page propose un éditeur xhtml/css/JS, avec des balises à portée de main,
+ des CSS spécial IE, et surtout un apercu en direct dans un pop-up.
+
+ <em><a class="externe en" href="http://dynamicdrive.com/">Dynamic Drive</a> :</em>
+ Plusieurs outils en ligne utiles. Création de gradients, optimisation d"images, etc...
+
+ <em><a class="externe en" href="http://www.websiteoptimization.com/">Web Site Optimization</a> :</em>
+ Plusieurs outils pour optimiser son site.
+
+ <em><a class="externe en" href="http://www.listible.com/list/online-tools2C-generators2C-checkers">Listible</a> :</em>
+ Des dizaines d"outils pour les Webmasters.
+
+ <em><a href="http://www.cdburnerxp.se/cssparse/css_optimiser.php" class="fr externe">CSS Formateur et Optimiseur</a> :</em>
+ Un excellent outil pour les CSS. Votre code CSS est compréssé au maximum.
+
+ <em><a href="http://www.smashingmagazine.com/" class="en externe">Smashing Magazine</a> :</em>
+ Une liste importante d"outils en tous genres.
+
+ <em><a href="http://www.aptana.com/" class="en externe">Aptant</a> :</em>
+ Un logiciel de dévelopement WEB intéressant.
+
+ <em><a href="http://www.devpro.it/" class="en externe">DEVPRO</a> :</em>
+ Plusieurs bouts de scripts/codes php, xhtml, css, etc...
+ </p>
+
+ <h4>Les validateurs</h4>
+ <p class="liste">
+ <em><a href="http://validator.w3.org/" class="en externe">The W3C Markup Validation Service</a></em>
+ Le validateur xhtml, html, etc officiel.
+
+ <em><a href="http://www.validome.org/" class="fr externe">Validome</a> :</em>
+ Un excellent validateur xhtml, html, etc bien meilleur que l"officiel. C"est le plus strict que je connaisse.
+
+ <em><a href="http://validateur.ca/" class="fr externe">Validateur W3C Multipage pour une validation de site WEB</a> :</em>
+ Un validateur qui valide toutes les pages de votre site (maximum 300) à la fois. Il utilies le validateur du W3C.
+
+ <em><a href="http://jigsaw.w3.org/css-validator/" class="externe fr">Le service de validation CSS du W3C</a> :</em>
+ Le validateur officiel du CSS.
+
+ <em><a href="http://validator.w3.org/feed/" class="en externe">W3C Feed Validation Service</a> :</em>
+ Le validateur officiel de flux RSS ou Atom.
+
+ <em><a href="http://www.w3.org/RDF/Validator/" class="externe fr">W3C RDF Validation Service</a> :</em>
+ Le validateur officiel de fichiers RDF.
+
+ <em><a href="http://validateur-accessibilite.apinc.org/" class="fr externe">Validateur d"accessibilité</a> :</em>
+ Pour vérifier le niveau d"accessibilité de vos pages.
+ </p>
+
+ <h4>Autres</h4>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.kits-gratuits.net/">Kits-Gratuits</a> :</em>
+ Plusieurs logiciels pour réaliser un site en html-css.
+
+ <em><a class="externe fr" href="http://developer.mozilla.org/fr/docs/Accueil">MDC</a> :</em>
+ La rubrique "dévellopeurs" de la société Mozilla.
+
+ <em><a class="externe en" href="http://www.pmob.co.uk/">CSS examples</a> :</em>
+ Beaucoup d"exemples de l"utilisation possible des CSS.
+
+ <em><a class="externe fr" href="http://www.toutjavascript.com/main/index.php3">Tout JavaScript</a> :</em>
+ Des tutoriaux sur le JavaScript.
+
+ <em><a class="en externe" href="http://friendlybit.com/">Friendly Bit</a> :</em>
+ Plusieurs outils, ressources et articles intéressants et utiles (une liste complète des balises xhtml)
+
+ <em><a class="en externe" href="http://www.culturedcode.com/css/reference.html">Properties CSS 2.1</a> :</em>
+ Une liste des propriétés CSS 2.1, leurs caractéristiques, leurs compatibilités, etc...
+
+ <em><a href="http://www.cssplay.co.uk/" class="en externe">CSS Play</a> :</em>
+ Plusieurs tests très poussés avec les CSS.
+
+ <em><a href="http://clb56.fr/" class="fr externe">clb56 - Tests en développement WEB</a> :</em>
+ Des tests intéressants avec php, javascript et CSS.
+
+ <em>Quelques autres sites intéressants :</em>
+ <a class="externe fr" href="http://www.uris-rhone-alpes.org/GestionSite/">http://www.uris-rhone-alpes.org/GestionSite/</a><br />
+ <a class="externe fr" href="http://richard.geneva-link.ch/">http://richard.geneva-link.ch/</a><br />
+ <a class="externe fr" href="http://xhtml.css.free.fr/">XHTML / CSS</a><br />
+ <a class="externe en" href="http://websitetips.com/">WebSite Tips</a>
+ </p>
+
+ <h3>Programmation</h3>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.developpez.com/">Dévellopez.com</a> :</em>
+ Une bibliothèque de tutoriels sur les différents langages (du web, mais aussi de programmation).
+
+ <em><a class="externe fr" href="http://www.delphifr.com/">DelphiFR</a> :</em>
+ Des articles sur la programmation.
+
+ <em><a href="http://osflash.org/" class="en externe">Open Source Flash</a> :</em>
+ Un projet open-source par des dévelopeurs flash.
+ </p>
+</div>
+
+<!--M U L T I M E D I A-->
+<div id="multimedia">
+<h2>Multimedia</h2>
+ <p class="liste">
+ <em><a href="http://media-convert.com/convertir/" class="fr externe">Media-Convert</a> :</em>
+ Un convertisseur de fichiers en ligne. Des dizaines de formats sont supportés.
+
+ <em><a href="http://www.zamzar.com/" class="externe en">Zamzar - Free online Conversion</a> :</em>
+ Un autre convertisseur de fichiers.
+
+ <em><a href="http://www.peertv.fr/" class="fr externe">PeerTV</a></em>
+ Plusieurs chaînes de télévision à regarder sur internet.
+ </p>
+</div>
+<!--I M A G E S-->
+<div id="images">
+<h2>Images - Dessin - Graphisme</h2>
+ <h3>Icônes/Mini-bannières</h3>
+ <p class="liste">
+ <em><a class="externe en" href="http://www.famfamfam.com/">famfamfam.com</a> :</em>
+ Des centaines d"icones au format 16x16
+
+ <em><a href="http://www.ndesign-studio.com/resources/mini-pixel-icons/" class="en externe">Mini Pixels Icons</a> :</em>
+ Une autre librairie d"icônes 16x16.
+
+ <em><a href="http://sweetie.sublink.ca/" class="en externe">Sweetie | Free icon set</a> :</em>
+ Plus de 150 icones.
+
+ <em><a class="externe de" href="http://www.publicons.de/">Publicons.de</a> :</em>
+ Beaucoup de mini-bannières au format 80x15.
+
+ <em><a class="externe en" href="http://tiny.media.mit.edu/">Tiny icon factory</a> :</em>
+ Créez des icônes et ajoutez à la liste des milliers d"autres.
+
+ <em><a class="externe en" href="http://homeusers.brutele.be/jpbardiau/">Jpbardiau</a> :</em>
+ Un site excellent : de superbes images.
+
+ <em><a class="externe en" href="http://www.mouserunner.com/">mouse runner.com</a> :</em>
+ Le propriétaire de ce site crée et distribue gratuitement ses images.
+ </p>
+
+ <h3>Plusieurs images,icônes et logos créés par des particuliers</h3>
+ <p class="liste">
+ <a class="externe fr" href="http://customxp.net/">CustomXP.net</a><br />
+ <a class="externe en" href="http://www.wincustomize.com/">Wincustomize</a><br />
+ <a class="externe fr" href="http://www.linuxgraphic.org/">LinuxGraphic</a><br />
+ <a class="externe en" href="http://www.deviantart.com/">Deviantart</a><br />
+ <a class="externe en" href="http://www.basehead.org/">Basehead</a><br />
+ <a class="externe fr" href="http://www.crystalxp.net/">CrystalXP</a><br />
+ <a class="externe fr" href="http://www.iconaholic.com/">IconAholic</a>
+ </p>
+
+ <h3>Outils</h3>
+ <p class="liste">
+ <em><a href="http://www.colorjack.com/studio/" class="externe en">Colorjack : Color generator</a> :</em>
+ Une palette de couleurs sophitiquée.
+
+ <em><a href="http://www.easyrgb.com/math.php" class="en externe">Easy RGB</a> :</em>
+ Plusieurs outils pour faire de la conversion de couleurs : hexadécimal vers RGB, etc...
+
+ <em><a class="externe en" href="http://buttonator.com/">Buttonator</a> :</em>
+ Crééz rapidement des boutons, en choisissant la couleur, la taille, etc...<br />
+
+ <em><a class="externe en" href="http://cooltext.com/">Cool Text :</a></em>
+ Idem
+
+ <em><a class="externe en" href="http://ajaxload.info/">Ajaxload</a> :</em>
+ Permet de créer de petites images animées.
+
+ <em><a class="externe en" href="http://www.customsigngenerator.com/">Custom Sign Generator</a> :</em>
+ Permet de générer des images.
+
+ <em><a class="externe en" href="http://www.lucazappa.com/brilliantMaker/buttonImage.php">Brilliant Button Maker</a> :</em>
+ Permet de faire un bouton au format 80x15 pixels.
+ </p>
+
+ <h3>Autres</h3>
+ <p class="liste">
+ <em><a class="externe en" href="http://web.okaygo.co.uk/apps/scratchpad/flashcom/">ScratchPad</a> :</em>
+ Vous pouvez dessiner avec plusieurs personnes dans un cadre.
+
+ <em><a class="fr" href="/logos/">Logos - Sylvain.sab</a> :</em>
+ La page logos de mon site. Vous y trouverez beaucoup d"images.
+
+ <em><a class="externe en" href="http://gug.sunsite.dk/?page=tutorials">[GUG] Tutorials</a> :</em>
+ Des tutoriels pour apprendre à utiliser The Gimp (le "clone" open source de Photoshop).
+ </p>
+</div>
+
+<!--RECHERCHE-->
+<div id="recherche">
+<h2>Recherche</h2>
+ <p class="liste">
+ <em><a class="externe en" href="http://www.blackboxsearch.com/">BlackBox Search</a> :</em>
+ Ce site sert d"intermédiaire entre vous et les moteurs de recherche en les empêchant d"enregistrer vos requêtes.
+
+ <em><a class="externe en" href="http://www.turboscout.com/">TurboScout</a> :</em>
+ Ce moteur de recherche utilise plusieurs autres moteurs existants (Yahoo, google, msn....), ce qui permet d"en changer rapidement.
+
+ <em><a class="externe en" href="http://dearcomputer.nl/gir/">Google Image Ripper</a> :</em>
+ Lorsque vous trouvez une image qui vous interesse sur google,
+ vous devez cliquer sur plusieurs liens avant de pouvoir l"enregistrer (à cause des miniatures).<br />
+ Ce site affiche les images en taille réelle pour que vous puissiez directement les enregistrer.
+
+ <em><a class="externe en" href="http://www.inquisitorx.com/beta/">Inquisitor - Instant search</a> :</em>
+ Ce moteur de recherche utilise google et affiche les résultats à chaque fois que vous changez une lettre.
+
+ <em><a class="en" href="http://labs.google.com/">Google labs</a> :</em>
+ Plusieurs outils intéressants de google.
+
+ <em><a class="externe en" href="http://www.koders.com/">Koders</a> :</em>
+ Un moteur de recherche... de code source ! (similaire à <a class="fr externe" href="http://www.google.com/codesearch/">Google codesearch</a>)
+
+ <em><a class="fr externe" href="http://www.exalead.com">Exalead</a> :</em>
+ Un moteur de recherche populaire. Une miniature de chaque page est affichée, c"est pratique.
+
+ <em><a href="http://www.fulltorrent.net/" class="en externe">FullTorent.net</a> :</em>
+ Un moteur de recherche de fichiers torrent.
+
+ <em><a href="http://www.diggtorrents.com/" class="en externe">Diggtorrents</a> :</em>
+ Un autre moteur de recherches de torrents.
+
+ <em><a href="http://search.ftphost.net/" class="en externe">NAPALM FTP Indexer</a> :</em>
+ Permet de faire des recherches dans des serveurs FTP que des particulers mettent à disposition.
+
+ <em><a href="http://search.creativecommons.org/" class="en externe">Creative Commons search</a> :</em>
+ Recherche dans google, yahoo, etc et n"affiche que le contenu sous licence creative commons.
+
+ <em><a href="http://www.vdoogle.com/" class="en externe">VDoogle</a> :</em>
+ Recherche de vidéos.
+
+ <em><a href="http://www.videoronk.com/" class="en externe">VideoRonk</a> :</em>
+ Encore un moteur de recherches de vidéos.
+
+ <em><a href="http://olivier.coupelon.free.fr/teardrop/" class="en externe">Teardrop</a> :</em>
+ Un logiciel disponible pour MAC, Windows et Linux qui permet de rechercher des images, des fichiers, des pages WEB, etc...
+ </p>
+</div>
+
+<!--D I V E R S-->
+<div id="divers">
+<h2>Divers</h2>
+ <h3>Loisirs/Jeux/Humour/Divertissements</h3>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.bashfr.org/">BashFR.org</a> :</em>
+ Les perles du chat. Excellent.
+
+ <em><a class="externe fr" href="http://www.labanane.org/">LaBanane.org</a> :</em>
+ Même auteur que Bashfr, un site de blagues. J"aime bien.
+
+ <em><a class="externe fr" href="http://www.perlesdeprofs.com/">Perles de profs</a> :</em>
+ Un autre site sur le même modèle (design et organisation) bashfr.
+
+ <em><a class="externe en" href="http://www.20q.net/">20q.net</a> :</em>
+ Le logiciel qui devine en 20 questions ce à quoi vous pensez.
+
+ <em><a class="externe en" href="http://www.elizium.nu/scripts/lemmings/">Lemmings</a> :</em>
+ Quelqu"un a refait le jeu lemmings, entièrement en JavaScript !
+
+ <em><a href="http://www.michaelbach.de/ot/" class="en externe">Optical Illusions</a> :</em>
+ Des illusions d"optique.
+
+ <em><a href="http://www.animatedknots.com/" class="en externe">Animated Knotes</a> :</em>
+ Un site pour apprendre à faire toutes sortes de neuds.
+
+ <em><a class="externe en" href="http://www.origami.com">Origami</a></em>
+ Un site sur les origamis (les pliages et montages en papier).
+
+ <em><a class="en externe" href="http://www.onemorelevel.com/">OneMoreLevel</a></em>
+ Des jeux flash.
+
+ <em><a href="http://www.angryalien.com/" class="en externe">Angry Alien Production</a> :</em>
+ Des films célèbres résumés en trentes secondes avec des lapins. Marrant.
+
+ <em><a href="http://www.beautifully-webdesign.net/" class="en externe">beautifully : webdesign</a> :</em>
+ Un liste de sites flash.
+
+ <em><a class="externe fr" href="http://www.charabia.net/gen/index.php">Charabia.net</a> :</em>
+ Un générateur de charabia en tout genre. Rigolo.
+
+ <em><a class="externe fr" href="http://www.argoteur.com/">L"Argoteur</a> :</em>
+ Change l"écriture des pages de diverses facons : javanais, inversé, etc.... C"est rigolo.
+
+ <em><a class="externe en" href="http://www.chatcreator.com/">Chat Creator</a> :</em>
+ Un site pour créér vous-même votre page de chat (temporaire).
+ Donnez un nom a votre page, puis indiquez l"url correspondante aux personnes auxquelles vous voulez parler.
+
+ <em><a href="http://skybeurk.net/" class="fr externe">Skybeurk Awards</a> :</em>
+ Les "pires" skyblogs du net. Navrant.
+
+ <em><a href="http://www.wormux.org/" class="fr externe">Wormux</a> :</em>
+ Une sorte de remake du jeu Worms, mais open-source.
+
+ <em><a href="http://www.dogmazic.net/" class="fr externe">Dogmazic</a></em>
+ Un site de musique libre.
+
+ <em><a href="http://jeuxlibres.net/" class="fr externe">Jeux libres</a> :</em>
+ Une liste de jeux vidéos libres.
+ </p>
+
+ <h3>Bureautique/Systèmes d"exploitation</h3>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.fredcavazza.net/index.php?2006/02/24/1077">FredCavazza</a> :</em>
+ Une suite bureautique en ligne.
+
+ <em><a class="externe en" href="http://www.youos.com/">YouOS</a> :</em>
+ Ce site simule un système d"exploitation dans le navigateur !!
+
+ <em><a class="externe en" href="http://www.visibone.com/font/FontResults.html">VisiBone</a> :</em>
+ Une liste de plusieurs polices de caractères.
+
+ <em><a class="externe en" href="http://www.geocities.com/ben-fuzzybear/acronyms.html">Geocities.com - Acronymes</a> :</em>
+ Une liste d"acronymes utilisés.
+
+ <em><a class="externe fr" href="http://membres.lycos.fr/cestquoiwindows/">C"est quoi Windows ?</a> :</em>
+ Un "Linuxien" qui a essayé Windows, et qui raconte son experience. C"est assez parlant.
+ </p>
+
+ <h3>Quelques services en ligne</h3>
+ <p class="liste">
+ <em><a href="http://mihd.net/" class="en externe">Upload - MiHD</a> :</em>
+ Un service d"upload et de stockage de fichiers, pour les partager ensuite.
+
+ <em><a href="http://www.mediafire.com/" class="en externe">MediaFire</a> :</em>
+ Un autre service de stockage.
+ </p>
+
+ <h3>Autres</h3>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.journaldunet.com/vitesse/">Test de connexion</a></em>
+
+ <em><a class="externe fr" href="http://www.csszengarden.com/tr/francais/">CSS Zengarden</a> :</em>
+ Une démonstration de la "puissance" du CSS. Choisissez un style, la page est transformé mais le html reste le même.
+
+ <em><a class="externe en" href="http://www.ultimatebootcd.com/">Ultimate Boot CD</a> :</em>
+ Un des plus populaire CD bootables. Très utile pour dépanner votre ordinateur s"il ne peut plus s"alummer :
+ il y a dessus des antivirus, des logiciels de vérification des disques... etc
+
+ <em><a class="externe fr" href="http://totalementcretin.apinc.org/">Totalement Cretin(s)</a> :</em>
+ Il y a de tout sur Internet. Et parfois, c"est vraiment idiot.
+
+ <em><a class="externe fr" href="http://stopdrm.info/">StopDRM !</a> :</em>
+ Un site français contre les DRM et la loi DADVSI (qui est malheureusement passée...)
+
+ <em><a class="externe en" href="http://www.webdevout.net/">Web Devout</a> :</em>
+ Un site qui explique plusieurs choses sur les navigateurs (notamment leur attitude face aux standards)
+
+ <em><a class="externe fr" href="http://www.racketiciel.info/">Non aux Racketiciels</a> :</em>
+ La vente de logiciels avec un ordinateur (vente liée) est interdite :
+ normalement on ne devrait pas vendre Windows par défaut avec les ordinateurs que vous achetez.
+
+ <em><a href="http://www.leconjugueur.com/" class="fr externe">Le Conjugueur</a> :</em>
+ Donnez un verbe, et il est conjugué à tous les temps !
+ </p>
+</div>
+
+<!--L I E N S-->
+<div id="liens">
+<h2>Liens</h2>
+ <p class="liste">
+ <em><a class="externe fr" href="http://www.mesfavs.com/">MesFavs</a></em>
+ <em><a class="externe fr" href="http://www.annuaire-liens.com/">Annuaire de liens</a></em>
+ <em><a class="externe fr" href="http://www.liensutiles.org/">liensutiles.org</a></em>
+ <em><a class="externe en" href="http://del.icio.us">Del.icio.us</a></em>
+ <em><a class="externe en" href="http://de.lirio.us/">De.lirio.us</a></em>
+ <em><a class="externe en" href="http://sandbox.sourcelabs.com/livemarks/">LiveMarks</a></em>
+ <em><a class="externe en" href="http://www.flavius.ro/">Sites sur les CSS</a></em>
+ </p>
+</div>
+<?php require'autres/source-bas.php';?>
blob - /dev/null
blob + 18ebafdfb39910bed180277f325315c330b48ff3 (mode 644)
--- /dev/null
+++ logiciels/avast.php
+<?php
+$titre='Avast';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class='t128' alt="Avast!" src="/img/big/avast128.png" />Avast!</h1>
+<p>Avast est un excellent antivirus:</p>
+<ul>
+ <li>Il est gratuit(dans cette version).</li>
+ <li>Il est simple à configurer et à utiliser.</li>
+ <li>Il y a des mises a jour régulières(important pour ce type de logiciel).</li>
+ <li>C'est l'un des antivirus le plus performant, apprécié et utilisé.</li>
+ <li>Il est en français.</li>
+</ul>
+<hr />
+<p>Site officiel : <a href="http://www.avast.com/" hreflang="en">http://www.avast.com/</a></p>
+<p>
+ Télécharger la version 4 de Avast! Home en français (gratuit)
+ <a href="http://files.avast.com/iavs4pro/setupfre.exe">Depuis le site officiel</a>
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 85beb54890dbdcecb64986c823969b68408c6ffb (mode 644)
--- /dev/null
+++ logiciels/ccleaner.php
+<?php
+$titre='Ccleaner';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class='t128' alt="" src="/img/big/ccleaner128.png" />Craps Cleaner</h1>
+<p>Le logiciels Craps Cleaner est très pratique :</p>
+<ul>
+ <li>Il est gratuit.</li>
+ <li>Il permet plusieurs choses : effacer ses traces, les erreurs du registre(il peut y en avoir des milliers),
+ contrôler les programmes qui se lancent au démarrage, etc...</li>
+ <li>Il protège votre vie privée.</li>
+ <li>Il est en français.</li>
+ <li>Il est très léger (seulement 16 fichiers ou 1.33 Mo).</li>
+ <li>Il et mis à jour régulièrement.</li>
+ <li>Il est simple d'utilisation et vous pouvez automatiser le nettoyage de votre ordinateur
+ pour ne plus devoir vous en occuper.</li>
+</ul>
+<hr />
+<p>Site officiel : <a href="http://www.ccleaner.com/" hreflang="en">http://www.ccleaner.com</a></p>
+<p>Télécharger la version 1.34.407 :<br />
+<a href="http://www.filehippo.com/download_ccleaner/">Depuis FileHippo</a><br />
+<a href="telecharger/ccsetup134.exe">Depuis mon site.</a></p>
+<p>Voir également : <a href="/configurer/ccleaner.php">Configurer Ccleaner</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 3925fea64c82096e96c1463c6248b2fcbfc7feb0 (mode 644)
--- /dev/null
+++ logiciels/dbpoweramp.php
+<?php
+$titre='dBpowerAMP Music Converter';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img src="/img/big/dbpoweramp128.png" class="t48" alt="" />dBPowerAMP Music Converter</h1>
+<p>Ce logiciel très pratique permet de convertir plusieurs fichiers audios ou vidéos dans plusieurs formats : mp3, wma, ogg, wave...<br />
+ On peut également choisir la qualité de l'encodage, et la fréquence, ou convertir plusieurs pistes à la fois,
+ depuis n'importe quels fichiers.<br />
+ De plus, le logiciel peut aller lui-même chercher les références du fichier sur internet.<br />C'est un logiciel gratuit.</p>
+<hr />
+<p>Site officiel : <a href='http://dbpoweramp.com/dmc.htm' class='en externe'>http://dbpoweramp.com/</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + a5ec7f0476ebe3337a5e4baa0bfa17215d6b2ec8 (mode 644)
--- /dev/null
+++ logiciels/firefox.php
+<?php
+$titre='Firefox / Opera / Lynx';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+
+<h1><img class='t64' alt="" src="/img/moyen/firefox64.png" />Firefox</h1>
+<p>Firefox est une très bonne alternative a un autre navigateur comme Internet Explorer :</p>
+<ul><li>Il est gratuit et open-source.</li>
+ <li>Il permet la navigation par onglets.</li>
+ <li>Il gère les flux RSS.</li>
+ <li>Vous pouvez lui associer des extensions, plugins, thèmes... pour améliorer votre confort de navigation.</li>
+ <li>Il est plus sécurisé (pas d'ActiveX).</li>
+ <li>Il est plus agréable à utiliser.</li>
+ <li>Il possède un filtre anti-pop-up (ces fenêtres agaçantes qui surgissent lorsque vous naviguez).</li>
+ <li>Lors de l'installation, vous pouvez importer tous vos favoris, historiques... Depuis IE ou un autre navigateur.</li>
+ <li>... etc. Il y a tellement d'avantages que je ne peux pas tous les citer.</li></ul>
+<hr />
+<p style="text-align: center;">
+<strong>Pour des raisons de sécurité, je vous recommande de laisser tomber Internet Explorer et d'utiliser Firefox.</strong></p>
+<p>Vous pourrez si vous le voulez continuer à utiliser Internet Explorer. Cela ne provoquera aucun "bug" dans votre
+ ordinateur et ne changera pas vos habitudes(l'interface, personnalisable grace aux extensions, reste pratiquement la même).</p>
+<hr />
+<p>Sites officiels : <a href="http://www.mozilla-europe.org/fr/products/firefox/" hreflang="fr">http://www.mozilla-europe.org/fr/products/firefox/</a></p>
+<p>Extensions, plugins, thèmes... : <a href="http://extensions.geckozone.org/Firefox/" hreflang="fr">http://extensions.geckozone.org/Firefox/</a> et
+ <a href="https://addons.mozilla.org/firefox/" hreflang="en">https://addons.mozilla.org/firefox/</a></p>
+<p>Télécharger la version 2.0 en français <a href="http://download.mozilla.org/?product=firefox-2.0&os=win&lang=fr">Depuis le site officiel</a></p>
+<hr />
+<h4 id='extensions'>Extensions</h4>
+<p>J'utilise beaucoup d'extensions. Je vous en donne la liste ici :</p>
+<?php
+/*
+<dl><dt><a href=''></a></dt>
+ <dd></dd>
+ <dt><a href=''></a></dt>
+ <dd></dd>
+ <dt><a href=''></a></dt>
+ <dd></dd>
+ <dt><a href=''></a></dt>
+ <dd></dd>
+ <dt><a href=''></a></dt>
+ <dd></dd>
+ <dt><a href=''></a></dt>
+ <dd></dd>
+</dl>
+ <dt><a href=''></a></dt>
+ <dd></dd>*/
+?>
+<ul>
+ <li><a class='fr externe' href="http://extensions.geckozone.org/FireFTP">FireFTP</a><br />Un client FTP très pratique,
+ pas besoin d'en installer un autre comme ceci.</li>
+ <li><a class='fr externe' href="http://extensions.geckozone.org/GetJetableMail">Get jetable mail</a><br />
+ Pour obtenir une adresse jetable sur des sites si vous ne voulez pas donner votre adresse e-mail.
+ Vous pouvez choisir pendant combien de temps les e-mails qui arriveront à cette adresse vous seront renvoyés à votre
+ réelle adresse e-mail.</li>
+ <li><a class='fr externe' href="http://extensions.geckozone.org/SortExtensions">Sort extensions and themes</a><br />Classe alphabétiquement
+ vos extensions, vos thèmes, vos plugins...</li>
+ <li id='webdeveloper'><a class='fr externe' href="http://joliclic.free.fr/mozilla/webdeveloper/">WebDeveloper</a><br />
+ Une extension vraiment très pratique et utile, pour les Webmasters comme tout le monde :<br />
+ Pour les webmasters :
+ <ul>
+ <li>Outils pour valider le code css, html, rss, les liens... d'une page.</li>
+ <li>Vous pouvez voir en quelques clics plusieurs informations sur divers éléments :
+ blocs, paragraphes, liens, balises...</li>
+ <li>Autres outils pour voir les caractéristiques et la construction d'une page web : tableau, liens, frames...</li>
+ <li>etc...</li>
+ </ul>
+ Pour tout le monde :
+ <ul>
+ <li>Option pour voir le code source d'une page.</li>
+ <li>Reconstruisez à volonté le code html ou css :
+ utile pour changer le design a votre gout par exemple.</li>
+ <li>Plusieurs options pour les images.</li>
+ <li>Un bouton pour effacer ses traces.</li>
+ <li>Permet de changer le code PHP.</li>
+ <li>Permet de bloquer les cookies, le cache, les javascripts...</li>
+ <li>etc...</li>
+ </ul>
+ </li>
+ <li id="navibar"><a class='fr externe' href="http://extensions.geckozone.org/Navibar">Navibar</a><br />
+ Une extension qui permet d'afficher le plan d'un site dans la barre latérale.
+ Vous pouvez d'ailleur voir le plan de mon site avec cette extension.
+ Cependant le site qui proposait cette extension n'est plus en ligne, je la propose ici en téléchargement :
+ <a class='fr externe' href="telecharger/firefoxnavibar0101.xpi">telecharger/firefoxnavibar0101.xpi</a></li>
+ <li id="adblockplus"><a class='fr externe' href="http://extensions.geckozone.org/AdblockPlus">Adblock Plus</a><br />
+ Bloque énormément de publicités, quel que soit leur format (Bannières, Flash, JavaScript, Pop-Ups...).
+ Vraiment très efficace</li>
+ <li><a class='en externe' href="https://addons.mozilla.org/firefox/1136/">FilterSet G Updater</a><br />
+ Télécharge et installe automatiquement les nouvelles listes de publicités a bloquer pour AdBlock</li>
+ <li><a class='fr externe' href="http://extensions.geckozone.org/DownloadStatusbar">Download Statusbar</a><br />
+ Remplace le fenêtre de téléchargement par des barre de progression en bas de la fenêtre de Firefox.
+ Ainsi vous n'avez qu'une fenêtre et vous pouvez voir la progression de chaque téléchargement</li>
+ <li><a class='en externe' href="http://roachfiend.com/archives/2005/02/07/bugmenot/">BugMeNot</a><br />
+ Permet d'utiliser les mots de passe du site <a class='fr externe' href="http://www.bugmenot.com">http://www.bugmenot.com</a>.
+ Ce site repertorie plusieurs mots de passe de sites ou l'inscription est obligatoire.
+ Vous pouvez ainsi vous connecter à certains sites sans vous inscrire.</li>
+ <li><a class='en externe' href="https://addons.mozilla.org/firefox/249/">Html Validator</a><br />
+ Vérifie le code Html de chaque page avec le logiciel Tidy. Peut corriger le code s'il n'est pas valide.
+ Vous évite ainsi de passer par le W3C et permet de valider plus rapidement les pages.</li>
+ <li><a class='fr externe' href="http://ersplus.free.fr/spip/article.php?id_article=143">Mass Installer</a><br />
+ Permet d'installer plusieurs extensions en une seule fois</li>
+ <li><a class='en externe' href="http://sage.mozdev.org/">Sage</a><br />
+ Un lecteur de Flux RSS. Il vous permet de gérer plusieurs flux RSS a la fois, affiche chaque flux rss lisiblement, etc...
+ C'est une très bonne extension.</li>
+ <li><a class='fr externe' href="http://extensions.geckozone.org/PearlCrescentPageSaver">Pearl Crescent Page Saver Basic</a><br />
+ Permet de faire une capture au format png d'image d'une page Web,
+ quelle que soient ses dimensions. Beaucoup plus pratique que de faire "enregistrer sous"</li>
+</ul>
+<hr />
+<h1 id="opera"><img class='t128' alt="" src="/img/big/opera128.png" />Opera</h1>
+<p>Opera est un autre très bon navigateur, performant, rapide et gratuit.<br />
+ Il possède un lecteur de flux RSS, la navigation par onglets...<br />
+ Vous pouvez utiliser plusieurs outils pour changer le style, ou afficher certaines options.<br />
+ Par exemple, il y a un mode "accessibilité" ou encore une fonction qui permet d'afficher la structure de la page
+ (balises html, fichiers attachés...).<br />
+ C'est un bon navigateur, mais aussi un outil pratique pour Webmaster.<br />
+ D'ailleurs il est plus respectueux des standards que Firefox.</p>
+<p>Site officiel : <a hreflang="en" href="http://www.opera.com/">http://www.opera.com/</a></p>
+<p>Télécharger directement depuis le site officiel :
+ <a href="http://www.opera.com/download/get.pl?id=28418">http://www.opera.com/download/get.pl?id=28418</a></p>
+<hr />
+<h1 id="lynx"><img class='t48' src="/img/moyen/lynx48.png" alt="" />Lynx</h1>
+<p>Lynx est un navigateur en mode texte : pas d'images, pas de CSS, pas de JavaScript...<br />
+ Evidemment il est très restreint, mais c'est la sécurité absolue
+ (à chaque fois qu'un cookie est crée il vous demande si vous l'acceptez).
+ <br />Vous ne pouvez pas non plus utiliser la souris, la navigation se fait au clavier
+ <br />Je ne l'utilise pas comme navigateur, mais plutôt pour tester mon site.</p>
+<p>Site officiel : <a href="http://lynx.isc.org/" class='en externe'>http://lynx.isc.org/</a></p>
+<p>Télécharger Lynx pour Windows
+ <a href="telecharger/lynx285.exe">Depuis mon site</a><br />
+ Pour Linux : voir la page du site officel :
+ <a href="http://lynx.isc.org/current/index.html" class='en externe'>http://lynx.isc.org/current/index.html</a>
+</p>
+<p>
+ Quelques liens sur Lynx à voir :<br />
+ Les options dans Lynx :
+ <a href="http://jp.barralis.com/linux-man/man1/lynx.1.php" hreflang='fr' class='fr externe'>http://jp.barralis.com/linux-man/man1/lynx.1.php</a>
+ <br />Les commandes usuelles :
+ <a href="http://dominique.guebey.club.fr/tekno/lynx/lynx_com.htm" hreflang='fr' class='fr externe'>http://dominique.guebey.club.fr/tekno/lynx/lynx_com.htm</a>
+ <br />Lynx sur Wikipedia :
+ <a href="http://fr.wikipedia.org/wiki/Lynx_(navigateur)" hreflang='fr' class='fr wiki externe'>http://fr.wikipedia.org/wiki/Lynx_(navigateur)</a>
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 0f5b29e4e8d0afca3b86efef1f7c0051dbe66900 (mode 644)
--- /dev/null
+++ logiciels/iconedit.php
+<?php
+$titre='IconEdit32';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img src="/img/moyen/iconedit48.png" class="t48" alt="" />Icon edit 32</h1>
+<p>
+ IconEdit32 est un éditeur et créateur d'icones. Vous pouvez créér des icones pour
+ personaliser votre ordinateur, ou des favicones pour vos sites WEB.<br />
+ C'est d'ailleurs avec ce logiciel que j'ai créé la favicon de ce site.
+</p>
+<p>Vous pouvez créér des icones au format 48x48, 32x32, ou 16x16, en 256, 16 couleurs ou noir et blanc.</p>
+<hr />
+<p>L'accès au fichier est maintenant payant, mais son utilisation est gratuite.</p>
+<p>Vous pouvez le télécharger légalement et gratuitement <a href="telecharger/iedit32.zip">depuis mon site</a>
+ ou à l'adresse <a href="http://www.onlythebestfreeware.com/program.asp?program_id=135" hreflang="en">
+ http://www.onlythebestfreeware.com/program.asp?program_id=135</a>.
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 61cf9c3660273a4617173c9f7c7368538d67a681 (mode 644)
--- /dev/null
+++ logiciels/iconsushi.php
+<?php
+$titre='@icon Sushi';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img src="/img/moyen/aicon32.png" class='t32' alt="@" />@icon Sushi</h1>
+<p>@icon sushi est un logiciel qui vous permet d'extraire des icônes : L'icône d'un programme vous plait ?<br />
+ Utilisez @icon sushi pour extraire l'image d'une dll ou d'un .exe, ou encore d'une image déjà existante.<br />
+ Vous pouvez ensuite éditer l'image, ou l'enregistrer au format ico/bmp/png.<br />
+ Le fichier C:\Windows\system32\shell32.dll contient énormément d'icones. Vous pouvez les extraire avec ce logiciel.</p>
+<hr />
+<p>Site officiel : <a href="http://www.towofu.net/soft/e-aicon.php" hreflang="en">http://www.towofu.net/soft/e-aicon.php</a><br />
+ Télécharger la version 1.20
+ <a href="http://www.towofu.net/cgi-bin/download/download.cgi?name=aicon120setup_e.exe">Depuis le site officiel</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 09ba77ec1e5b9dbb5c4b822ec76aa402044455d7 (mode 644)
--- /dev/null
+++ logiciels/index.php
+<?php
+$titre='Logiciels';
+$head='<link rel="stylesheet" type="text/css" href="../autres/css/logiciels.css" />';
+require'../autres/source-haut.php'?>
+<h1>Logiciels</h1>
+ <hr />
+ <p class="pintro">
+ Voici plusieurs logiciels pour la plupart gratuits, que je vous recommande.<br />
+ Ils fonctionnent tous sous Windows, et beaucoup existent également pour Linux ou MAC.<br />
+ Attention cependant, les versions des logiciels que je
+ propose en téléchargement sont pour Windows. Si vous voulez
+ les versions d'un autre OS, il faudra vous rendre sur le site
+ officiel.</p>
+ <p>Quels logiciels voulez-vous voir ?<br />
+ || <a href="#internet">Internet</a>|| <a href="#securite">Sécurité</a>|| <a href="#utilitaires">Utilitaires</a>|| <a href="#multimedia">Multimédia</a>|| <a href="#siteprog">Site / Programmation</a>|| <a href="#graphisme">Graphisme / Dessin</a>||</p>
+ <p>Vous pouvez également voir <a href="telecharger/">une page regroupant tous les fichiers a télécharger</a></p>
+
+<!--I N T E R N E T-->
+<h2 id="internet">Internet</h2>
+
+ <div class="log"><h6><a href="firefox.php">Firefox</a><span class="log2"> / <a href="firefox.php#opera">Opera</a> / <a href="firefox.php#lynx">Lynx</a></span></h6>
+ <p><a href="firefox.php"><img class='t48' alt="" src="/img/moyen/firefox48.png" /></a>Un navigateur puissant et sécurisé.</p>
+ </div>
+
+ <div class="log"><h6><a href="thunderbird.php">Thunderbird</a></h6>
+ <p><a href="thunderbird.php"><img class='t48' alt="" src="/img/moyen/thunderbird48.png" /></a>Un courrielleur efficace.</p>
+ </div>
+
+ <div class="log"><h6><a href="stardown.php">Star Downloader</a></h6>
+ <p><a href="stardown.php"><img class='t48' alt="" src="/img/moyen/stardown48.png" /></a>Un bon gestionnaire de téléchargements.</p>
+ </div>
+
+
+<!--S E CU R I T E-->
+<h2 id="securite">Sécurité</h2>
+
+ <div class="log"><h6><a href="avast.php">Avast</a></h6>
+ <p><a href="avast.php"><img class='t48' alt="" src="/img/moyen/avast48.png" /></a>Un excellent antivirus.</p>
+ </div>
+
+ <div class="log"><h6><a href="spybot.php">Spybot - Search and Destroy</a><span class="log2"> / <a href="spybot.php#adaware">Ad - Aware</a></span></h6>
+ <p><a href="spybot.php"><img class='t48' alt="" src="/img/moyen/adaware48.png" /></a>De bons anti-spywares.</p>
+ </div>
+
+ <div class="log"><h6><a href="zonealarm.php">Zone Alarm</a></h6>
+ <p><a href="zonealarm.php"><img class='t48' alt="" src="/img/moyen/zonealarm48.png" /></a>Un mur de feu gratuit, simple et efficace.</p>
+ </div>
+
+
+<!--U T I L I T A I R E S-->
+<h2 id="utilitaires">Utilitaires</h2>
+
+ <div class="log"><h6><a href="ccleaner.php">Craps Cleaner</a></h6>
+ <p><a href="ccleaner.php"><img class='t48' alt="" src="/img/moyen/ccleaner48.png" /></a>Faire le ménage sur le disque dur.</p>
+ </div>
+
+ <div class="log"><h6><a href="avast.php">Pagedefrag</a></h6>
+ <p><a href="pagedefrag.php"><img class='t32' alt="" src="/img/moyen/pagedefrag32.png" /></a>Un logiciel gratuit et efficace.</p>
+ </div>
+
+
+<!--M U L T I M E D I A-->
+<h2 id="multimedia">Multimédia</h2>
+
+ <div class="log"><h6><a href="winamp.php">Winamp</a><span class="log2"> / <a href="winamp.php">VLC Media Player</a></span></h6>
+ <p><a href="winamp.php"><img class='t48' alt="" src="/img/moyen/winamp48.png" /></a>Lire tous les fichiers audios et vidéos.</p></div>
+
+ <div class='log'><h6><a href='dbpoweramp.php'>dBPowerAMP Music Converter</a></h6>
+ <p><a href='dbpoweramp.php'><img src='/img/moyen/dbpoweramp48.png' class='t48' alt='' /></a>Convertir des fichiers multimédia.</p></div>
+
+
+<!--S I T E / P R O G R A M M A T I O N-->
+<h2 id="siteprog">Site / Programmation</h2>
+
+ <!--SITE-->
+ <h3>Site</h3>
+
+ <div class="log"><h6><a href="nvu.php">Nvu</a></h6>
+ <p><a href="nvu.php"><img class='t48' alt="" src="/img/moyen/nvu48.png" /></a>Un bon éditeur xhtml/css.</p></div>
+
+ <div class="log"><h6><a href="xenu.php">Xenu's Link Sleuth</a></h6>
+ <p><a href="xenu.php"><img class='t32' alt="" src="/img/moyen/xenu32.png" /></a>Vérifiez rapidement tous les liens de votre site.</p>
+ </div>
+
+ <div class="log"><h6><a href="tidy.php">TidyGUI</a></h6>
+ <p><a href="tidy.php"><img src="/img/moyen/tidy32.png" alt="" class='t32' /></a>Votre code est-il valide ?</p>
+ </div>
+
+ <!--PROGRAMMATION-->
+ <h3>Programmation</h3>
+
+ <div class="log"><h6><a href="pspad.php">PSPad Editor</a></h6>
+ <p><a href="pspad.php"><img class='t48' alt="" src="/img/moyen/pspad48.png" /></a>Un excellent éditeur multi-codes (java/python/c++/perl/php/html/css/JavaScript/etc....).</p>
+ </div>
+
+
+<!--G R A P H I S M E-->
+<h2 id="graphisme">Graphisme / Dessin</h2>
+
+ <!--I C O N E S-->
+ <h3>Icones</h3>
+
+ <div class="log"><h6><a href="iconedit.php">IconEdit32</a></h6>
+ <p><a href="iconedit.php"><img class='t48' alt="" src="/img/moyen/iconedit48.png" /></a>Créez vos icônes.</p>
+ </div>
+
+ <div class="log"><h6><a href="iconsushi.php">@iconSushi</a></h6>
+ <p><a href="iconsushi.php"><img class='t32' alt="" src="/img/moyen/aicon32.png" /></a>Pour extraire des images de vos logiciels.</p>
+ </div>
+ <!--Utilitaires-->
+ <h3>Utilitaires</h3>
+ <div class="log"><h6><a href="shoot2png.php">Shoot2png</a></h6>
+ <p><a href="shoot2png.php"><img src="/img/moyen/shoot2png32.png" alt="" class='t32' /></a>Faire des captures d'écran rapidement</p>
+ </div>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 166372a44a830ecbfadd4374776cd219a426ff52 (mode 644)
--- /dev/null
+++ logiciels/nvu.php
+<?php
+$titre='Nvu';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class="t128" alt="Nvu" src="/img/big/nvu128.png" /></h1>
+<p>Nvu est un bon éditeur
+ <abbr title="What You See Is What You Get : «ce que vous voyez est ce que vous obtenez»">WYSIWYG</abbr> :</p>
+<ul><li>Vous pouvez travailler au niveau du code html ou en mode normal
+ (<abbr title="What You See Is What You Get : "ce que vous voyez est ce que vous obtenez"">WYSIWYG</abbr>).</li>
+ <li>Une fonction est incorporée pour valider directement vos fichiers html avec le validateur du W3C.</li>
+ <li>Il respecte les standards (contrairement à Frontpage et autres(Word ou Publisher qui ne sont même pas conçus pour la
+ réalisation de pages WEB!)).</li>
+ <li>Il possède un Client FTP pour publier vos pages et vos fichiers.</li>
+ <li>Il possède également un gestionnaire de sites pour Gérer plusieurs sites plus simplement.</li>
+ <li>En lui ajoutant des extensions, vous pouvez :
+ <ul>
+ <li>Vérifier le code html avec <a href="tidy.php">TidyGUI</a> depuis le menu.</li>
+ <li>Editer les regles CSS à la main.</li>
+ <li>Utiliser un correcteur et nettoyeur de code html en quelques clics.</li></ul></li></ul>
+<hr />
+<p>Site officiel :
+ <a href="http://frenchmozilla.sourceforge.net/nvu/" hreflang="fr">http://frenchmozilla.sourceforge.net/nvu/</a></p>
+<p>Télécharger Nvu
+ <a href="http://frenchmozilla.sourceforge.net/nvu/#install" hreflang='fr' class='fr externe'>Depuis le site officiel</a></p>
+<hr />
+<h5>Extensions :</h5>
+<dl><dt><a href="http://extensions.geckozone.org/HandCoder/" hreflang="fr">HandCoder</a></dt>
+ <dd>Pour ouvrir l'éditeur de son choix depuis Nvu et éditer les pages html,
+ mais aussi et surtout pour vérifier en quelques clics le code html avec Tidy.</dd>
+ <dt><a href="http://extensions.geckozone.org/HTMLHeader/" hreflang="fr">Html Header</a></dt>
+ <dd>Permet de visualiser les balises contenues dans l'élément head et de les éditer
+ avec une interfacegraphique (sans passer par le code source).</dd>
+ <dt><a href="http://extensions.geckozone.org/KaZcadeS/" hreflang="fr">KaZcadeS</a></dt>
+ <dd>Un éditeur CSS qui corrige les bugs de l'ancien éditeur par défaut de Nvu
+ (CasCadeS) et qui permet d'éditer le code (mode expert).</dd>
+ <dt><a href="http://extensions.geckozone.org/NsmExtender/" hreflang="fr">Nsm Extender</a></dt>
+ <dd>Ajoute des fonctions au gestionnaire de sites.</dd>
+ <dt><a hreflang="fr" href="http://extensions.geckozone.org/NvuTutorial/">Nvu Tutorial</a></dt>
+ <dd>Un tutoriel pour apprendre à utiliser Nvu et faire des pages respectueuses des standards.</dd>
+ <dt><a href="http://extensions.geckozone.org/urlCleaner/" hreflang="fr">Url Cleaner</a></dt>
+ <dd>Transforme les liens absolus en liens relatifs, et autres.</dd></dl>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 7f24cc52986188b0f57abf87e88301737aaab4a8 (mode 644)
--- /dev/null
+++ logiciels/pagedefrag.php
+<?php
+$titre='Pagedefrag';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class='t32' alt="Page Defrag" src="../img/moyen/pagedefrag32.png" />Pagedefrag</h1>
+<p>Ce logiciel est un très bon utilitaire pour défragmenter les fichiers systèmes :</p>
+<ul><li>Il peut défragmenter le fichier d'échange (pagefile.sys).</li>
+ <li>Il est très léger (3 fichiers sur votre ordinateur ou 132 Ko).</li>
+ <li>Il défragmente également la base de registres.</li></ul>
+<hr />
+<!--<p>Site officiel :
+Le site a malheuresement été racheté par microsoft :-(
+ <a href="http://www.sysinternals.com/" class='en externe'>http://www.sysinternals.com/</a></p>-->
+<p>Télécharger : <a href="telecharger/pagedefrag.zip">Depuis mon site</a><br />
+ <a href="http://download.sysinternals.com/Files/PageDefrag.zip">Depuis le site officiel</a></p>
+<!--<p>Note : La société Sysinternals qui distribue ce logiciel gratuitement distribue également
+ plusieurs autres utilitaires. N'hésitez pas à faire un tour sur leur site.
+</p>-->
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 7cd98f4c956a7abe0b859545ef6e38c5b9788924 (mode 644)
--- /dev/null
+++ logiciels/pspad.php
+<?php
+$titre='PSPad Editor';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img src="/img/big/pspad128.png" alt="PSPad" class="t128" />PSPad</h1>
+<p>Pspad est un éditeur multi-codes très complet :</p>
+<ul><li>Il gère les langages Html, CSS, Java, Javascript, PHP, C++, C#, C, Python, Perl et beaucoup d'autres.</li>
+ <li>La coloration syntaxique (colorer le code pour mieux s'y retrouver) est disponible et activée par défaut.</li>
+ <li>Vous pouvez en quelques clics dans le menu vérifier le code de vos pages html avec <a href="tidy.php">tidy</a>.</li>
+ <li>Un client <abbr title="File Transfert protocol : Protocole de transfert de fichiers">FTP</abbr>
+ est integré pour publier facilement vos fichiers.</li>
+ <li>Vous pouvez voir directement le rendu de vos pages dans le logiciel</li>
+ <li>Vous pouvez valider vos fichiers html, CSS ou RSS depuisle logiciel.</li>
+ <li>Il peut reformater le code html pour le rendre moins lourd.</li></ul>
+<p>C'est vraiment l'éditeur à tout faire et qu'il faut avoir.</p>
+<hr />
+<p>Site officiel : <a href="http://www.pspad.com/fr/" hreflang="fr">http://www.pspad.com/fr/</a></p>
+<p>Télécharger : <a href="telecharger/pspadeditor451.exe">Depuis mon site (version 4.5.1)</a><br />
+ <a href="http://www.pspad.com/fr/download.php" hreflang="fr">Depuis le site officiel</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + b9beab6b10e519e4f1761baf5f9f9d4d890538b2 (mode 644)
--- /dev/null
+++ logiciels/shoot2png.php
+<?php
+$titre='Shoot2png';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><!--[if !IE]><--><img class='t48' alt='' src="/img/moyen/shoot2png48.png" /><!--><![endif]-->
+<!--[if IE]><img class='t48' src="/img/moyen/gifsie/shoot2png48.gif" /><![endif]-->Shoot2png</h1>
+<p>Shoot2png est un bon freeware (logiciel gratuit) qui vous permet de prendre des captures d'écran au format png, gif ou jpg.<br />
+ Il permet de capturer tout l'écran, seulement la fenêtre ouverte ou une sélection.<br />
+ Vous pouvez également redimmensionner l'image, ou avoir un aperçu dans votre logiciel de graphisme/dessin par défaut,
+ et il a plusieurs autres fonctionnalités.</p>
+<p>De plus, il ne prend qu'un fichier et ne nécéssite aucune installation ni fichier supplémentaire, et ne laisse pas de trace
+ sur le disque dur.<br />(pour le "désinstaller", il suffir d'effacer le fichier).</p>
+<hr />
+<p>Site officiel : <a href="http://www.scaranet.net/" hreflang="fr">http://www.scaranet.net/</a></p>
+<p>Télécharger : <a href="telecharger/shoot2png.exe">Depuis mon site (version 1.0.1.0)</a>
+ <a href="http://scaraweb.free.fr/scaranet/download/shoot2png.exe">Depuis le site officiel (Dernière version)</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 5cbafb02814c8f88ab3bc872f4597a3727159198 (mode 644)
--- /dev/null
+++ logiciels/spybot.php
+<?php
+$titre='Spybot / Ad aware';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1 id='spybot'><img alt="" class='t128' src="/img/big/spybot128.png" />Spybot - Search and destroy</h1>
+<p>Je vous recommande Spybot Search and Destroy :</p>
+<ul>
+ <li>Il trouve la plupart des logiciels malveillants et indésirables.</li>
+ <li>Il est gratuit et open-source.</li>
+ <li>Il est pratique et en français.</li>
+ <li>Il est régulièrement mis à jour (important pour ce type de logiciel).</li>
+ <li>Il met à disposition beaucoup d'options utiles.</li></ul>
+<hr />
+<p><strong><a href="http://www.safer-networking.org/fr/donate/" hreflang="fr">
+ Vous pouvez faire un don aux benevoles qui developpent spybot.</a></strong></p>
+<p>Site officiel :
+ <a href="http://www.safer-networking.org/fr/" hreflang="fr">http://www.safer-networking.org/fr/</a></p>
+<p>Télécharger la version 1.4 : <a href="http://www.safer-networking.org/fr/mirrors/" hreflang="fr">Depuis le site officiel</a>
+ (choisissez un site miroir) ; ou <a href="telecharger/spybotsd14.exe">Depuis mon site</a></p>
+<p>Autres téléchargements pour Spybot :
+ <a href="http://www.safer-networking.org/fr/download/" hreflang="fr">http://www.safer-networking.org/fr/download/</a>
+</p>
+<hr />
+<h1 id="adaware"><img class="t128" alt="Ad-aware" src="/img/big/adaware128.png" />Ad-aware</h1>
+<p>Ad-Aware est un autre bon anti-spyware complémentaire à spybot :</p>
+<ul><li>Il analyse la base de registre.</li>
+ <li>Il est performant.</li>
+ <li>Il est gratuit.</li>
+ <li>Il est régulièrement mis à jour.</li></ul>
+<hr />
+<p>Site officiel : <a href="http://www.lavasoft.de/" hreflang="en">http://www.lavasoft.de/</a></p>
+<p>Télécharger Ad-Aware : <a href="http://www.download.com/3001-8022_4-10399602.html" hreflang="en">Depuis download.com</a></p>
+<p>Télécharger la traduction en français :
+ <a href="http://download.lavasoft.de.edgesuite.net/public/pllangs.exe">Depuis le site officiel</a> ou
+ <a href="telecharger/langs.exe">Depuis mon site</a></p>
+<p><a href="http://www.lavasoft.de/french/support/download/" hreflang="fr">Tous les téléchargements pour Ad-Aware</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 47efb1c66fcf44048717ad839437bfb93c0177e4 (mode 644)
--- /dev/null
+++ logiciels/stardown.php
+<?php
+$titre='Star Downloader';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class="t128" alt="Star Downloader" src="/img/big/stardown128.png" />Star downloader</h1>
+<p>Star downloader est un bon gestionnaire de téléchargements :</p>
+<ul>
+ <li>Vous pouvez télécharger plusieurs fichiers en même temps</li>
+ <li>Si un téléchargement est trop long,
+ vous pouvez le mettre en pause pour arrêter votre ordinateur et le reprendre plus tard.</li>
+ <li>Il peut "découper" les fichiers que vous télécharger en plusieurs fichiers
+ pour les télécharger rapidement.</li>
+ <li>Il est en français.</li>
+ <li>Vous pouvez planifier un téléchargement,
+ lui demander d'arrêter l'ordinateur après un téléchargement terminé.</li>
+ <li>Vous pouvez lui demander d'analyser automatiquement le fichier avec votre logiciel antivirus
+ lorsque le téléchargement est terminé.</li>
+ <li>Même en cas d'erreur (serveur saturé par exemple),
+ vous pouvez reprendre le téléchargement sans perte de données.</li></ul>
+<hr />
+<p>Site officiel : <a href="http://www.stardownloader.com/" hreflang="en">http://www.stardownloader.com/</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + eae42ccceaee2f4f61ba9c1181604801ca73f041 (mode 644)
--- /dev/null
+++ logiciels/thunderbird.php
+<?php
+$titre='Thunderbird';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class="t48" alt="TB" title="Téléchargez Thunderbird!" src="/img/moyen/thunderbird48.png" />Thunderbird</h1>
+<p>Thunderbird est un très bon logiciel de messagerie :</p>
+<ul>
+ <li>Il est gratuit et open-source.</li>
+ <li>Il peut gérer les flux RSS.</li>
+ <li>Vous pouvez lui associer des extensions, plugins, themes...</li>
+ <li>Il est plus agréable et plus pratique à utiliser.</li>
+ <li>Il possède un filtre anti-spam <strong>TRES</strong> efficace : vous pouvez définir vos propres règles
+ selon le contenu, l'expéditeur, le sujet.... etc. Il filtre et détecte une grande partie des spams.</li>
+ <li>Il possède également un filtre anti-phishing.
+ (ces faux e-mails qui semblent provenir des banques, mais sont en réalité des escroqueries)</li>
+ <li>Il peut gérer plusieurs comptes et les importer de vos anciens logiciels de messagerie.</li>
+ <li>En installant deux extensions, vous pouvez relever les messages de vos comptes Webmail (hotmail, yahoo, aol, lycos....)
+ directement dans ce logiciel.</li></ul>
+<hr />
+<p><a href="http://www.mozilla-europe.org/fr/products/thunderbird/" hreflang="en">Site officiel</a><br />
+ Extensions, plugins... : <a href="http://extensions.geckozone.org/thunderbird/" hreflang="fr">Geckozone</a> ou
+ <a href="https://addons.mozilla.org/thunderbird/extensions/" class='en externe'>Mozilla</a></p>
+<p>Télécharger la version 1.5.0.8
+ <a href="http://download.mozilla.org/?lang=fr&product=thunderbird-1.5.0.8&os=win">Depuis le site officiel</a></p>
+<p>Avec Thunderbird, lorsque vous écrivez un message, il est possible de corriger l'orthographe.
+ Mais le dictionnaire en Français n'est pas inclus par défaut dans Thunderbird.<br />
+ Vous pouvez le télécharger <a href="telecharger/frthunderbird.xpi">depuis mon site</a>.
+ (Il s'installe de la même façon qu'une extension)</p>
+<p>Voir également <a href="/configurer/thunderbird.php">“ Configurer Thunderbird ”</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 245af800f60dd127eabeefae088f343be0c5954c (mode 644)
--- /dev/null
+++ logiciels/tidy.php
+<?php
+$titre='TidyGUI';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class='t32' alt="" src="/img/moyen/tidy32.png" />TidyGUI</h1>
+<p>Ce logiciel très pratique vous permet de verifier si il n'y a pas d'erreurs dans vos pages html :</p>
+<ul><li>Il vous les indique et les répare si possible,
+ et vous dit celles qu'il n'a pas pu réparer pour que vous le fassiez vous-même.</li>
+ <li>Il rend votre code plus lisible pour que vos pages s'affichent le mieux possible.</li>
+ <li>Avec certains éditeurs, ce logiciel est vraiment utile, vu le code qu'ils génèrent.</li>
+ <li>Il est gratuit et open-source.</li>
+ <li>il ne prend presque pas de place sur votre ordinateur : Téléchargez le fichier (312 Ko seulement),
+ et c'est bon, vous n'avez rien à installer, vous pouvez l'utiliser.</li></ul>
+<hr />
+<p>Sites : <a href="http://tidy.sourceforge.net/" hreflang="en">officiel</a> ;<br />Autres :
+ <a href="http://perso.orange.fr/ablavier/TidyGUI/" hreflang="en">http://perso.orange.fr/ablavier/TidyGUI/</a>
+ <a href="http://www.w3.org/People/Raggett/tidy/" hreflang="en">http://www.w3.org/People/Raggett/tidy/</a></p>
+<p>Télécharger <a href="telecharger/tidygui.exe">Depuis mon site</a> ou
+ <a href="http://perso.orange.fr/ablavier/TidyGUI/TidyGUI-exe.zip">Depuis un autre site</a></p>
+<div class="note"><strong>Notes</strong> :
+ <p class="note">
+ Attention, ce logiciel ne remplace pas la validation du <abbr title="World Wide Web Consortium">W3C</abbr> :
+ Il repère des erreurs non détectées par le validateur W3C et inversement.<br />
+ Il reste donc important de valider vos pages avec
+ <a href="http://validator.w3.org/" hreflang="en">le validateur W3C</a></p>
+ <p class="note">Il existe également une extension pour Firefox qui intègre Tidy directement dans le navigateur
+ et vérifie automatiquement les pages :
+ <a href="https://addons.mozilla.org/firefox/249/" hreflang="en">https://addons.mozilla.org/firefox/249/</a></p></div>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 41b3089cf2220f54d07054a23f4d9476b04de810 (mode 644)
--- /dev/null
+++ logiciels/winamp.php
+<?php
+$titre='Winamp / VLC Media Player';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+$head['access'][1]=array('rel'=>'next','href'=>'./winampnotice.php','title'=>'Comment utiliser Winamp');
+$head['css'][0]['filename']='logwinamp';
+require'../autres/source-haut.php'?>
+<h1 style="text-align:center">Winamp / VLC Media Player<br />
+ <img class='t128' style="margin-right:5em" alt="" src="../img/big/logwinamp.png" /><img class='t128' alt="" src="../img/big/vlc128.png" /></h1>
+<p>Ces deux logiciels sont des lecteurs performants :</p>
+<p>Winamp</p>
+<ul>
+ <li>Il peut encoder(enregistrer) en beacoup plus de formats qui sont plus compacts et prennent moins de place.</li>
+ <li>Il gère(et peutcréer!) les listes en m3u, ainsi que les vidéos.</li>
+ <li>Il existe des plugins,extensions etskins qui permettent de changer son apparence et de lui ajouter des fonctions.</li>
+ <li>Vous pouvez écouter des centaines de radios sur internet.</li>
+ <li>Il existe un skin qui luidonne l'apparence de Windows Media Player.</li>
+ <li>.....etc</li>
+</ul>
+<p>VLC Media Player</p>
+<ul>
+ <li>Il lit absolument TOUS les formats audio et vidéos, sans que vous n'ayez rien à installer.</li>
+ <li>Il est gratuit et open-source.</li>
+ <li>Il à une interfacetrès légère, idéale pour les systèmes lents, ou si
+ vous ouvrez beaucoup de programmes en même temps.</li>
+ <li>Il gère les listes.</li>
+ <li>....etc</li>
+</ul>
+<hr />
+<table summary="Comparatif de Windamp et de VLC" border="1">
+ <tbody>
+ <tr><th>#</th>
+ <th><img class="t48" alt="Winamp" src="/img/moyen/winamp48.png" /></th>
+ <th><img class="t48" alt="VLC Media Player" src="/img/moyen/vlc48.png" /></th></tr>
+ <tr><th>Avantages</th>
+ <td>Il peutgérer une bibliothèque de fichiers audio et vidéos.<br /><br />
+ Il peut encoder/décoder(enregistrer/lire) une multitude de formats.<br /><br />
+ Il est gratuit.</td>
+ <td>Il lit tout, absolument tout.<br /><br />
+ Il peut gérer des listes.<br /><br />
+ Il est gratuit, open-source et en français.</td></tr>
+ <tr><th>Inconvénients</th>
+ <td>Il consomme beaucoup de ressources (mais moins que Windows Media Player).<br /><br />
+ Il a été repris par AOL.</td>
+ <td>Il ne peut pas gérer de bibliothèque.</td></tr>
+ <tr><th>Sites</th>
+ <td>Site officiel :
+ <a href="http://www.winamp.com" hreflang="en">http://www.winamp.com</a><br /><br />
+ Très bon site sur Winamp (non-officiel) :
+ <a href="http://www.winampfr.com/" hreflang="fr">http://www.winampfr.com/</a></td>
+ <td>Site officiel : <a href="http://www.videolan.org/" hreflang="en">http://www.videolan.org/</a></td></tr>
+ <tr><th>Télécharger</th>
+ <td><a href="winampnotice.php"><em>A lire avant de télécharger Winamp</em></a>
+ <table class='dl'>
+ <tbody>
+ <tr><th>Fichier</th><th>Depuis mon site</th><th>Depuis le site officiel</th></tr>
+ <tr><td>Winamp 5.24</td><td><a href="telecharger/winamp524.exe">winamp524.exe</a></td>
+ <td><a href="/autres/redir.php?redir=Winamp">[Redirection]</a></td></tr>
+ <tr><td>Traduction et dll</td>
+ <td><a href="telecharger/winampfr.exe">Traduction</a>
+ <a href="telecharger/ml_disc.dll">Dll</a></td>
+ <td><a href="/autres/redir.php?redir=TraductionWinamp">[Redirection]</a>
+ <a href="http://flateric78.free.fr/winampfr/ml_disc.dll">dll</a></td></tr>
+ <tr><td>Skin Windows Media Player</td>
+ <td><a href="telecharger/wmp10.wal">wmp10.wal</a></td>
+ <td><a href="/autres/redir.php?redir=SkinWMP">[Redirection]</a></td></tr>
+ <tr><td>Codec Ogg</td>
+ <td><a href="telecharger/ogg11.exe">ogg11.exe</a></td>
+ <td><a href="/autres/redir.php?redir=OGGWinamp">[Redirection]</a></td></tr></tbody></table></td>
+ <td>Télécharger VLC (version 0.8.5.0) :
+ <a href="http://www.videolan.org/vlc/download-windows.html" hreflang="en">Depuis le site officiel</a> (choisissez un site miroir)</td></tr>
+ </tbody></table>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 7797717b0b35b7cd97f11ffcd851718abc5949eb (mode 644)
--- /dev/null
+++ logiciels/winampnotice.php
+<?php
+$titre='Winamp : Notice';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+$head['access'][1]=array('rel'=>'prev','href'=>'./winamp.php','title'=>'Revenir à "Winamp / VLC" dans la rubrique des logiciels');
+$head='<link type="text/css" href="/autres/css/logwinamp.css" rel="stylesheet" />';
+require'../autres/source-haut.php'?>
+<p>Il y a eu une erreur dans le patch de traduction en français : les périphériques externes
+ (lecteurs cd, mp3..) n'étaient plus reconnus!</p>
+<p>Ce problème est maintenant réglé, il faut télécharger le fichier
+ <a href="telecharger/ml_disc.dll">telecharger/ml_disc.dll</a> si vous voulez utiliser le patch de traduction.</p>
+<p>L'installation de Winamp se résume donc à :
+ Téléchargez Winamp (<a href="telecharger/winamp524.exe">telecharger/winamp524.exe</a>)
+ et les skins/extensions/patchs/plugins que vous voulez (dont la traduction en français par exemple).</p>
+<p>Installer Winamp, puis les extensions que vous avez téléchargé(dont la traduction par exemple).</p>
+<p>Si vous avez téléchargé la traduction en français, téléchargez le fichier
+ <a href="telecharger/ml_disc.dll">telecharger/ml_disc.dll</a> et copiez le dans le dossier plugins
+ du répertoire d'installation de winamp (par défaut C:\Program Files\Winamp\Plugins).
+ Une fenêtre s'ouvre vous demandant si vous êtes surs de vouloir remplacer l'ancien fichier, dites oui.</p>
+<p>C'est bon, vous pouvez utiliser Winamp normalement.</p>
+<p><a href="winamp.php">Retour au logiciel</a></p>
+<hr />
+<table class='dl'>
+ <caption>Télécharger les fichiers</caption>
+ <tbody>
+ <tr><th>Fichier</th><th>Depuis mon site</th><th>Depuis le site officiel</th></tr>
+ <tr><td>Winamp 5.24</td><td><a href="telecharger/winamp524.exe">telecharger/winamp524.exe</a></td><td><a href="/autres/redir.php?redir=Winamp">[Redirection]</a></td></tr>
+ <tr><td>Traduction et dll</td>
+ <td><a href="telecharger/winampfr.exe">Traduction</a>
+ <a href="telecharger/ml_disc.dll">Dll</a></td>
+ <td><a href="/autres/redir.php?redir=TraductionWinamp">[Redirection]</a>
+ <a href="http://flateric78.free.fr/winampfr/ml_disc.dll">dll</a></td></tr>
+ <tr><td>Skin Windows Media Player</td>
+ <td><a href="telecharger/wmp10.wal">telecharger/wmp10.wal</a></td>
+ <td><a href="/autres/redir.php?redir=SkinWMP">[Redirection]</a></td></tr>
+ <tr><td>Codec Ogg</td>
+ <td><a href="telecharger/ogg11.exe">telecharger/ogg11.exe</a></td>
+ <td><a href="/autres/redir.php?redir=OGGWinamp">[Redirection]</a></td></tr></tbody></table>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 8382e47624793ff83c16efe2f8c93f04f28f95fb (mode 644)
--- /dev/null
+++ logiciels/xenu.php
+<?php
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+$titre='Xenu\'s Link Sleuth';
+require'../autres/source-haut.php'?>
+<h1><img class="t32" src="/img/moyen/xenu32.png" alt="Xenu" />Xenu's Link Sleuth</h1>
+<p>Ce freeware très pratique vérifie tous liens d'un site ou d'un fichier local : les pages, les images, les CSS...</p>
+<p>Vous pouvez repérer très vite les liens morts sur votre site et les rectifier.</p>
+<p>Il vous permet également de définir des règles pour vérifier ou pas certains fichiers et urls.</p>
+
+<p>Site officiel : <a href="http://home.snafu.de/tilman/xenulink.html" hreflang="en">http://home.snafu.de/tilman/xenulink.html</a></p>
+<p>Télécharger depuis mon site : <a href="telecharger/xenu.zip">telecharger/xenu.zip</a><br />
+Télécharger depuis le site officiel : <a href="http://home.snafu.de/tilman/XENU.ZIP">http://home.snafu.de/tilman/XENU.ZIP</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 3965d5b6e7639e62c47c7f435bab62ff0d6f8364 (mode 644)
--- /dev/null
+++ logiciels/zonealarm.php
+<?php
+$titre='Zone alarm';
+$head['access'][0]=array('rel'=>'index','href'=>'./','title'=>'Index de la rubrique "Logiciels"');
+require'../autres/source-haut.php'?>
+<h1><img class='t128' alt="Zone Alarm" src="/img/big/zonealarm128.png" />Zone Alarm</h1>
+<p>Je vous recommande VIVEMENT Zone Alarm en remplacement de Microsoft Firewall :</p>
+<ul>
+ <li>Il gère les connexions entrantes ET sortantes contrairement au firewall de Microsoft.</li>
+ <li>Il peut définir des règles (autorisations/interdictions) précises pour chaque logiciel.</li>
+ <li>Il possède une option pour bloquer tout le trafic en deux clics : utiles en cas de problème.</li>
+ <li>Il surveille vos e-mails pour voir s'ils ne contiennent
+ pas de virus ou de liens vers des sites de phishing (arnaque).</li>
+ <li>Vous pouvez le configurer dans les moindres détails.</li>
+ <li>Il est gratuit</li>
+</ul>
+<hr />
+<p>Site officiel : <a hreflang="en" href="http://www.zonelabs.com/">http://www.zonelabs.com/</a></p>
+<p>Voir également : <a href="/configurer/zonealarm.php">Configurer Zone Alarm</a></p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + 9f1bdc11c02aea4f432196bcf04227040bdf9739 (mode 644)
--- /dev/null
+++ logos/index.php
+<?php
+$head['css'][0]['filename']='logos.css';
+$head['autres']='<!--[if lt IE 7]><script type="text/javascript" src="affichage_png_ie.js"></script><![endif]-->';
+$titre='Logos';
+require'../autres/source-haut.php'?>
+<h1>Logos</h1>
+<hr />
+<p class="pintro"> vous trouverez beaucoup de logos de logiciels et autres, trouvés sur internet. Je donne également des liens vers des sites d'images, d'icones et de graphisme.
+ <br />
+ <strong>Attention, ces images ne sont pas de moi. Je n'ai aucun droit dessus, elles appartiennent a leurs auteurs respectifs.</strong>
+ <br /> Beaucoup d'images proviennent des sites indiqués
+</p>
+<p class="note"> Cette page contient beaucoup d'images, il est possible qu'elles ne s'affichent pas toutes au premier chargement.
+ <br /> Pour régler ce problème vous pouvez
+ <a href="./">RECHARGER LA PAGE</a>.
+</p>
+<!--[if IE]>
+<p>Internet Explorer rencontre des problèmes d'affichage avec cette page (mauvaise disposition/dimensions des images et mauvais affichages).<br />
+Pour régler cela, vous pouvez télécharger un navigateur respectueux des standards, comme <a href="../logiciels/firefox.php">Firefox</a><br />
+<a href="../logiciels/firefox.php">http://sylvain.sab.free.fr/logiciels/firefox.php</a></p>
+<![endif]-->
+<hr />
+<h2 id="logos">Logos</h2>
+ <h3 id="firefox1"><img class="t16" alt="" src="../img/mini/firefox16.png" />Firefox</h3>
+<h4 id="boutons11">Boutons</h4>
+<div class="aa img">
+ <img class="w180 h60" alt="" src="ff/b01.png" />
+ <img class="w180 h60" alt="" src="ff/b02.png" />
+ <img class="w180 h60" alt="" src="ff/b03.png" />
+ <img class="w180 h60" alt="" src="ff/b06.gif" />
+ <img class="w180 h60" alt="" src="ff/b07.gif" />
+ <img class="w180 h60" alt="" src="ff/b08.gif" />
+ <img class="w180 h60" alt="" src="ff/b09.gif" />
+ <img class="w180 h60" alt="" src="ff/b31.png" />
+ <img class="w180 h60" alt="" src="ff/b30.png" />
+ <img class="w120 h60" alt="" src="ff/b15.png" />
+ <img style="width:178px" class="h60" alt="" src="ff/b17.png" />
+ <img style="width:300px" class="h60" alt="" src="ff/b25.gif" />
+ <img class="w180 h60" alt="" src="ff/b32.png" />
+ <img class="w180 h60" alt="" src="ff/b33.png" />
+ <img style="width:220px;height:56px;" alt="" src="ff/b05.gif" />
+ <img class="w180 h60" alt="" src="ff/b04.gif" />
+ <img class="w180 h60" alt="" src="ff/b29.png" />
+ <img class="w180 h60" alt="" src="ff/b36.png" />
+ <img class="w180 h60" alt="" src="ff/b34.gif" />
+ <img class="w180 h60" alt="" src="ff/b35.png" />
+ <img style="width:153px;height:58px;" alt="" src="ff/b37.png" />
+ <img style="width:158px" class="h60" alt="" src="ff/b38.gif" />
+ <img style="width:158px;" class="h60" alt="" src="ff/b39.gif" />
+ <img class="w120 h60" alt="" src="ff/b41.gif" />
+ <img class="w120 h60" alt="" src="ff/b42.gif" />
+ <img class="w180 h60" alt="" src="ff/b44.png" />
+ <img class="w110 h32" alt="" src="ff/b13.png" />
+ <img class="w110 h32" alt="" src="ff/b14.png" />
+ <img style="width:141px" class="h32" alt="" src="ff/b18.png" />
+ <img style="width:131px" class="h32" alt="" src="ff/b19.png" />
+ <img class="w200 h38" alt="" src="ff/b16.png" />
+ <img style="width:134px;height:15px;" alt="" src="ff/b21.png" />
+ <img style="width:87px;height:13px;" alt="" src="ff/b22.gif" />
+ <img style="width:185px;height:72px;" alt="" src="ff/b23.png" />
+ <img style="width:150px;height:58px;" alt="" src="ff/b24.png" />
+ <img style="width:88px;height:31px;" alt="" src="ff/b26.gif" />
+ <img style="width:150px;height:31px;" alt="" src="ff/b27.png" />
+ <img style="width:88px;height:31px;" alt="" src="ff/b28.png" />
+ <img class="w110 h32" alt="" src="ff/b43.gif" />
+ <img class="w180 h60" alt="" src="ff/b45.gif" />
+ <img class="w180 h60" alt="" src="ff/b46.png" />
+ <img style="width:550px;height:150px;" alt="" src="ff/b46.gif" />
+</div>
+<h4 id="crystal11">'Crystalisé'</h4>
+<div class="ab img">
+ <img class="t256" alt="" src="ff2/b01.png" />
+ <img class="t256" alt="" src="ff2/b02.png" />
+ <img class="t256" alt="" src="ff2/b03.png" />
+ <img class="t256" alt="" src="ff2/b24.png" />
+ <img class="t256" alt="" src="ff2/b04.png" />
+ <img class="t256" alt="" src="ff2/b05.png" />
+ <img class="t256" alt="" src="ff2/b06.png" />
+ <img class="t256" alt="" src="ff2/b07.png" />
+ <img class="t256" alt="" src="ff2/b08.png" />
+ <img class="t250" alt="" src="ff2/b09.jpg" />
+ <img class="w196 h196" alt="" src="ff2/b10.jpg" />
+ <img style="width:192px" class="h192" alt="" src="ff2/b11.png" />
+ <img style="width:173px" class="h192" alt="" src="ff2/b12.png" />
+ <img class="t128" alt="" src="ff2/b13.png" />
+ <img class="t128" alt="" src="ff2/b14.png" />
+ <img class="t128" alt="" src="ff2/b15.png" />
+ <img class="t128" alt="" src="ff2/b16.png" />
+ <img class="t128" alt="" src="ff2/b17.png" />
+ <br />
+ <img class="t128" alt="" src="ff2/b18.png" />
+ <img class="t128" alt="" src="ff2/b19.png" />
+ <img class="t128" alt="" src="ff2/b20.png" />
+ <img class="t128" alt="" src="ff2/b21.png" />
+ <img class="t64" alt="" src="ff2/b22.png" />
+ <img class="t64" alt="" src="ff2/b23.jpg" />
+</div>
+<h4 id="dessin11">'Dessin'</h4>
+<div class="ac img">
+ <img class="t128" alt="" src="ff3/b01.png" />
+ <img class="t128" alt="" src="ff3/b02.png" />
+ <img class="t128" alt="" src="ff3/b03.png" />
+ <img class="t128" alt="" src="ff3/b07.png" />
+ <img class="t128" alt="" src="ff3/b08.png" />
+ <img class="t128" alt="" src="ff3/b04.png" />
+ <img class="w80 h80" alt="" src="ff3/b05.png" />
+</div>
+<h4 id="normal11">Normal / Autres</h4>
+<div class="img">
+ <img class="t256" alt="" src="ff4/b01.png" />
+ <img class="t256" alt="" src="ff4/b02.png" />
+ <img class="t256" alt="" src="ff4/b03.png" />
+ <img class="t256" alt="" src="ff4/b04.png" />
+ <img class="t256" alt="" src="ff4/b05.png" />
+ <img style="width:450px;height:435px;" alt="" src="ff4/b06.png" />
+ <img style="width:450px;height:460px;" alt="" src="ff4/b07.jpg" />
+ <img style="width:500px;height:400px;" alt="" src="ff4/b08.png" />
+ <img style="width:154px;height:139px;" alt="" src="ff4/b30.png" />
+ <img style="width:154px;height:139px;" alt="" src="ff4/b31.png" />
+ <br />
+ <img style="width:107px;height:120px;" alt="" src="ff4/b32.gif" />
+ <img class="w110 h110" alt="" src="ff4/b33.gif" />
+ <img style="width:132px;height:100px;" alt="" src="ff4/b37.png" />
+ <br />
+ <br />
+ <img style="width:200px;height:272px;" alt="" src="ff4/b34.png" />
+ <img style="width:200px;height:272px;" alt="" src="ff4/b35.png" />
+ <br />
+ <img style="width:236px;height:247px;" alt="" src="ff4/b36.gif" />
+ <img class="w192 h192" alt="" src="ff4/b09.png" />
+ <img class="w192 h192" alt="" src="ff4/b10.png" />
+ <img style="width:175px;height:175px;" alt="" src="ff4/b11.png" />
+ <img style="width:175px;height:169px;" alt="" src="ff4/b12.jpg" />
+ <img style="width:160px;height:160px;" alt="" src="ff4/b13.png" />
+ <img style="width:150px;height:150px;" alt="" src="ff4/b14.jpg" />
+ <img style="width:150px;height:138px;" alt="" src="ff4/b15.jpg" />
+ <img class="t128" alt="" src="ff4/b16.png" />
+ <img class="t128" alt="" src="ff4/b17.png" />
+ <img class="t128" alt="" src="ff4/b18.png" />
+ <img class="t128" alt="" src="ff4/b19.png" />
+ <img class="t128" alt="" src="ff4/b20.png" />
+ <img class="t128" alt="" src="ff4/b21.png" />
+ <img class="t128" alt="" src="ff4/b22.png" />
+ <img class="w80 h80" alt="" src="ff4/b24.png" />
+ <img style="width:79px;height:77px;" alt="" src="ff4/b25.jpg" />
+ <img class="t48" alt="" src="ff4/b26.png" /><br />
+ <img style="width:800px;height:709px;" alt="" src="ff4/b29.jpg" />
+ <img style="width:640px;height:480px;" alt="" src="ff4/b28.jpg" />
+</div>
+<div class="liens">
+ <hr class="t20" />
+ Plus d'images sur Firefox :<br />
+ <a href="http://homeusers.brutele.be/jpbardiau/" hreflang="en">http://homeusers.brutele.be/jpbardiau/</a><br />
+ <a href="http://www.mozilla.org/products/firefox/buttons.html" hreflang="en">http://www.mozilla.org/products/firefox/buttons.html</a><br />
+ <a href="http://www.firefox-browser.de/forum/viewtopic.php?t=2657" hreflang="de">http://www.firefox-browser.de/forum/viewtopic.php?t=2657</a><br />
+ <a href="http://www.graphicsguru.com/" hreflang="en">http://www.graphicsguru.com/</a><br />
+ <a href="http://www.firefox-browser.de/forum/viewtopic.php?t=2064" hreflang="de">http://www.firefox-browser.de/forum/viewtopic.php?t=2064</a><br />
+ <a href="http://xul.ru/fun.php" hreflang="ru">http://xul.ru/fun.php</a><br />
+ <a href="http://burntelectrons.org/media/fx-buttons/" hreflang="en">http://burntelectrons.org/media/fx-buttons/</a><br />
+ <a href="http://customxp.net/images/PngFactory/index.php?search=firefox" hreflang="fr">http://customxp.net/images/PngFactory/index.php?search=firefox</a><br />
+ <a href="http://www.geckozone.org/forum/viewtopic.php?t=9503" hreflang="fr">http://www.geckozone.org/forum/viewtopic.php?t=9503</a>
+</div>
+<h3 id="thunderbird2"><img class="t16" alt="" src="/img/mini/thunderbird16.png" />Thunderbird</h3>
+<h4 id="boutons21">Boutons</h4>
+<div class="ba img">
+ <img style="width:94px;height:15px;" alt="" src="thunder1/b1.png" />
+ <img class="w80 h15" alt="" src="thunder1/b2.gif" />
+ <img class="w80 h15" alt="" src="thunder1/b3.png" />
+ <img class="w110 h32" alt="" src="thunder1/b4.png" />
+ <img style="width:88px;height:31px" alt="" src="thunder1/b6.png" />
+ <img style="width:178px" class="h60" alt="" src="thunder1/b5.png" />
+ <img style="width:125px" class="h80" alt="" src="thunder1/b7.png" />
+ <img style="width:185px;height:105px;" alt="" src="thunder1/b8.png" />
+</div>
+<h4 id="crystalise22">"Crystalisé"</h4>
+<div class="bb img">
+ <img class="t128" alt="" src="thunder2/b01.png" />
+ <img class="t128" alt="" src="thunder2/b02.png" />
+ <img class="t128" alt="" src="thunder2/b03.png" />
+ <img class="t192" alt="" src="thunder2/b04.png" />
+ <img class="w200 h200" alt="" src="thunder2/b05.png" />
+ <img class="t256" alt="" src="thunder2/b14.png" />
+ <img class="t256" alt="" src="thunder2/b06.png" />
+ <img class="t256" alt="" src="thunder2/b07.png" />
+ <img class="t256" alt="" src="thunder2/b09.png" />
+ <img class="t256" alt="" src="thunder2/b08.png" />
+ <img class="t256" alt="" src="thunder2/b13.png" />
+ <img class="t256" alt="" src="thunder2/b10.png" />
+ <img class="t256" alt="" src="thunder2/b12.png" />
+ <img class="t256" alt="" src="thunder2/b11.png" />
+</div>
+<h4 id="dessin23">Dessin</h4>
+<div class="bc img">
+ <img class="t128" alt="" src="thunder3/b1.png" />
+ <img class="t128" alt="" src="thunder3/b2.png" />
+ <img class="t128" alt="" src="thunder3/b3.png" />
+ <img class="t256" alt="" src="thunder3/b01.png" />
+</div>
+<h4 id="autres24">Oiseaux</h4>
+<div class="img">
+ <img class="t128" alt="" src="thunder4/b01.png" />
+ <img class="t128" alt="" src="thunder4/b02.png" />
+ <img class="t256" alt="" src="thunder4/b03.png" />
+ <img class="t256" alt="" src="thunder4/b04.png" />
+ <br />
+ <img class="t256" alt="" src="thunder4/b05.png" />
+ <img class="t256" alt="" src="thunder4/b06.png" />
+ <br />
+ <img class="t256" alt="" src="thunder4/b07.png" />
+ <img class="t256" alt="" src="thunder4/b08.png" />
+</div>
+<h4 id="autres25">Autres</h4>
+<div class="be img">
+ <img style="width:286px;height:374px;" alt="" src="thunder5/b01.jpg" />
+ <img style="width:282px;height:225px;" alt="" src="thunder5/b12.jpg" />
+ <br />
+ <img style="width:205px;height:205px;" alt="" src="thunder5/b02.png" />
+ <img style="width:153px;height:153px;" alt="" src="thunder5/b07.gif" />
+ <img class="w150 h150" alt="" src="thunder5/b08.png" />
+ <br />
+ <img style="width:339px;height:160px;" alt="" src="thunder5/b03.png" />
+ <br />
+ <img style="width:149px;height:151px;" alt="" src="thunder5/b09.png" />
+ <img class="t128" alt="" src="thunder5/b05.png" />
+ <img class="w80 h80" alt="" src="thunder5/b06.png" />
+ <br />
+ <br />
+ <img style="width:282px;height:215px;" alt="" src="thunder5/b10.png" />
+ <img style="width:293px;height:222px;" alt="" src="thunder5/b11.jpg" />
+ <br />
+ <br />
+ <img style="width:420px;height:303px;" alt="" src="thunder5/b14.jpg" />
+ <img style="width:153px;height:173px;" alt="" src="thunder5/b18.gif" />
+ <br />
+ <img style="width:239px;height:142px;" alt="" src="thunder5/b16.jpg" />
+ <img style="width:300px;height:224px;" alt="" src="thunder5/b15.jpg" />
+ <br />
+ <br />
+ <img style="width:718px;height:251px;" alt="" src="thunder5/b17.png" />
+</div>
+<div class="liens">
+ <hr class="t20" />
+ Plus d'images sur Thunderbird :<br />
+ <a hreflang="en" href="http://www.mozilla.org/products/thunderbird/buttons.html">http://www.mozilla.org/products/thunderbird/buttons.html</a><br />
+ <a hreflang="fr" href="http://customxp.net/images/PngFactory/index.php?search=thunderbird">http://customxp.net/images/PngFactory/index.php?search=thunderbird</a>
+</div>
+<h3 id="nvu3"><img class="t16" alt="" src="../img/mini/nvu16.png" />Nvu</h3>
+<div class="ca img">
+ <img class="t256" alt="" src="nvu/b1.png" />
+ <img class="t256" alt="" src="nvu/b2.png" />
+ <br />
+ <img class="t256" alt="" src="nvu/b3.png" />
+ <img class="t256" alt="" src="nvu/b4.png" />
+ <br />
+ <img class="t256" alt="" src="nvu/b5.png" />
+ <img class="t256" alt="" src="nvu/b6.png" />
+ <br />
+ <img class="w80 h15" alt="" src="nvu/b7.gif" />
+ <br />
+ <img class="w80 h15" alt="" src="../img/rect/faitnvu.png" />
+</div>
+<h3 id="mozilla4"><img class="t16" alt="" src="../img/mini/icmozilla.png" />Mozilla</h3>
+<div class="da img">
+ <img class="t128" alt="" src="mozilla/b01.png" />
+ <img class="t128" alt="" src="mozilla/b02.png" />
+ <img class="t128" alt="" src="mozilla/b03.png" />
+ <img class="t128" alt="" src="mozilla/b04.png" />
+ <img class="t128" alt="" src="mozilla/b05.png" />
+ <img class="t128" alt="" src="mozilla/b06.png" />
+ <br />
+ <img class="t48" alt="" src="mozilla/b13.png" />
+ <img class="t48" alt="" src="mozilla/b12.png" />
+ <img class="t128" alt="" src="mozilla/b07.png" />
+ <img class="t128" alt="" src="mozilla/b08.png" />
+ <img class="t192" alt="" src="mozilla/b09.png" />
+ <br />
+ <img class="t192" alt="" src="mozilla/b10.png" />
+ <img class="t192" alt="" src="mozilla/b11.png" />
+ <img class="t256" alt="" src="mozilla/b14.png" />
+ <br />
+ <img style="width:233px;height:351px;" alt="" src="mozilla/b15.png" />
+ <img style="width:250px;height:367px;" alt="" src="mozilla/b24.gif" />
+ <br />
+ <br />
+ <img style="width:513px;height:513px;" alt="" src="mozilla/b21.png" />
+ <br />
+ <br />
+ <img style="width:125px;height:124px;" alt="" src="mozilla/b22.png" />
+ <img class="w200 h200" alt="" src="mozilla/b20.gif" />
+ <img style="height:160px;" class="w180" alt="" src="mozilla/b25.gif" />
+ <br /><br />
+ <img style="width:339px;height:211px;" alt="" src="mozilla/b16.gif" />
+ <br />
+ <img style="width:390px;height:260px;" alt="" src="mozilla/b28.gif" />
+ <img style="width:392px;height:263px;" alt="" src="mozilla/b26.jpg" />
+ <br />
+ <br />
+ <img style="width:640px;height:480px;" alt="" src="mozilla/b27.png" />
+ <br />
+ <br />
+ <img style="width:380px;height:380px;" alt="" src="mozilla/b29.png" />
+ <img style="width:390px;height:261px;" alt="" src="mozilla/b31.jpg" />
+ <br />
+ <br />
+ <img class="t256" alt="" src="mozilla/b17.png" />
+ <img class="t256" alt="" src="mozilla/b18.png" />
+ <img class="t128" alt="" src="mozilla/b19.png" />
+</div>
+<div class="liens">
+ <hr class="t20" />
+ Plus d'images sur Mozilla :<br />
+ <a href="http://mozilla.tlk.fr/splash.php" hreflang="fr">http://mozilla.tlk.fr/splash.php</a><br />
+ <a href="http://customxp.net/images/PngFactory/index.php?search=mozilla" hreflang="fr">http://customxp.net/images/PngFactory/index.php?search=mozilla</a><br />
+ <a href="http://www.pali.sk/mozilla/splash.html" hreflang="en">http://www.pali.sk/mozilla/splash.html</a>
+</div>
+<h3 id="autres5">Autres</h3>
+<div class="da img">
+ <img style="width:350px;height:300px;" alt="" src="autres/02.jpg" />
+ <img style="width:144px;height:168px;" alt="" src="autres/03.png" />
+ <br />
+ <br />
+ <img style="width:655px;height:174px;" alt="" src="autres/04.jpg" />
+ <br />
+ <br />
+ <img class="t512" alt="" src="autres/05.png" />
+ <br />
+ <br />
+ <img style="width:172px;height:124px;" alt="" src="autres/06.jpg" />
+ <img style="width:70px;height:16px;" alt="" src="autres/08.png" />
+ <br />
+ <br />
+ <img style="width:640px;height:477px;" alt="" src="autres/07.gif" />
+</div>
+<h3 id="zonealarm6"><img class="t16" alt="" src="../img/mini/zonealarm16.png" />Zone Alarm</h3>
+<div class="ea img">
+ <img class="t256" alt="" src="za1/b01.png" />
+ <img class="t256" alt="" src="za1/b02.png" />
+ <img class="t256" alt="" src="za1/b03.png" />
+ <br />
+ <img class="t256" alt="" src="za1/b04.png" />
+ <img class="t256" alt="" src="za1/b05.png" />
+ <img class="t256" alt="" src="za1/b06.png" />
+ <br />
+ <img class="t256" alt="" src="za1/b07.png" />
+ <img class="t256" alt="" src="za1/b08.png" />
+ <br />
+ <img class="t256" alt="" src="za1/b09.png" />
+ <img class="t256" alt="" src="za1/b10.png" />
+</div>
+<hr />
+<p>Plus d'images et de logos :<br />
+<a href="../liens.php#images">http://sylvain.sab.free.fr/liens.php#images</a>
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + e04db9f7985b73aab21916245350da8b8a220575 (mode 644)
--- /dev/null
+++ mail/bonjour.php
+<?php
+$destinataire='sylvain';
+$destinataire.='.saboua';
+$arobase='@';
+$domaine='laposte';
+$tld='.net';
+$mail=$destinataire.$arobase.$domaine.$tld;
+?>
blob - /dev/null
blob + 1fddd1f025463f06f841a41dada736c72d958f7e (mode 644)
--- /dev/null
+++ mail/index.php
+<?php
+if(isset($_POST['message']))
+ $SQL['TypePage']=2;
+else
+ $SQL['TypePage']=1;
+if(strpos($_SERVER['HTTP_ACCEPT'],'application/xhtml+xml')!==false)
+ $TypeMIMEJS='application/x-javascript';
+else
+ $TypeMIMEJS='text/javascript';
+$head['css'][0]['filename']='mail';
+//$head['autres']='<link rel="script" type="'.$TypeMIMEJS.'" href="/autres/scripts/mail.php?TypeMIME='.$TypeMIMEJS.'" />'."\n\t".'<script type="'.$TypeMIMEJS.'" src="/autres/scripts/mail.php?TypeMIME='.$TypeMIMEJS.'"></script>';
+$titre='Me contacter';
+require'../autres/source-haut.php'?>
+<h1>Contact</h1>
+<p>Je ne répondrais pas aux demandes d'aide pour problèmes informatiques en tout genres, je n'ai pas le temps.
+ Il y a déjà plusieurs forums sur internet faits pour ça.</p>
+<?php
+$Previsualiser='<p class="bt">
+<input type="submit" name="previsualiser" id="previsualiser" tabindex="3" value="Previsualiser" /></p>';
+$Envoi="\n".'<p class="bt">
+<input name="envoi" tabindex="4" id="envoi" value="Envoyer" type="submit" /></p>';
+$checkeddefaut='checked="checked" ';
+$checkedbug='';
+$checkedccm='';
+if(isset($_POST['objet']))
+{
+ $objet=htmlentities($_POST['objet']);
+ if($objet=='bug')
+ {$objet='[BUG]';$checkedbug='checked="checked" ';}
+ elseif($objet=='ccm')
+ {$objet='[CCM]';$checkedccm='checked="checked" ';}
+ else
+ {$objet='Discussion';$checkeddefaut='checked="checked" ';}
+}
+$objetecho='
+ <p id="radio">Quel est l\'objet de votre message ?<br />
+ <label for="defaut" id="LabelRadioDefaut"><input type="radio" name="objet" value="defaut" id="defaut" '.$checkeddefaut.'/>Tout et rien, juste discuter</label>
+ <label for="bug" id="LabelRadioBug"><input type="radio" name="objet" value="bug" id="bug" '.$checkedbug.'/>Problème sur ce site</label>
+ <label for="ccm" id="LabelRadioCCM"><input type="radio" name="objet" value="ccm" id="ccm" '.$checkedccm.'/>Je suis membre de CCM</label>
+ </p>';
+if (isset($_POST['message']))
+ {
+ // La variable $verif va nous permettre de vérifier si la sémantique de l'email est bonne
+ $verif='#^[\w.-]+@[\w.-]+\.[a-z]{2,6}$#';
+
+ // On assigne et/ou protège nos variables
+ $votremail=stripslashes(htmlentities($_POST['votremail']));
+ $message=stripslashes(htmlspecialchars($_POST['message'],ENT_NOQUOTES));
+ $envoi=isset($_POST['envoi']);
+ $previsualiser=isset($_POST['previsualiser']);
+ $votremail=trim($votremail);
+ $message=trim($message);
+ $apercu_resultat='<p>Aperçu du résultat :</p>';
+
+
+ /*On vérifie si l'e mail et le message sont pleins, et on agit en fonction.
+ (on affiche Apercu du resultat, tel ou tel champ est vide, etc...*/
+ //Si ca ne vas pas (mal rempli, mail non valide...)
+ if ((empty($message))or(!preg_match($verif,$votremail)))
+ {
+ if (empty($votremail)and(empty($message)))
+ {
+ echo '<p>Tous les champs sont vides.</p>';
+ $message='';
+ $votremail='';
+ $apercu_resultat='';
+ }
+ else
+ {
+ if (empty($votremail))
+ {
+ echo '<p>Vous n\'avez pas donné votre adresse e-mail.</p>';
+ $votremail='';
+ }
+ elseif (!preg_match($verif,$votremail))
+ echo '<p>Votre adresse e-mail n\'est pas valide.</p>';
+ if (empty($message))
+ {
+ echo '<p>Votre message est vide.</p>';
+ $apercu_resultat='';
+ $message='';
+ }
+ }
+ }
+ //Si les deux sont pleins et que l'adresse est valide, on envoie on on prévisualise sans envoi
+ else
+ {
+ $domaine=preg_replace('#[^@]+@(.+)#','$1',$votremail);
+ $DomaineMailExiste=checkdnsrr($domaine,'MX');
+ if (preg_match('#^(sylvain\.sab(oua@laposte\.net|@free\.fr)|ssylvainsab@free\.fr)$#',$votremail))
+ echo '<p>Merci de ne pas entrer l\'adresse du Webmaster !</p>';
+ elseif(!$DomaineMailExiste)
+ echo'<p>Le nom de domaine ('.$domaine.') de l\'adresse e-mail ('.$votremail.') que vous avez donné n\'existe pas.</p>';
+ elseif($previsualiser)
+ {
+ $apercu_resultat='<p>Votre message et votre adresse e-mail sont valides et prêts à être envoyés.
+ <br />Vous n\'avez plus qu\'à cliquer sur le bouton "Envoyer".<br />Prévisualisation :</p>';
+ $Previsualiser='';
+ }
+ elseif($envoi)
+ {
+ require'bonjour.php';
+ if(!function_exists('htmlspecialchars_decode'))
+ {
+ function htmlspecialchars_decode($texte)
+ {
+ return str_replace(
+ array('&','<','>',''','"'),
+ array('&','<','>','\'','"'),
+ $texte);
+ }
+ }
+ $objet='[SITE] : '.$objet;
+ $headers='From:'.$votremail."\r\n".'To:'.$mail."\r\n".'Subject:'.$objet."\r\n".'Content-type:text/plain;charset=iso-8859-1'."\r\n".'Sent:'.date('l, F d, Y H:i');
+ if(@mail($mail,htmlspecialchars_decode($objet),htmlspecialchars_decode($message),$headers))
+ {
+ echo '<p>Votre message a bien été envoyé. Merci.</p><p><a href="/">Retour à la page d\'accueil</a></p>';
+ require'../autres/source-bas.php';
+ exit;
+ }
+ echo'<p>Un problème est survenu durant l\'envoi du mail.</p>';
+ }
+ else
+ echo'<p>Une condition innatendue est survenue lors du traitement des informations.</p>';
+ }
+echo $apercu_resultat;
+ }
+else
+ {
+ echo '<p>Vous pouvez me contacter à l\'adresse suivante :<br />
+ <img style="width:276px;height:29px;" alt="L\'adresse e-mail est une image. Vous pouvez utiliser le formulaire de contact." src="mail.gif" />
+</p>
+<p>Ou avec ce formulaire :</p>';
+ $votremail='';$message='';
+ }
+$bas_formulaire=$Previsualiser.$Envoi;
+?>
+<form method="post" action="index.php" enctype="multipart/form-data" id="FormulaireContact">
+ <?php echo $objetecho;?>
+
+ <p id="adr"><label for="votremail">Votre Adresse E-mail<br />
+ <input name="votremail" tabindex="1" size="30" type="text" id="votremail" value="<?php echo $votremail; ?>" /></label></p>
+
+ <p id="msg"><label for="message">Votre message<br />
+ <textarea tabindex="2" rows="20" cols="120" name="message" id="message"><?php echo $message; ?></textarea>
+ </label></p>
+
+ <?php echo $bas_formulaire;?>
+ <div id="ResultatValidationForm"> </div>
+</form>
+<div><span style="color: rgb(192, 192, 192);">--<br />
+Sylvain</span><br />
+<a href="/">http://sylvain.sab.free.fr/</a></div>
+<?php require'../autres/source-bas.php'?>
\ No newline at end of file
blob - /dev/null
blob + 91c7f18d4656bb7d3054a80c133cac644427f47f (mode 644)
Binary files /dev/null and mail/mail.gif differ
blob - /dev/null
blob + 08f9ff99c35cc3f01274816cd6e88cdbe73241f5 (mode 644)
Binary files /dev/null and mail/mail2.gif differ
blob - /dev/null
blob + 2783cccb8fc221257cdfeb33facd4c95665e8f45 (mode 644)
--- /dev/null
+++ news.php
+<?php
+$titre='News';
+$head['css'][0]['filename']='news';
+require'autres/source-haut.php'?>
+<h1>News</h1>
+<hr />
+<p style="display:block;">
+ <a href="rss/">
+ <img style="width:80px;height:15px" alt="Flux RSS" title="Le Flux RSS de ce site." src="img/rect/rectrss.png" /></a>
+ Voir les news par <em>Flux RSS</em> : <a href="rss/">rss/</a></p>
+<hr />
+<table summary="Quelles news voir ?" class="quevoir" border="1" cellpadding="2" cellspacing="2">
+<caption>Voir les news de :</caption>
+ <tbody>
+ <tr><td>Année</td><td colspan="7">Mois</td></tr>
+ <tr><td><a href="#juin06">2006</a></td>
+ <td><a href="#juin06">Juin</a></td>
+ <td><a href="#juillet06">Juillet</a></td>
+ <td><a href="#aout06">Août</a></td>
+ <td><a href="#septembre06">Septembre</a></td>
+ <td><a href="#octobre06">Octobre</a></td>
+ <td><a href="#novembre06">Novembre</a></td>
+ <td><a href="#decembre06">Décembre</a></td></tr>
+ <tr><td><a href="#janvier07">2007</a></td>
+ <td colspan="3"><a href="#janvier07">Janvier</a></td>
+ <td colspan="3"><a href="#fevrier07">Février</a></td>
+ <td><a href="#aout07">Août</a></td></tr></tbody></table>
+<hr />
+<!--A O U T-->
+<h2 id="aout07">Dimanche 9 septembre 2007</h2>
+ <p>Après plus de six mois d'absence, pour diverses raisons, j'ai enfin mis à jour le site !</p>
+ <p>Voici pour commencer, <a href="/cestquoi/gnu-linux">un article sur Linux</a> dans la rubrique
+ "C'est quoi", ainsi qu'<a href="/cestquoi/libre">un article sur le logiciel libre</a>, dans la même rubrique.</p>
+<!--F E V R I E R-->
+<h2 id="fevrier07">Vendredi 2 Février 2007</h2>
+ <p>Ajout d'<a href="/configurer/thunderbird.php">un article pour configurer Thunderbird</a> avec les règles de filtrage et deux astuces.</p>
+<!--J A N V I E R-->
+<h2 id="janvier07">Samedi 27 Janvier 2007</h2>
+ <p>Après l'explication sur les serveurs, j'ai ajouté <a href="/cestquoi/web/hebergement.php">un article sur les hébergeurs et l'hébergement</a>.</p>
+<!--D E C E M B R E-->
+<h2>Samedi 30 Décembre 2006</h2>
+ <p>J'ai ajouté <a href="/apropos/stats.php">une page sur les statistiques du site</a>.
+ Vous y trouverez entre autres le nombre de visiteurs, les pages les plus vues et
+ le nombre de pages qu'ont vu les visiteurs les plus connectés.<br />
+ J'utilise l'adresse IP pour ces statistiques, mais elle est cryptée, c'est à dire transformée.
+ Donc je ne peux pas avoir d'informations sur vous à partir de cette adresse.
+ Par exemple, voici ce que donne "samedi" crypté : 785ee49b7e2b0e5f10791f06364fb8d17291d1d8</p>
+<h2>Mardi 26 Décembre 2006</h2>
+ <p>Joyeux Noël</p>
+ <p>J'ai ajouté <a href="/cestquoi/web/serveur.php">un article sur les notions de client et de serveur</a> sur le Web.</p>
+<h2 id="decembre06">Samedi 9 Décembre 2006</h2>
+ <p><a href='/logiciels/dbpoweramp.php'>dBPowerAMP Music Converter</a>
+ est un logiciel qui permet de convetir des fichiers dans plusieurs formats.</p>
+<!--N O V E M B R E-->
+<h2>Dimanche 26 Novembre 2006</h2>
+ <p>J'ai ajouté beaucoup de <a href='/liens.php'>liens</a>. Ils proviennent notamment des
+ <a href="http://sebsauvage.net/favs.html" hreflang="fr">favoris de sebsauvage</a> et <a href="/pages/">des miens</a>.</p>
+ <p>J'ai également fait des lègères modifications sur l'ensemble du site :</p>
+ <ul><li>Le site est en xhtml 1.1. C'est la dernière version du xhtml, plus stricte.<br />
+ Avec certains navigateurs, la moidre erreur empêche d'afficher la page.
+ De cette façon je sais que mes pages sont parfaitement valides.<br />
+ De plus, le lien pour valider la page en cours ne dirige plus vers le W3C,
+ mais vers le <a href="http://validome.org/" class="fr">validome</a>, bien plus performant.</li>
+ <li>J'ai supprimé les arrangements pour Internet Explorer.
+ Après tout, pourquoi est-ce que je me préoccuperais d'un navigateur qui ne respècte pas les standards ?
+ Pour ceux qui ont ce navigateur, vous pouvez <a href='/logiciels/firefox.php'>en changer</a>.</li>
+ <li>Sur la plupart des pages, la langue du lien
+ (<a hreflang="fr">français</a> ou <a hreflan="en">anglais</a>, ainsi que quelques autres langues) est indiquée.</li></ul>
+ <p>Enfin, j'ai coloré les codes dans les pages suivantes :<br />
+ <a href='/cestquoi/programmation/'>C'est quoi la programmation ?</a><br />
+ <a href='/cestquoi/web/'>C'est quoi xhtml ?</a><br />
+ <a href='/cestquoi/web/css.php'>C'est quoi les CSS ?</a></p>
+<h2 id="novembre06">Jeudi 2 Novembre 2006</h2>
+ <p>Dans les logiciels, j'ai ajouté <a href="/logiciels/shoot2png.php">Shoot2png</a>,
+ un très bon freeware (logiciel gratuit) pour faire des captures d'écran</p>
+<!--O C T O B R E-->
+<h2>Dimanche 29 Octobre 2006</h2>
+ <p><a href='/apropos/licence.php'>Le contenu de mon site est maintenant sous Licence Creative Commons</a>,
+ une licence plus souple que le copyright.<br />
+ Cette page fait partie de la rubrique "<a href="/apropos/">A propos de ce site</a>".</p>
+<h2>Jeudi 26 Octobre 2006</h2>
+ <p>La version 2.0 de <a href="logiciels/firefox.php">Firefox</a> est enfin disponible ! Vous pouvez voir
+ l'<a href="http://www.commentcamarche.net/actualites/firefox-interview-et-version-2-0-finale-2437007-actualite.php3" hreflang="fr">article
+ correspondant sur ccm</a>, avec les explications de quelques nouveautés.<br />
+ Une nouvelle version de <a href="logiciels/ccleaner.php">Ccleaner</a> est également disponible.<br />
+ Je propose ces deux logiciels en téléchargement.</p>
+<h2>Samedi 21 Octobre 2006</h2>
+ <p>J'ai légèrement refait le design du site (les titres ne sont plus présentés de la même façon) et j'ai allégé mes fichiers css
+ avec le site <a href="http://flumpcakes.co.uk/css/optimiser/" hreflang="en">http://flumpcakes.co.uk/css/optimiser/</a></p>
+ <p><a href="/logiciels/firefox.php#opera">Opera</a> est un bon navigateur, <a href="/logiciels/firefox.php#lynx">Lynx</a>
+ est un navigateur en mode texte.</p>
+ <p><a href="/logiciels/xenu.php">Xenu's Link Sleuth</a> est un freeware utile pour vérifier tous les liens d'un site ou d'un fichier local.</p>
+<h2>Mercredi 11 Octobre 2006</h2>
+ <p>Dans la rubrique "C'est quoi", ajout de "<a href="cestquoi/programmation/">C'est quoi la programmation ?</a>"</p>
+<h2 id="octobre06">Samedi 7 Octobre 2006</h2>
+ <p>J'ai refait la page des logiciels. J'ajoute une petite description pour chaque logiciel,
+ et les images sont pour la plupart aux dimensions 48x48 ou 32x32 pixels.<br />
+ J'ai également ré-organisé légèrement les catégories.<br />
+ <del>Si vous utilisez Internet Explorer, les images seront au format gif. Avec un autre navigateur, elles seront au format png.<br />
+ C'est du au fait que Internet Explorer ne supporte pas la transparence des fichiers png,
+ il les affiche avec un moche fond bleu. J'utilise une regex en php pour changer la source de l'image selon le navigateur.<br />
+ Vous pouvez voir la source de la page en ajoutant "?source" a l'url : <a href="logiciels/?source">logiciels/?source</a></del></p>
+ <p>La page des logos est aussi refaite, mais cela ne se voit pas.
+ J'ai supprimé les tableaux et les attributs alt des images (ce sont des images purement décoratives).</p>
+ <p>Et enfin, j'ai refait le fichier xslt qui affiche mon flux RSS. Il est ici :
+ "<a href="/rss/rss.xslt">/rss/rss.xslt</a>".</p>
+<!--S E P T E M B R E-->
+<h2>Samedi 30 Septembre 2006</h2>
+ <p>J'ai rédigé la page "<a href="cestquoi/web/css.php">C'est quoi les CSS ?</a>".
+ Le CSS est un langage utilisé pour faire la mise en page des sites, en complément du xhtml.</p>
+ <p>Quelques précisions sur le <a href="cestquoi/web/">xhtml</a>.</p>
+ <p>En refaisant la page d'accueil, j'avais oublié les <a href="apropos/accesskeys.php">accesskeys</a> ! C'est refait.</p>
+ <p>J'ai allégé mes images avec le site
+ <a hreflang="en" href="http://tools.dynamicdrive.com/imageoptimizer/">http://tools.dynamicdrive.com/imageoptimizer/</a>.</p>
+<h2>Vendredi 29 Septembre 2006</h2>
+ <p>J'ai ajouté <a href="logiciels/iconsushi.php">@icon Sushi</a>, qui vous permet d'extraire les images de programmes, dll ou d'autres images.</p>
+ <p>J'ai changé la police du site, je trouve que c'est plus lisible.</p>
+<h2>Dimanche 24 Septembre 2006</h2>
+ <p>J'ai changé la page d'accueil : elle n'est plus codée en tableaux.<br />
+ J'ai également ajouté quelques nouvelles images. Je les ai faites sur le site
+ <a href="http://www.lucazappa.com/brilliantMaker/buttonImage.php" hreflang="en">Brilliant button maker</a>.<br />
+ Le menu est aussi changé.</p>
+<h2>Samedi 23 Septembre 2006</h2>
+ <p>Des nouvelles versions de <a href="/logiciels/ccleaner.php">Ccleaner</a> (1.33.385),
+ <a href="logiciels/firefox.php">Firefox</a> (1.5.0.7) et
+ <a href="logiciels/thunderbird.php">Thunderbird</a> (1.5.0.7) sont disponibles.<br />
+ Je les propose en téléchargement.
+ (<a href="http://www.commentcamarche.net/actualites/firefox-thunderbird-1-5-0-7-2379791-actualite.php3" hreflang="fr">
+ Plus d'informations sur les nouvelles versions de Firefox et Thunderbird</a>).</p>
+ <p>Sur la page "<a href="/mail/">Contact</a>",
+ je me suis un peu amusé avec des propriétés CSS 3 (La version des CSS est actuellement la version 2) :
+ Si vous utilisez Firefox, vous verrez des bordures arrondies. J'ai également amélioré le formulaire de contact.</p>
+ <p>Ajout d'une rubrique dans "<a href="cestquoi/web/index.php#balisescomplexes">C'est quoi (x)HTML ?</a>".</p>
+ <p>J'ai refait la page de <a href="/liens.php">Liens</a>. Elle s'affiche plus vite.<br />
+ Vous pouvez également voir <a href="/pages/">la page de del.icio.us</a>.</p>
+ <p>Suite à une suggestion, j'ai refait la vidéo qui explique comment utiliser Ccleaner en deux parties.<br />
+ <a href="temp/?video=ccleaner">1° partie (téléchargement, installation)</a><br />
+ <a href="temp/?video=cleaner2">2° partie (configuration, installation)</a></p>
+<h2>Mercredi 13 Septembre 2006</h2>
+ <p>Le programme Delxml2html, créé par Sébastien Sauvage, permet de transformer ses marques pages del.icio.us en une seule page html.
+ <br />J'ai modifié ce programme, et j'ai rédigé <a href="/delxml/">une page qui explique comment l'utiliser</a>.</p>
+<h2>Mardi 12 Septembre 2006</h2>
+ <p>Il y a quelques temps, je me suis inscrit au service "del.icio.us.".
+ <br /> Ce service permet de partager ses marques pages avec tout le monde. Vous pouvez voir mes marques-pages de différentes façons :</p>
+ <ol><li>Directement depuis del.icio.us (mise à jour en temps réel) :
+ <a href="http://del.icio.us/Ssylvainsab/" hreflang="fr">http://del.icio.us/Ssylvainsab/</a></li>
+ <li>Depuis le flux RSS de del.icio.us (mise à jour en temps réel également) :
+ <a href="http://del.icio.us/rss/Ssylvainsab/" hreflang="fr">http://del.icio.us/rss/Ssylvainsab/</a></li>
+ <li>Sur <a href="/pages/">une page de ce site</a> (mise à jour de temps en temps)</li></ol>
+<h2>Dimanche 10 Septembre 2006</h2>
+ <p>J'ai enfin remis à jour la page des logos. J'en ai ajouté beaucoup :<br />
+ Il y a maintenant <a href="/logos/">des logos sur Firefox, thunderbird, Nvu, Mozilla et Zone Alarm</a>.</p>
+ <p>Ajout de la page <a href="/cestquoi/web/">"C'est quoi (x)HTML ?"</a></p>
+<h2>Samedi 9 Septembre 2006</h2>
+ <p>J'ai ajouté beaucoup de <a href="/liens.php">liens</a>.</p>
+<h2 id="septembre06">Dimanche 3 septembre 2006</h2>
+ <p>Pas de news pendant une semaine !<br />
+ Pendant ce temps, j'étais occupé a transferer les fichiers du site a une autre adresse.<br />
+ Le site est a l'adresse http://sylvain.sab.free.fr/</p>
+ <p>il y a eu très peu de mises a jour pendant ce temps. Cependant quelques choses ont changées :</p>
+ <ul><li>La favicône n'est plus la même : <img src='/img/mini/favicon.png' alt='' class='t16' /></li>
+ <li>Je suis inscrit à "<a href="http://del.icio.us/" hreflang="en">del.icio.us</a>". Ce service permet de partager ses marques pages avec d'autres personnes,
+ en les notant sur une page accessible à tout le monde.<br />Vous pouvez voir les pages que j'ai notées à l'adresse
+ <a hreflang="fr" href="http://del.icio.us/ssylvainsab/">http://del.icio.us/ssylvainsab/</a>.
+ Cette page est également accessible par flux RSS : <a hreflang="fr" href="http://del.icio.us/rss/Ssylvainsab/">http://del.icio.us/rss/Ssylvainsab/</a>.
+ <br />Ce service est bien entendu gratuit et tout le monde peut l'utiliser.</li>
+ <li>J'ai ajouté quelques <a href="/liens.php">nouveaux liens</a>, et fait quelques modifications dans la page "<a href="html.php">html</a>".</li>
+ <li>J'ai rajouté le logiciel <a href="/logiciels/iconedit.php">IconEdit32</a>, un éditeur d'icones.
+ C'est avec ce logiciel que j'ai fait les nouvelles favicones.</li></ul>
+<!--A O U T-->
+<h2>Dimanche 27 août 2006</h2>
+ <p>Ajout d'Accesskeys et d' <a href="/apropos/accesskeys.php">une page</a> qui explique ce que c'est, et comment les utiliser.</p>
+ <p>J'ai eu un problème avec la page des logos, elle est indisponible pour le moment.
+ Mais je suis en train de la refaire et d'y ajouter beaucoup de logos.</p>
+<h2>Vendredi 25 août 2006</h2>
+ <p>Ajout de plusieurs <a href="logiciels/firefox.php#adblockplus">extensions pour Firefox.</a></p>
+ <p>Ajout d'une page ou sont répertoriés tous les logiciels proposés en téléchargement sur mon site ainsi que leur extensions/plugins/add-on :
+ <a href="/logiciels/telecharger/">/logiciels/telecharger/</a></p>
+<h2>Jeudi 24 août 2006</h2>
+ <p>Sur la page des logiciels, ajout d'une section pour les sites et de 3 logiciels dans cette section :
+ <a href="logiciels/pspad.php">PSPad Editor</a>, <a href="logiciels/nvu.php">Nvu</a> et <a href="logiciels/tidy.php">TidyGUI</a></p>
+ <p>Une nouvelle version de <a href="logiciels/ccleaner.php">Ccleaner</a> (la 1.32.345) est disponible. Je la propose en téléchargement.</p>
+<h2>Mercredi 9 août 2006</h2>
+ <p>Une <a href="/temp/?video=ffonglets">vidéo</a> (400 Ko) qui explique comment utiliser les onglets dans Firefox.</p>
+<h2>Mardi 8 août 2006</h2>
+ <p>Encore des astuces pour Optimiser Windows. Cette fois-ci, désactiver les services inutiles.
+ <a href="/configurer/windows/2.php#desactiveservices">configurer/windows/2.php#desactiveservices</a><br />
+ Egalement une vidéo qui explique comment désactiver les services (elle est dans la page 2 de Windows) :
+ <a href="/temp/?video=stopservice">temp/?video=stopservice</a></p>
+<h2>Lundi 7 août 2006</h2>
+ <p>Ajout d'astuces pour optimiser Windows : <a href="configurer/windows/2.php">configurer/windows/2.php</a></p>
+<h2>Dimanche 6 août 2006</h2>
+ <p>Ajout de <a href="/logiciels/pagedefrag.php">Pagedefrag</a> dans les logiciels,
+ qui est un excellent utilitaire de défragmentation.</p>
+ <p>Ajout d'une page d'astuces pour optimiser Windows. Elle est encore en construction, seule la première partie est terminée.
+ <a href="/configurer/windows/">/configurer/windows/</a>.</p>
+<h2>Samedi 5 août 2006</h2>
+ <p>Ajout de <a href="logiciels/stardown.php">Star Downloader</a> dans les logiciels.
+ C'est un excellent gestionnaire de téléchargements.</p>
+<h2 id="aout06">Vendredi 4 août 2006</h2>
+ <p>J'ai mis des nouveaux boutons dans le menu et sur la page d'accueil.</p>
+ <p>Le nouveau design est terminé ! Il est sur chaque page, le site est donc plus "uni". Je vous conseille d'utiliser
+ <a href="logiciels/firefox.php">Firefox</a>, car ce navigateur respecte les standards, contrairement à IE.<br />
+ Il y a donc une chose qui fonctionne sous Firefox mais pas sous IE : Lorsque vous cliquez sur un lien,
+ il devient vert sur fond noir dans Firefox. Dans IE, il reste gris.<br />
+ Quand vous avez cliqué sur un lien, IE le laisse en noir sur fond noir, ce n'est pas joli.</p>
+ <p>Ajout de liens vers des images Firefox dans la pages logos :
+ <a href="/logos/index.php#firefox">logos/index.php#firefox</a></p>
+ <p>Une nouvelle version de <a href="logiciels/firefox.php">Firefox</a> (1.5.0.6) est disponible.
+ Elle comporte notamment des correctifs de sécurité. Je la propose en téléchargement.</p>
+<!--J U I L L E T-->
+<h2>Dimanche 30 juillet 2006</h2>
+ <p>Ajout d'une sitemap. Si vous utilisez l'extension Navibar pour Firefox, vous pourrez voir dans la barre latérale un plan du site.
+ Je vous recommande cette extension, elle est très pratique.<br />
+ Sitemap : <a href="/sitemap.rdf">sitemap.rdf</a>
+ Navibar : <a href="logiciels/firefox.php#navibar">logiciels/firefox.php#navibar</a></p>
+ <p>Dans la page "Conseils et astuces pour vos sites WEB et vos pages html",
+ ajout de "<a href="html.php#sitemap">Faire Une SiteMap</a>".</p>
+<h2>Samedi 29 juillet 2006</h2>
+ <p>Ajout de logos Firefox dans la page "<a href="logos/">Logos</a>",
+ ainsi que de plusieurs liens ou vous touverez des fonds d'écran et des images Firefox.</p>
+ <p>Une nouvelle version de <a href="logiciels/thunderbird.php">Thunderbird</a>
+ est parue, la 1.5.0.5 (l'ancienne était la 1.5.0.4).<br />
+ Une nouvelle version de <a href="logiciels/firefox.php">Firefox</a> est également disponible (la 1.5.0.5).</p>
+<h2>Vendredi 28 juillet 2006</h2>
+ <p>Ajout de la page "<a href="logos/">logos</a>". Vous y trouverez toutes les images qui sont sur le site, ainsi que
+ d'autres images qui me plaisent ou qui peuvent servir.
+ Vous pouvez reprendre ces images pour votre site, mais si vous prenez une de celles
+ que j'ai faites moi même <a href="mail/">indiquez le moi</a>.</p>
+ <p>Ajout de la page "<a href="html.php">html</a>". Vous y trouverez des conseils et des astuces pour faire vos sites.</p>
+ <p>J'ai refait la vidéo qui explique comment gérer ses traces avec Firefox :
+ elle était en mauvaise résolution et on la voyait mal. J'ai aussi corrigé quelques fautes d'orthographe et mentionné l'extension
+ <a href="logiciels/firefox.php#webdeveloper">WebDeveloper</a>. La video est a l'adresse :
+ <a href="/temp/?video=configfirefoxtraces">temp/?video=configfirefoxtraces</a>.</p>
+ <p>Les pages se chargent plus vite pour beaucoup de raisons :</p>
+ <ul><li>Les liens sont raccourcis : il sont en relatif et plus en absolu.</li>
+ <li>J'ai également allégé les fichiers css et html.</li>
+ <li>J'ai réorganisé le site. Si vous trouvez un lien mort, <a href="mail/">écrivez-moi</a>.</li></ul>
+ <p>Le flux RSS du site est enfin adapté! C'est à dire que vous pouvez le voir normalement.</p>
+<h2>Mardi 25 juillet 2006</h2>
+ <p>J'ai réorganisé le répertoire "<a href="/temp/">temp</a>".
+ <br />La présentation des fichiers, nottament des vidéos est maintenant sous la forme d'un tableau.</p>
+ <p>Ajout de l'extension <a href="logiciels/firefox.php#webdevelloper">Web Develloper</a> pour Firefox.</p>
+<h2>Lundi 24 juillet 2006</h2>
+ <p>Le nouveau design du site est presque fini. Il ne reste plus que la page
+ <a href="liens.php">liens</a>. J'y ajoute en même temps de nouveaux liens.</p>
+ <p>Il y a des nouveaux boutons sur la page d'accueil.
+ Je les ai faits avec le logiciel <a hreflang="fr" href="http://www.gratilog.net/web1.htm#deknop">DeKnop</a>.</p>
+ <p>J'ai également ajouté l'icone <img class='t16' alt="RSS" src="img/mini/minirss.png" />
+ à droite de l'url qui signale la présence d'un flux RSS sur le site.<br />
+ Il vous suffit de cliquer dessus pour l'ajouter a vos favoris</p>
+<h2>Dimanche 23 juillet 2006</h2>
+ <p>J'ai ajouté un <a href="/rss/">flux RSS</a> (enfin!)</p>
+ <p>J'ai mis à jour la page <a href="logiciels/winamp.php">Winamp</a>
+ dans les <a href="logiciels/">logiciels</a> : tous les téléchargements sont désormais disponibles.</p>
+ <p>Ajout d'une vidéo qui explique comment télécharger,
+ installer, configurer et utiliser le logiciel Zone Alarm : <a href="configurer/zonealarm.php">configurer/zonealarm.php</a></p>
+<h2>Mardi 4 Juillet 2006</h2>
+ <p>Ajout de <a href="/logiciels/ccleaner.php">Craps Cleaner</a> dans les logiciels.
+ <br />J'ai fait une <a href="configurer/ccleaner.php">vidéo</a> pour vous montrer comment télécharger,
+ installer, configurer et utiliser ce logiciel.</p>
+ <p>J'ai oublié de le préciser hier, mais j'ai ajouté une favicône.<br />
+ C'est la petite image que vous voyez a droite de l'url, elle vous permettra de reconnaître les pages de mon site :
+ <img class='t16' alt="::" title="C'est la favicône" src="img/mini/favicon.png" />.<br />
+ Ajout de la rubrique <a href="/cestquoi/">C'est quoi</a>.
+ Vous trouverez <a href="/cestquoi/starforce.php">Starforce</a> à cet endroit.</p>
+<h2>Lundi 3 Juillet 2006</h2>
+ <p>Mise à jour de la page <a href="cestquoi/starforce.php">Starforce</a>.</p>
+ <p>Mise à jour de <a href="logiciels/winamp.php">Winamp et VLC Media Player</a> dans les <a href="logiciels/">logiciels</a>.</p>
+<h2 id="juillet06">Samedi 1° Juillet 2006</h2>
+ <p>Mise à jour de <a href="logiciels/firefox.php">Firefox</a>, et
+ ajout de <a href="/logiciels/winamp.php">Winamp et VLC Media Player</a> dans les logiciels. </p>
+<!--J U I N-->
+<h2>Jeudi 29 juin 2006</h2>
+ <p>Ajout de <a href="/logiciels/thunderbird.php">Thunderbird</a>, d'<a href="/logiciels/avast.php">Avast</a>,
+ de <a href="/logiciels/zonealarm.php">Zone Alarm</a> et d'<a href="/logiciels/spybot.php">anti-spywares</a>.</p>
+<h2>Mercredi 28 juin 2006<a id="juin06"></a></h2>
+ <p>Création de mon site.</p>
+ <p>Mise à jour de la page <a href="mail/">Contact</a>, ainsi que de la page <a href="liens.php">Liens</a>.</p>
+ <p>Ajout de <a href="/logiciels/firefox.php">Firefox</a> dans les logiciels,
+ et de <a href="/configurer/firefox.php">deux vidéos pour vous montrer comment configurer ce logiciel</a>.</p>
+<?php require'autres/source-bas.php';?>
blob - /dev/null
blob + 72edecd60f54d7588d82db5dfb533785fe9abf46 (mode 644)
--- /dev/null
+++ pages/index.php
+<?php
+$charset='utf-8';
+$head['css'][0]['filename']='stylefavs';
+$head['autres']='<link rel="alternate" type="application/rss+xml" title="Del.icio.us - Sylvain.sab" href="http://del.icio.us/Ssylvainsab/" />'."\n\t".
+ '<meta http-equiv="robots" content="none" />';
+$titre='Bookmarks del.icio.us';
+require'../autres/source-haut.php'?>
+<h1>Bookmarks 2007-02-22</h1>
+<p class="fin"><a href="http://del.icio.us/ssylvainsab/">Page originale</a></p>
+<p>
+<a href="http://images.google.com/imagelabeler/" class="d">Google Image Labeler</a> - <span class="l">http://images.google.com/imagelabeler/</span><br /><span class="n">C'est une nouveauté de google : avec quelqu'un choisi au hasard, vous devez attribuer des mots-clés à une ou plusieurs images. (Tags: fun game)</span><br /><br />
+<a href="http://www.infos-du-net.com/telecharger/mp3DirectCut,0301-460.html" class="d">Télécharger mp3DirectCut</a> - <span class="l">http://www.infos-du-net.com/telecharger/mp3DirectCut,0301-460.html</span><br /><span class="n">un logiciel de découpage de mp3 (Tags: tools mp3 multimédia)</span><br /><br />
+<a href="http://www.discosarko.com/disco_sarko.php" class="d">Disco Sarko</a> - <span class="l">http://www.discosarko.com/disco_sarko.php</span><br /><span class="n">arf arf arf. pour faire danser sarkozy. c'est stupide, mais très rigolo ! (Tags: fun activism)</span><br /><br />
+<a href="http://www.laltruiste.com/" class="d">Le guide des langages Web : Les cours</a> - <span class="l">http://www.laltruiste.com/</span><br /><span class="n"> (Tags: programming webmaster)</span><br /><br />
+<a href="http://www.user-agents.org/index.shtml" class="d">List of User-Agents (Spiders, Robots, Browser)</a> - <span class="l">http://www.user-agents.org/index.shtml</span><br /><span class="n">une liste importante. (Tags: system:unfiled)</span><br /><br />
+<a href="http://andreasviklund.com/" class="d">andreasviklund.com</a> - <span class="l">http://andreasviklund.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.christopher-jablonski.com/fr/reperes/accessibilite.shtml" class="d">Web accessible : les "pourquoi" et les "Comment"</a> - <span class="l">http://www.christopher-jablonski.com/fr/reperes/accessibilite.shtml</span><br /><span class="n"> (Tags: accessibilite)</span><br /><br />
+<a href="http://grandstreamdreams.blogspot.com/2006/08/20-free-ways-to-pimp-windows-xp.html" class="d">Grand Stream Dreams: 20 Free Ways to Pimp Windows XP</a> - <span class="l">http://grandstreamdreams.blogspot.com/2006/08/20-free-ways-to-pimp-windows-xp.html</span><br /><span class="n"> (Tags: windows tools)</span><br /><br />
+<a href="http://www.laboratoire-microsoft.org/t/1794/" class="d">Nettoyer PAGEFILE.SYS</a> - <span class="l">http://www.laboratoire-microsoft.org/t/1794/</span><br /><span class="n">pagefile.sys, c'est le fichier de mémoire de windows, assez lourd et qui contient beaucoup d'informations. (Tags: tools windows)</span><br /><br />
+<a href="http://www.multiproxy.org/" class="d">Home of MultiProxy and Anonymous proxy list</a> - <span class="l">http://www.multiproxy.org/</span><br /><span class="n"> (Tags: tools internet securite)</span><br /><br />
+<a href="http://www.supportware.net/mozilla/" class="d">AusDilecce Extensions</a> - <span class="l">http://www.supportware.net/mozilla/</span><br /><span class="n">des extensions pour firefox et thunderbird (Tags: extension)</span><br /><br />
+<a href="http://www.thenod.info/" class="d">thenod.info</a> - <span class="l">http://www.thenod.info/</span><br /><span class="n">un blog intéressant (Tags: blog)</span><br /><br />
+<a href="http://trichoko.free.fr/index.php" class="d">Trichoko</a> - <span class="l">http://trichoko.free.fr/index.php</span><br /><span class="n">un site d'upload d'images (Tags: tools)</span><br /><br />
+<a href="http://novelconcepts.co.uk/FlashElementTD/" class="d">Flash Element TD | Novel Concepts</a> - <span class="l">http://novelconcepts.co.uk/FlashElementTD/</span><br /><span class="n">un jeu tiré de warcraft (Tags: fun game)</span><br /><br />
+<a href="http://www.face-cache.fr/index.php/2006/12/14/17-le-stop-motion-pour-en-savoir-plus" class="d">Le Stop Motion - Pour en savoir plus ! - Face Cachée - Découvrez le web différemment</a> - <span class="l">http://www.face-cache.fr/index.php/2006/12/14/17-le-stop-motion-pour-en-savoir-plus</span><br /><span class="n"> (Tags: fun)</span><br /><br />
+<a href="http://www.generation-nt.com/astuces/lire/149/deplacer-le-repertoire-cache-de-firefox/" class="d">Déplacer le répertoire cache de Firefox : Trucs et Astuces Windows XP 2000 2003 NT</a> - <span class="l">http://www.generation-nt.com/astuces/lire/149/deplacer-le-repertoire-cache-de-firefox/</span><br /><span class="n"> (Tags: firefox tools)</span><br /><br />
+<a href="http://www.echosdunet.net/dossiers/dossier_1171_firefox+thunderbird+sauvegarder+ses+parametres.html" class="d">Firefox et Thunderbird : sauvegarder ses paramètres Tuto Soft - EchosDunet</a> - <span class="l">http://www.echosdunet.net/dossiers/dossier_1171_firefox+thunderbird+sauvegarder+ses+parametres.html</span><br /><span class="n"> (Tags: firefox tools)</span><br /><br />
+<a href="http://tina.zevillage.org/news/les-logiciels-libres" class="d">Les logiciels libres</a> - <span class="l">http://tina.zevillage.org/news/les-logiciels-libres</span><br /><span class="n"> (Tags: free libre)</span><br /><br />
+<a href="http://fr.selfhtml.org/html/reference/signes.htm" class="d">SELFHTML: HTML/XHTML / Sommaire de référence HTML /Référence HTML pour les caractères</a> - <span class="l">http://fr.selfhtml.org/html/reference/signes.htm</span><br /><span class="n"> (Tags: html)</span><br /><br />
+<a href="http://www.htmlgoodies.com/beyond/reference/article.php/3472611" class="d">So, You Want An "& Command", Huh?</a> - <span class="l">http://www.htmlgoodies.com/beyond/reference/article.php/3472611</span><br /><span class="n">une liste d'entités html (Tags: html)</span><br /><br />
+<a href="http://www.oscommerce-fr.info/forum/index.php?showtopic=17429" class="d">Liste de tutoriels CSS - Forum osCommerce-fr</a> - <span class="l">http://www.oscommerce-fr.info/forum/index.php?showtopic=17429</span><br /><span class="n">quelques aides-mémoires CSS. (Tags: css)</span><br /><br />
+<a href="http://developpeur.journaldunet.com/tutoriel/css/040601-css-regles-at.shtml" class="d">CSS : les règles @ - JDN Développeurs</a> - <span class="l">http://developpeur.journaldunet.com/tutoriel/css/040601-css-regles-at.shtml</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.phpfrance.com/forums/voir_reponse-83074.php" class="d">PHPFrance :: Voir le sujet - [Résolu] Date et heure au format français</a> - <span class="l">http://www.phpfrance.com/forums/voir_reponse-83074.php</span><br /><span class="n"> (Tags: php sql programming)</span><br /><br />
+<a href="http://www.phpfrance.com/forums/voir_sujet-8323.php" class="d">PHPFrance :: Voir le sujet - Quelques petites manipulations avec les dates (PHP/MySQL)</a> - <span class="l">http://www.phpfrance.com/forums/voir_sujet-8323.php</span><br /><span class="n">sur les dates en php et sql. (Tags: php sql programming)</span><br /><br />
+<a href="http://www.excelabo.net/xl/dates.php" class="d">Les astuces excel d'Excelabo : Les Dates : Formats et Calculs</a> - <span class="l">http://www.excelabo.net/xl/dates.php</span><br /><span class="n">attention, il faut avoir javascript activé. (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.zdnet.fr/services/speedtest/speedtest.htm" class="d">Test de bande passante par ZDNet.fr</a> - <span class="l">http://www.zdnet.fr/services/speedtest/speedtest.htm</span><br /><span class="n">un test de vitesse de connexion (Tags: tools)</span><br /><br />
+<a href="http://developpeur.journaldunet.com/tutoriel/dht/060512-5-javascripts-vraiment-utiles.shtml" class="d">5 JavaScripts vraiment utiles - JDN Développeurs</a> - <span class="l">http://developpeur.journaldunet.com/tutoriel/dht/060512-5-javascripts-vraiment-utiles.shtml</span><br /><span class="n"> (Tags: javascript programming)</span><br /><br />
+<a href="http://quentinc.net/ref/articles/aide-memoire-syntaxe-et-mots-cles-javascript/cde14" class="d">Aide-mémoire de la syntaxe et des mots-clés javascript -- Le Coin Web de QuentinC</a> - <span class="l">http://quentinc.net/ref/articles/aide-memoire-syntaxe-et-mots-cles-javascript/cde14</span><br /><span class="n"> (Tags: javascript programming)</span><br /><br />
+<a href="http://chameau.moostik.net/" class="d">Statistik</a> - <span class="l">http://chameau.moostik.net/</span><br /><span class="n">Un site de statistiques gratuites. Il y a l'air d'avoir beaucoup de fonctionnalités. (Tags: free tools)</span><br /><br />
+<a href="http://badvista.fsf.org/" class="d">BadVista.org: Stopping Vista adoption by promoting free software — BadVista</a> - <span class="l">http://badvista.fsf.org/</span><br /><span class="n">un site pour empêcher la monopolisation de l'informatique par microsoft avec windows vista. (Tags: activism)</span><br /><br />
+<a href="http://www.gnu.org/philosophy/no-word-attachments.fr.html" class="d">Finissons-en avec les pièces jointes Word</a> - <span class="l">http://www.gnu.org/philosophy/no-word-attachments.fr.html</span><br /><span class="n">c'est vrai que c'est désagréable de recevoir des fichiers que l'on ne peut pas lire. (Tags: activism)</span><br /><br />
+<a href="http://www.cssoptimiser.com/" class="d">Online CSS Optimizer / Optimiser</a> - <span class="l">http://www.cssoptimiser.com/</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://nicolas.chazot.free.fr/" class="d">3SIP</a> - <span class="l">http://nicolas.chazot.free.fr/</span><br /><span class="n">Un excellent site sur " la sécurité des systèmes informatiques des particuliers". (Tags: securite)</span><br /><br />
+<a href="http://mdbui2.ift.ulaval.ca/Knowledges/Coding_Text/Table_Entites.htm" class="d">Table d'entités</a> - <span class="l">http://mdbui2.ift.ulaval.ca/Knowledges/Coding_Text/Table_Entites.htm</span><br /><span class="n">une autre liste assez complète d'entités html (Tags: html)</span><br /><br />
+<a href="http://jdhosts.net/starwars-rpg/troll/" class="d">Troll Machine - Le Trollodrôme (trollodrome trollesque)</a> - <span class="l">http://jdhosts.net/starwars-rpg/troll/</span><br /><span class="n">Du troll, du troll, et encore du troll. (Tags: fun)</span><br /><br />
+<a href="http://video.google.fr/videoplay?docid=-8996055986353195886&pr=goog-sl" class="d">Les OGM sont ils dangereux pour la santé? L'étude qui accuse - Google Video</a> - <span class="l">http://video.google.fr/videoplay?docid=-8996055986353195886&pr=goog-sl</span><br /><span class="n"> (Tags: activism)</span><br /><br />
+<a href="http://www.gnu.org/philosophy/can-you-trust.fr.html" class="d">Pouvez-vous faire confiance à votre ordinateur ? - Projet GNU - Free Software Foundation/Fondation pour le Logiciel Libre (FSF/FLL)</a> - <span class="l">http://www.gnu.org/philosophy/can-you-trust.fr.html</span><br /><span class="n">Un article sur l'informatique déloyale, avec quelques liens en bas de page pour agir. (Tags: activism)</span><br /><br />
+<a href="http://totalementcretin.apinc.org/blog/2007/01/29/384-microsoft-a-invente-le-monde" class="d">Microsoft a inventé le monde - Totalement Cretin(s)</a> - <span class="l">http://totalementcretin.apinc.org/blog/2007/01/29/384-microsoft-a-invente-le-monde</span><br /><span class="n">Waow. La c'est crétin. TRES. impressionnant (Tags: activism)</span><br /><br />
+<a href="http://www.libre-musique-mp3.com/" class="d">Musique libre de droit - illustration musicale</a> - <span class="l">http://www.libre-musique-mp3.com/</span><br /><span class="n"> (Tags: free music libre gratuit)</span><br /><br />
+<a href="http://www.boxson.net/" class="d">BOXSON # Accueil # musique libre et gratuite: telecharger des mp3, des OGG et partager vos morceaux!</a> - <span class="l">http://www.boxson.net/</span><br /><span class="n"> (Tags: free music libre gratuit)</span><br /><br />
+<a href="http://rezal404.org/wikini/wakka.php?wiki=Mp3Legal" class="d">LeWiki404:Mp3Legal</a> - <span class="l">http://rezal404.org/wikini/wakka.php?wiki=Mp3Legal</span><br /><span class="n">une liste de sites de musique libre. (Tags: free music libre gratuit)</span><br /><br />
+<a href="http://www.auboutdufil.com/" class="d">Télécharger et écouter de la musique libre</a> - <span class="l">http://www.auboutdufil.com/</span><br /><span class="n">un site de podcasting (blog de musique) (Tags: free music libre gratuit blog)</span><br /><br />
+<a href="http://www.keopz.com/" class="d">Keopz.com - La nouvelle plate-forme de la musique libre et gratuite</a> - <span class="l">http://www.keopz.com/</span><br /><span class="n"> (Tags: free music gratuit libre)</span><br /><br />
+<a href="http://www.dogmazic.net/index.php?op=edito" class="d">Dogmazic.net, musique libre - Accueil</a> - <span class="l">http://www.dogmazic.net/index.php?op=edito</span><br /><span class="n">un autre site de musique libre de droits. (Tags: free music libre gratuit)</span><br /><br />
+<a href="http://suis-jeleseulcommecela.hautetfort.com/" class="d">Vous reprendrez bien un peu d'humanisme ?</a> - <span class="l">http://suis-jeleseulcommecela.hautetfort.com/</span><br /><span class="n">un blog (Tags: blog)</span><br /><br />
+<a href="http://kirk-www.jamendo.com/fr/artist/madameolga/" class="d">Jamendo : Madame Olga</a> - <span class="l">http://kirk-www.jamendo.com/fr/artist/madameolga/</span><br /><span class="n">j'aime bien aussi. (Tags: music free libre gratuit)</span><br /><br />
+<a href="http://www.davidtmx.com/" class="d">www.davidTMX.com</a> - <span class="l">http://www.davidtmx.com/</span><br /><span class="n">un artiste découvert sur jamendo.com, un site de musique libre. j'aime bien ! (Tags: fun music free libre gratuit)</span><br /><br />
+<a href="http://yansanmo.no-ip.org/xhtml/" class="d">XHTML 1.0 Strict</a> - <span class="l">http://yansanmo.no-ip.org/xhtml/</span><br /><span class="n">une autre liste de balises html (Tags: html)</span><br /><br />
+<a href="http://www.tutoriaux.biz/" class="d">Aux Tutoriaux Français-Tutorial et Aide Pour Logiciels</a> - <span class="l">http://www.tutoriaux.biz/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.webmaster-toolkit.com/html-entity-chart.shtml" class="d">HTML Entity Chart :: Webmaster Toolkit</a> - <span class="l">http://www.webmaster-toolkit.com/html-entity-chart.shtml</span><br /><span class="n">une liste d'entités (Tags: system:unfiled)</span><br /><br />
+<a href="http://uitest.com/en/check/" class="d">UITest.com: Site Check – Web Site Test</a> - <span class="l">http://uitest.com/en/check/</span><br /><span class="n">Un site qui donne directement plusieurs liens (validations, etc) à partir d'une url. (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.fakenamegenerator.com/index.php" class="d">Fake Name Generator</a> - <span class="l">http://www.fakenamegenerator.com/index.php</span><br /><span class="n">permet de créer une fausse identité. un peu comme bugmenot. (Tags: tools internet)</span><br /><br />
+<a href="http://www.prendreuncafe.com/blog/post/2006/11/22/12-astuces-optimisation-performances-php" class="d">12 astuces d'optimisation de performance PHP - Prendre un Caf</a> - <span class="l">http://www.prendreuncafe.com/blog/post/2006/11/22/12-astuces-optimisation-performances-php</span><br /><span class="n">encore (Tags: php programming)</span><br /><br />
+<a href="http://www.estvideo.com/dew/pages/phpbench/" class="d">optimisation php</a> - <span class="l">http://www.estvideo.com/dew/pages/phpbench/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.toutjavascript.com/savoir/optimiser.php3" class="d">Optimiser son site</a> - <span class="l">http://www.toutjavascript.com/savoir/optimiser.php3</span><br /><span class="n">un autre article sur l'optimisation. (Tags: php sql programming bdd)</span><br /><br />
+<a href="http://www.erreursdefilms.com/" class="d">Erreurs de films.com</a> - <span class="l">http://www.erreursdefilms.com/</span><br /><span class="n">un site qui montre quelques erreurs de tournage, ou clins d'oeil dans les films. il y en a beaucoup. (Tags: fun)</span><br /><br />
+<a href="http://pbnaigeon.developpez.com/tutoriel/PHP/apostrophe-guillemet/" class="d">Apostrophes ou guillemets : lesquels choisir ? - Club d'entraide des développeurs francophones</a> - <span class="l">http://pbnaigeon.developpez.com/tutoriel/PHP/apostrophe-guillemet/</span><br /><span class="n">un autre article sur l'ioptimisation php (Tags: php programming)</span><br /><br />
+<a href="http://calebegg.com/grad/" class="d">Gradient generator</a> - <span class="l">http://calebegg.com/grad/</span><br /><span class="n"> (Tags: tools)</span><br /><br />
+<a href="http://infoagogo.free.fr/" class="d">Info à gogo | La programmation pour les débutants</a> - <span class="l">http://infoagogo.free.fr/</span><br /><span class="n">un site intéressant (Tags: programming)</span><br /><br />
+<a href="http://www.tux-life.com/" class="d">Tux-Life - Élever votre Tux !</a> - <span class="l">http://www.tux-life.com/</span><br /><span class="n"> (Tags: fun)</span><br /><br />
+<a href="http://www.offthewrist.com/index.jsp?id=ff" class="d">OFF THE WRIST - Free Games and online toys</a> - <span class="l">http://www.offthewrist.com/index.jsp?id=ff</span><br /><span class="n">un jeu qui consiste à taper l&#39;alphabet le plus rapidement. (Tags: fun)</span><br /><br />
+<a href="http://wapedia.mobi/" class="d">Mobile Encyclopedia</a> - <span class="l">http://wapedia.mobi/</span><br /><span class="n">une encycolpédie pour lire les articles de wikipédia sur portable ou pda. Il y a un problème au niveau de l&#39;encodage (déclaré en utf-8 au lieu de iso) (Tags: free site)</span><br /><br />
+<a href="http://extensions.geckozone.org/ColorZilla" class="d">ColorZilla - Geckozone - Extensions en français pour Mozilla, Firefox, Thunderbird et Nvu</a> - <span class="l">http://extensions.geckozone.org/ColorZilla</span><br /><span class="n">une extension pour utiliser des palettes de couleur, entre (beaucoup) d'autres. (Tags: firefox_extension)</span><br /><br />
+<a href="http://www.frekenceflash.com/index.php?page=divers" class="d">Frékence Flash Xtreme - Le monde de l'inconscient - Tous les meilleurs jeux et animations du moment sont sur Frékence Flash Xtreme</a> - <span class="l">http://www.frekenceflash.com/index.php?page=divers</span><br /><span class="n">une quantité d'images qui parodient "Luc, je suis ton père". (Tags: fun)</span><br /><br />
+<a href="http://dl.free.fr/" class="d">Free - Envoyez vos documents</a> - <span class="l">http://dl.free.fr/</span><br /><span class="n">un service de stockage en ligne (Tags: internet tools)</span><br /><br />
+<a href="http://www.netalya.com/" class="d">Portail d'informations sur les Nouvelles Technologies et Internet : Cours, Dossiers, Livres, Ressources gratuites, offres d'emploi...</a> - <span class="l">http://www.netalya.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.webyus.com/" class="d">w e b y u s . c o m</a> - <span class="l">http://www.webyus.com/</span><br /><span class="n">un service pour surfer anonymement sur internet. (Tags: web tools)</span><br /><br />
+<a href="http://www.kessels.com/JkDefrag/" class="d">JkDefrag v3.5</a> - <span class="l">http://www.kessels.com/JkDefrag/</span><br /><span class="n">un logiciel de défragmentation libre (Tags: tools free)</span><br /><br />
+<a href="http://projet.unix.free.fr/" class="d">Projet Unix/Linux</a> - <span class="l">http://projet.unix.free.fr/</span><br /><span class="n">un site sur l'histoire de linux (Tags: linux site)</span><br /><br />
+<a href="http://userbarscity.armatronic.com/" class="d">UserbarsCity</a> - <span class="l">http://userbarscity.armatronic.com/</span><br /><span class="n"> (Tags: graphics)</span><br /><br />
+<a href="http://www.spreadfirefox.com/?q=affiliates/homepage" class="d">affiliates homepage | Spread Firefox</a> - <span class="l">http://www.spreadfirefox.com/?q=affiliates/homepage</span><br /><span class="n">quelques logos firefox (Tags: firefox graphics)</span><br /><br />
+<a href="http://www.vie-privee.org/" class="d">Fédération Informatique et Libertés</a> - <span class="l">http://www.vie-privee.org/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.info-graphistes.com/" class="d">Info-Graphistes.com</a> - <span class="l">http://www.info-graphistes.com/</span><br /><span class="n"> (Tags: tutoriel graphics)</span><br /><br />
+<a href="http://tutmarks.com/" class="d">TUTMarks - didacticiels, guides et tutoriaux sur internet</a> - <span class="l">http://tutmarks.com/</span><br /><span class="n"> (Tags: tutoriel)</span><br /><br />
+<a href="http://freewares-tutos.blogspot.com/" class="d">Freewares & Tutos</a> - <span class="l">http://freewares-tutos.blogspot.com/</span><br /><span class="n">un blog ou sont référencés plusieurs tutoriels de logiciels gratuits/open-source (Tags: logiciels tutoriel)</span><br /><br />
+<a href="http://classes.scriptsphp.org/" class="d">Classes.ScriptsPHP.org - Ressources PHP</a> - <span class="l">http://classes.scriptsphp.org/</span><br /><span class="n"> (Tags: php programming)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-2304797-fai-saisir-le-juge-qd-on-est-dans-son-droit" class="d">FAI:saisir le juge qd on est dans son droit!</a> - <span class="l">http://www.commentcamarche.net/forum/affich-2304797-fai-saisir-le-juge-qd-on-est-dans-son-droit</span><br /><span class="n">une histoire qui finit bien (Tags: activism loi)</span><br /><br />
+<a href="http://giminik.developpez.com/xhtml/" class="d">Outil XHTML 1.1 Hiérarchie - La balise html, ses attributs, ses événements, son utilité et sa syntaxe.</a> - <span class="l">http://giminik.developpez.com/xhtml/</span><br /><span class="n"> (Tags: xhtml)</span><br /><br />
+<a href="http://www.guidelinux.org/" class="d">GuideLinux.Org</a> - <span class="l">http://www.guidelinux.org/</span><br /><span class="n"> (Tags: linux site)</span><br /><br />
+<a href="http://www.cyber-protect.fr/" class="d">Cyber-Protect.Fr - Votre Protection Informatique - Protection de la vie privée</a> - <span class="l">http://www.cyber-protect.fr/</span><br /><span class="n"> (Tags: securite)</span><br /><br />
+<a href="http://www.vulgarisation-informatique.com/failles-php.php" class="d">Failles PHP à éviter</a> - <span class="l">http://www.vulgarisation-informatique.com/failles-php.php</span><br /><span class="n"> (Tags: securite php)</span><br /><br />
+<a href="http://www.glossaire.be/glossaire_abreviation_x_anglais_francais.htm" class="d">ORDINATEUR = glossaire bilingue (A/F) : ABREVIATION informatique WXYZ (lexique, traduction)</a> - <span class="l">http://www.glossaire.be/glossaire_abreviation_x_anglais_francais.htm</span><br /><span class="n">une liste d'abréviations (Tags: liste)</span><br /><br />
+<a href="http://tinymce.moxiecode.com/" class="d">TinyMCE Javascript Content Editor by Moxiecode Systems AB</a> - <span class="l">http://tinymce.moxiecode.com/</span><br /><span class="n">un éditeur html (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.mono-1.com/monoface/main.html" class="d">monoface</a> - <span class="l">http://www.mono-1.com/monoface/main.html</span><br /><span class="n">marrant. trouvé sur htp://del.icio.us/sebsauvage/ (Tags: fun)</span><br /><br />
+<a href="http://video.google.fr/videoplay?docid=4748185074137523658" class="d">Installation de Fedora - Google Video</a> - <span class="l">http://video.google.fr/videoplay?docid=4748185074137523658</span><br /><span class="n">une vidéo qui explique comment installer cette distribution (Tags: linux)</span><br /><br />
+<a href="http://www.dedibox.fr/" class="d">Dedibox - Votre serveur dédié pour 29,99 Euros / mois trafic illimité</a> - <span class="l">http://www.dedibox.fr/</span><br /><span class="n"> (Tags: serveur)</span><br /><br />
+<a href="http://www.kimsufi.com/" class="d">KIMSUFI, votre serveur dédié, tout simplement suffisant.</a> - <span class="l">http://www.kimsufi.com/</span><br /><span class="n"> (Tags: serveur)</span><br /><br />
+<a href="http://aeris.11vm-serv.net/cours/internet/histoire.html" class="d">AERIS - Cours - Comprendre Internet - Historique</a> - <span class="l">http://aeris.11vm-serv.net/cours/internet/histoire.html</span><br /><span class="n">une histoire d'internet (Tags: article)</span><br /><br />
+<a href="http://www.uzine.net/article2143.html" class="d">[uZine 3] Le HTML dans le potage</a> - <span class="l">http://www.uzine.net/article2143.html</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://sebastienguillon.com/traduction/types-de-media-xhtml#summary" class="d">Les types de Média XHTML</a> - <span class="l">http://sebastienguillon.com/traduction/types-de-media-xhtml#summary</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.geckozone.org/forum/viewtopic.php?t=38659" class="d">Geckozone :: Voir le sujet - Du XHTML 1.1 envoyé au format text/html</a> - <span class="l">http://www.geckozone.org/forum/viewtopic.php?t=38659</span><br /><span class="n">des indications intéressants (Tags: xhtml valide)</span><br /><br />
+<a href="http://www.w3.org/2003/03/Translations/byLanguage?language=fr" class="d">French Translations of W3C Documents</a> - <span class="l">http://www.w3.org/2003/03/Translations/byLanguage?language=fr</span><br /><span class="n"> (Tags: w3c)</span><br /><br />
+<a href="http://video.google.com/videoplay?docid=6570869723386259299&q=mentos+diet" class="d">Mentos diet coke rocket - Google Video</a> - <span class="l">http://video.google.com/videoplay?docid=6570869723386259299&q=mentos+diet</span><br /><span class="n">une autre vidéo de mélange coca+mentos. C'est quand même parfois dangeureux, vaut mieux pas s'en inspirer... (Tags: fun)</span><br /><br />
+<a href="http://fr.ekopedia.org/Accueil" class="d">Accueil - Ekopedia</a> - <span class="l">http://fr.ekopedia.org/Accueil</span><br /><span class="n">"Ekopedia est un projet d'encyclopédie pratique traitant des techniques alternatives de vie. L'encyclopédie est gratuite, écrite coopérativement et son contenu est librement réutilisable." (Tags: libre free)</span><br /><br />
+<a href="http://browsers.evolt.org/" class="d">evolt.org - Browser Archive</a> - <span class="l">http://browsers.evolt.org/</span><br /><span class="n">une liste de navigateurs (Tags: browser)</span><br /><br />
+<a href="http://code.google.com/webstats/index.html" class="d">Google Code: Web Authoring Statistics</a> - <span class="l">http://code.google.com/webstats/index.html</span><br /><span class="n">les statistiques d'un milliard de pages indexées par google. (Tags: system:unfiled)</span><br /><br />
+<a href="http://homepage.mac.com/rcrews/software/validator/" class="d">Validator</a> - <span class="l">http://homepage.mac.com/rcrews/software/validator/</span><br /><span class="n">un autre validateur html/xhtml/xml (Tags: valide)</span><br /><br />
+<a href="http://www.hixie.ch/advocacy/xhtml.fr/#p7" class="d">Servir du XHTML en tant que text/html jugé néfaste</a> - <span class="l">http://www.hixie.ch/advocacy/xhtml.fr/#p7</span><br /><span class="n">Un article intéressant, à lire. (Tags: xhtml valide)</span><br /><br />
+<a href="http://www.hebserv.net/" class="d">HebServ -- Hébergement gratuit - Accueil</a> - <span class="l">http://www.hebserv.net/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.rhien.org/?wiki=Accueil" class="d">RHIEN - Réseau d'Hébergeurs Indépendants et ENgagés : Accueil</a> - <span class="l">http://www.rhien.org/?wiki=Accueil</span><br /><span class="n">un site d'hébergeurs et de services d'hébergement à but non lucratif (Tags: free)</span><br /><br />
+<a href="http://expreg.com/rex_article.php?art=grossir" class="d">REGEX - REGEXP - Expressions régulières en PHP - Les article d'expreg - Les billets de Fred</a> - <span class="l">http://expreg.com/rex_article.php?art=grossir</span><br /><span class="n">un autre article sur la valeur d'un octet (1 Ko=1000 octets, 1Kio=1024 octets) (Tags: article)</span><br /><br />
+<a href="http://www.funxhtml.com/CH2/corriges_ch2.txt" class="d">http://www.funxhtml.com/CH2/corriges_ch2.txt</a> - <span class="l">http://www.funxhtml.com/CH2/corriges_ch2.txt</span><br /><span class="n">un fichier texte sur le javascript avec es méthodes qui s'appliquent au xhtml 1.1 (Tags: javascript)</span><br /><br />
+<a href="http://tastalian.free.fr/" class="d">Studios Tastalian :: Cours de Programmation :: Jeux vidéo et applications libres</a> - <span class="l">http://tastalian.free.fr/</span><br /><span class="n">un site sur la programmation et le libre (Tags: programming libre)</span><br /><br />
+<a href="http://www.logicielmac.com/logiciel/section-Editeur%20de%20Site.html" class="d">LogicielMac.com - Section - Editeur de Site</a> - <span class="l">http://www.logicielmac.com/logiciel/section-Editeur%20de%20Site.html</span><br /><span class="n">plusieurs logiciels pour webmaster sous MAC (Tags: webmaster)</span><br /><br />
+<a href="http://fr2.php.net/mysql_unbuffered_query" class="d">PHP: mysql_unbuffered_query - Manual</a> - <span class="l">http://fr2.php.net/mysql_unbuffered_query</span><br /><span class="n">"Exécute une requête SQL sans mobiliser les résultats MySQL". Donc à utiliser pour l'insertion ou la modification de données qu'on ne récupère pas (Tags: sql optimisation programming)</span><br /><br />
+<a href="http://www.wannabrowser.com/" class="d">wannaBrowser | http user agent spoofing</a> - <span class="l">http://www.wannabrowser.com/</span><br /><span class="n">un service qui permet de se faire passer pour un autre navigateur que le sien. (Tags: internet tools)</span><br /><br />
+<a href="http://www.spam-report.net/fr/" class="d">SpamReport pour FireFox : Reporter un Spam dans l'index de Google</a> - <span class="l">http://www.spam-report.net/fr/</span><br /><span class="n">Extension qui permet de dénoncer un site anormalement positionné dans Google, grace à diverses techniques (par exemple : le cloaking, qui permet d'afficher une page différent aux robots des moteurs de recherche : http://en.wikipedia.org/Cloaking ) (Tags: activism firefox_extension)</span><br /><br />
+<a href="http://www.pcmag.com/article2/0,1895,1558903,00.asp" class="d">IconEdit32: Download It Here</a> - <span class="l">http://www.pcmag.com/article2/0,1895,1558903,00.asp</span><br /><span class="n">un autre lien pour télécharger IconEdit32. Il faut s'enregistrer, mais on peut utiliser BugMeNot. (Tags: graphics icon)</span><br /><br />
+<a href="http://www.infini-fr.com/" class="d">Infini : l'encyclopédie de l'informatique et de la programmation</a> - <span class="l">http://www.infini-fr.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.expreg.com/expreg_article.php?art=timestamp" class="d">REGEX - REGEXP - Expressions régulières en PHP - Les articles d'expreg.com</a> - <span class="l">http://www.expreg.com/expreg_article.php?art=timestamp</span><br /><span class="n">un article intéressant sur les facons d'utiliser les dates et le temps dans les requêtes MySQL (Tags: php sql programming)</span><br /><br />
+<a href="http://www.emakers.info/radio/" class="d">.: Radio Live :. - La musique continuellement libre !</a> - <span class="l">http://www.emakers.info/radio/</span><br /><span class="n">une radio de musique libre (Tags: free)</span><br /><br />
+<a href="http://www.igloo-fr.org/" class="d">iGloo-fr.org - L'autre façon de communiquer</a> - <span class="l">http://www.igloo-fr.org/</span><br /><span class="n">un système de blogs (Tags: blog site)</span><br /><br />
+<a href="http://tools.wikimedia.de/~essjay/nqt.php" class="d">Network Query Tool</a> - <span class="l">http://tools.wikimedia.de/~essjay/nqt.php</span><br /><span class="n">et un autre (Tags: internet tools)</span><br /><br />
+<a href="http://www.dshield.org/ipinfo.php" class="d">DShield - IP Info</a> - <span class="l">http://www.dshield.org/ipinfo.php</span><br /><span class="n">un autre service qui permet d'obtenir des infos à propos d'une adresse IP. (Tags: internet tools)</span><br /><br />
+<a href="http://www.ripe.net/fcgi-bin/whois" class="d">Query the RIPE Database</a> - <span class="l">http://www.ripe.net/fcgi-bin/whois</span><br /><span class="n">ce site permet d'avoir des informations (beaucoup d'informations) sur une adresse IP. (Tags: internet tools)</span><br /><br />
+<a href="http://fsffrance.org/gpl/gpl-fr.fr.html" class="d">FSF France - Licence Publique Générale GNU</a> - <span class="l">http://fsffrance.org/gpl/gpl-fr.fr.html</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.siteduzero.com/tuto-3-13921-1-utiliser-firefox-sous-linux-et-windows-en-meme-temps.html" class="d">Utiliser Firefox sous Linux et Windows en même temps - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/tuto-3-13921-1-utiliser-firefox-sous-linux-et-windows-en-meme-temps.html</span><br /><span class="n">pratique. ca permet d'avoir le même profil avec firefox sous linux et windows (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.dogpile.com/" class="d">Dogpile Web Search Home Page</a> - <span class="l">http://www.dogpile.com/</span><br /><span class="n">un moteur de recherche qui semble performant (Tags: tools internet)</span><br /><br />
+<a href="http://ubuntu.wordpress.com/" class="d">Ubuntu Blog</a> - <span class="l">http://ubuntu.wordpress.com/</span><br /><span class="n">un blog (Tags: blog)</span><br /><br />
+<a href="http://www.vladstudio.com/wallpapers/" class="d">Wallpapers Gallery | Vladstudio.com - free desktop wallpapers, high resolution, widescreen and dual-monitor images, web design and development</a> - <span class="l">http://www.vladstudio.com/wallpapers/</span><br /><span class="n">d'autres fonds d'écran (Tags: graphics)</span><br /><br />
+<a href="http://www.smashingmagazine.com/2006/12/07/selected-wallpapers-for-desktop-and-web-design/" class="d">Selected Wallpapers: For Desktop & Web-Design | Smashing Magazine</a> - <span class="l">http://www.smashingmagazine.com/2006/12/07/selected-wallpapers-for-desktop-and-web-design/</span><br /><span class="n">des fonds d'écran. pour firefox : http://3couleurs.blogspot.com/2005/01/wallpapers-firefox.html (Tags: graphics)</span><br /><br />
+<a href="http://www.phpdebutant.org/article49.php" class="d">Bienvenue sur PHP Débutant</a> - <span class="l">http://www.phpdebutant.org/article49.php</span><br /><span class="n">pour faire des statistiques, mais ici on utilise des sessions. (Tags: php programmin)</span><br /><br />
+<a href="http://www.un-programmeur-php.ca/articles/ajax.php" class="d">Articles - Qu'est-ce qu'AJAX et comment l'utiliser</a> - <span class="l">http://www.un-programmeur-php.ca/articles/ajax.php</span><br /><span class="n">un autre tutoriel sur l'Ajax (Tags: ajax javascript programming)</span><br /><br />
+<a href="http://www.lephpfacile.com/howto/index.php?p=8" class="d">:: Le PHP Facile :: Comment faire ? - Un script de statistiques</a> - <span class="l">http://www.lephpfacile.com/howto/index.php?p=8</span><br /><span class="n">un moyen simple, sans cookie. L'adresse ip est cependant utilisée mais on peut faire un sha1 ou md5. (Tags: php programming)</span><br /><br />
+<a href="http://www.robots.darkseoteam.com/meta-robots.php" class="d">La balise meta robots</a> - <span class="l">http://www.robots.darkseoteam.com/meta-robots.php</span><br /><span class="n">plusieurs infos sur le fonctionnement de cette balise et des robots. (Tags: web)</span><br /><br />
+<a href="http://www.ephemail.net/" class="d">Adresse email jetable Ephemail. antispam ephemere temporaire jetable gratuite</a> - <span class="l">http://www.ephemail.net/</span><br /><span class="n"> (Tags: tools)</span><br /><br />
+<a href="http://www.stylexp.net/" class="d">stylexp.net</a> - <span class="l">http://www.stylexp.net/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://deathball.net/notpron/" class="d">Notpron - The Hardest Riddle Available on the Internet</a> - <span class="l">http://deathball.net/notpron/</span><br /><span class="n">un jeu ou vous devez chercher des indices pour résoudre des énigmes. (Tags: fun)</span><br /><br />
+<a href="http://perso.orange.fr/oncle.dom/humour/pere_noel/pere_noel.htm" class="d">Le père Noël</a> - <span class="l">http://perso.orange.fr/oncle.dom/humour/pere_noel/pere_noel.htm</span><br /><span class="n">trouvé via http://quentinc.net/forum/topic130-noyeux-jo%EBl/ (Tags: fun)</span><br /><br />
+<a href="http://developpeur.journaldunet.com/tutoriel/dht/040127_changer_curseur.shtml" class="d">CSS : Modifier l'état du curseur - JDNet Développeurs</a> - <span class="l">http://developpeur.journaldunet.com/tutoriel/dht/040127_changer_curseur.shtml</span><br /><span class="n">les curseurs CSS possibles. (Tags: css)</span><br /><br />
+<a href="http://www.clamav.net/" class="d">ClamAVâ„¢: Project News</a> - <span class="l">http://www.clamav.net/</span><br /><span class="n">un antivirus open-source (Tags: open-source securite antivirus)</span><br /><br />
+<a href="http://www.drivl.com/posts/view/494" class="d">Drivl.com | What code DOESN'T do in real life (that it does in the movies)</a> - <span class="l">http://www.drivl.com/posts/view/494</span><br /><span class="n"> (Tags: fun)</span><br /><br />
+<a href="http://www.netgear-forum.com/forum/index.php?showtopic=31299" class="d">Installation de ndiswrapper sous Mandrake/Mandriva - NETGEAR Forum</a> - <span class="l">http://www.netgear-forum.com/forum/index.php?showtopic=31299</span><br /><span class="n">pour installer une carte réseau negear sous linux (Tags: tools linux)</span><br /><br />
+<a href="http://www.htmlvalidator.com/htmlval/screenshots.html" class="d">CSE HTML Validator Pro Screen Shots</a> - <span class="l">http://www.htmlvalidator.com/htmlval/screenshots.html</span><br /><span class="n">un logiciel pour valider du html en local. (Tags: valide)</span><br /><br />
+<a href="http://www.tutoriaux-excalibur.com/starforce-3.htm" class="d">StarForce&Starforce 3 comment les contourner</a> - <span class="l">http://www.tutoriaux-excalibur.com/starforce-3.htm</span><br /><span class="n">à lire : http://sylvain.sab.free.fr/cestquoi/starforce.php (Tags: tools securite activism)</span><br /><br />
+<a href="http://www.jeunes-webmasters.com/" class="d">Scripts PHP pour Webmasters - JeunesWebmasters.com</a> - <span class="l">http://www.jeunes-webmasters.com/</span><br /><span class="n">a voir (Tags: php programming)</span><br /><br />
+<a href="http://www.scriptet.com/simple-map-fr.html" class="d">Simple site map generator in Xml, Html or text file format</a> - <span class="l">http://www.scriptet.com/simple-map-fr.html</span><br /><span class="n">un logiciel pour faire un plan de site web (Tags: tools)</span><br /><br />
+<a href="http://www.pluxml.org/" class="d">Pluxml.org - Blog ou Cms à l'Xml</a> - <span class="l">http://www.pluxml.org/</span><br /><span class="n">"Aussi léger qu'une plume et motorisé à l'Xml" (Tags: blog)</span><br /><br />
+<a href="http://www.project-yoshi.net/" class="d">Elevez votre Yoshi en ligne sur Project-Yoshi.net</a> - <span class="l">http://www.project-yoshi.net/</span><br /><span class="n"> (Tags: fun game)</span><br /><br />
+<a href="http://extensions.geckozone.org/Tempomail" class="d">Tempomail</a> - <span class="l">http://extensions.geckozone.org/Tempomail</span><br /><span class="n">une extension pour firefox qui permet d'avoir des adresses e mail temporaires. voir aussi "Get jetable mail" (Tags: firefox_enxtension)</span><br /><br />
+<a href="http://qwix.media-box.net/" class="d">BLOGIX, le blog de Jérôme aka qwix</a> - <span class="l">http://qwix.media-box.net/</span><br /><span class="n"> (Tags: blog)</span><br /><br />
+<a href="http://www.tlcc.com/admin/tips.nsf/ibmtipsview/783263610C515C4D8525716800533816" class="d">TLCC Developer tip for WebSphere, Notes and Domino - Create Better Looking Tables for Web Browsers and Internet Mail</a> - <span class="l">http://www.tlcc.com/admin/tips.nsf/ibmtipsview/783263610C515C4D8525716800533816</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://149.222.51.71/ilias/docs/html/layout_inc.html" class="d">ILIAS DOC</a> - <span class="l">http://149.222.51.71/ilias/docs/html/layout_inc.html</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.generation-nt.com/astuces/lire/234/reinstaller-completement-le-protocole-tcp-ip/" class="d">Réinstaller complètement le protocole TCP/IP : Trucs et Astuces Windows XP 2000 2003 NT</a> - <span class="l">http://www.generation-nt.com/astuces/lire/234/reinstaller-completement-le-protocole-tcp-ip/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.quirksmode.org/" class="d">QuirksMode - for all your browser quirks</a> - <span class="l">http://www.quirksmode.org/</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://browsers.evolt.org/?ie/32bit" class="d">evolt.org - Browser Archive</a> - <span class="l">http://browsers.evolt.org/?ie/32bit</span><br /><span class="n">hm. on peut télécharger les anciennes versions de IE, de la 1 à la 6. si vous aimez les virus, l'insécurité mais que vous détestez ce qui est pratique c'est pour vous :D (Tags: browser activism)</span><br /><br />
+<a href="http://www-ipst.u-strasbg.fr/pat/program/javascript/" class="d">petit cours javascript P. TRAU</a> - <span class="l">http://www-ipst.u-strasbg.fr/pat/program/javascript/</span><br /><span class="n"> (Tags: javascript)</span><br /><br />
+<a href="http://mozinet.free.fr/moz/fcn/tester_deboguer.html" class="d">Mozinet - Utiliser Mozilla pour tester et déboguer les sites Web - Henrik Gemal</a> - <span class="l">http://mozinet.free.fr/moz/fcn/tester_deboguer.html</span><br /><span class="n"> (Tags: tools programming)</span><br /><br />
+<a href="http://lepatron.tapor.ualberta.ca/" class="d">"Le Patron" - Aide à la rédaction</a> - <span class="l">http://lepatron.tapor.ualberta.ca/</span><br /><span class="n">un correcteur orthographique (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.la-grange.net/accessibilite/table_of_contents.html" class="d">Plongez dans l'accessibilité : Sommaire</a> - <span class="l">http://www.la-grange.net/accessibilite/table_of_contents.html</span><br /><span class="n">complet (Tags: accessible)</span><br /><br />
+<a href="http://www.wireimage.com/" class="d">WireImage.com – The Largest Entertainment Photo & Video Archive</a> - <span class="l">http://www.wireimage.com/</span><br /><span class="n">un service pour stocker des photos et images. (Tags: tolls internet graphics)</span><br /><br />
+<a href="http://blueballfixed.ytmnd.com/" class="d">Blue Ball Machine (Classic GIF Returned)</a> - <span class="l">http://blueballfixed.ytmnd.com/</span><br /><span class="n">un gif animé rigolo. (Tags: fun)</span><br /><br />
+<a href="http://www.ruby-doc.org/docs/beginner-fr/xhtml/index.html" class="d">Apprenez Ruby</a> - <span class="l">http://www.ruby-doc.org/docs/beginner-fr/xhtml/index.html</span><br /><span class="n"> (Tags: ruby programming)</span><br /><br />
+<a href="http://formats-ouverts.org/blog/2006/12/07/1029-france24-halde-et-telethon-pas-de-lien-hypertexte#content" class="d">France24, Halde et Téléthon : pas de lien hypertexte ! - Pour les formats ouverts !</a> - <span class="l">http://formats-ouverts.org/blog/2006/12/07/1029-france24-halde-et-telethon-pas-de-lien-hypertexte#content</span><br /><span class="n">"l'interdiction d'établir des liens hypertextes sans autorisation". bein voyons. il y en a qui n'ont pas compris le principe d'internet, à savoir l'échange. (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.aful.org/gdt/interop/" class="d">AFUL : Groupe de travail sur l'interopérabilité</a> - <span class="l">http://www.aful.org/gdt/interop/</span><br /><span class="n"> (Tags: accessible)</span><br /><br />
+<a href="http://www.dallaway.com/sloppy/" class="d">Sloppy - the slow proxy for dial-up modem speed simulation (slow down)</a> - <span class="l">http://www.dallaway.com/sloppy/</span><br /><span class="n">un logiciel qui permet de simuler un débit de connexion inférieur à sa connexion réelle (trouvé sur http://del.icio.us/sebsauvage/ ) (Tags: tools internet)</span><br /><br />
+<a href="http://dev.mysql.com/doc/refman/5.0/fr/mysql-optimization.html" class="d">MySQL AB :: Manuel de référence MySQL 5.0 :: 7 Optimisation de MySQL</a> - <span class="l">http://dev.mysql.com/doc/refman/5.0/fr/mysql-optimization.html</span><br /><span class="n"> (Tags: bdd mysql)</span><br /><br />
+<a href="http://www.nosoftwarepatents.com/" class="d">No Software Patents!</a> - <span class="l">http://www.nosoftwarepatents.com/</span><br /><span class="n">no aux brevets logiciels. (http://www.nosoftwarepatents.com/fr/m/intro/index.html ) (Tags: activism)</span><br /><br />
+<a href="http://u-m-p.fr/" class="d">RESO - ANTI SARKO - le site militant contre Nicolas Sarkozy</a> - <span class="l">http://u-m-p.fr/</span><br /><span class="n"> (Tags: activism)</span><br /><br />
+<a href="http://www.labanlieuesexprime.org/article.php3?id_article=1492" class="d">Ton choix pour 2007 c’est Ségolène ou Sarkozy, vive la démocratie. C’est ça l’avenir de la France ? ... (LBS)</a> - <span class="l">http://www.labanlieuesexprime.org/article.php3?id_article=1492</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.raslfront.org/" class="d">Ras l'front - accueil</a> - <span class="l">http://www.raslfront.org/</span><br /><span class="n">Un site contre le racisme. A propos de Sarkozy : "le voilà pris d'une frénésie guerrière à l'encontre des sans-papiers, de leurs enfants , qu'il expulse à tour de bras." (Tags: activism)</span><br /><br />
+<a href="http://www.ljouanneau.com/blog/2004/04/06/262-la-section-cdata-en-xml" class="d">La section CDATA en Xml - jy[B]log</a> - <span class="l">http://www.ljouanneau.com/blog/2004/04/06/262-la-section-cdata-en-xml</span><br /><span class="n">comment faire du javascript avec application/xhtml+xml. a garder PRECIEUSEMENT !! (Tags: javascript xhtml standards programming)</span><br /><br />
+<a href="http://quentinc.net/" class="d">Accueil -- Le Coin Web de QuentinC</a> - <span class="l">http://quentinc.net/</span><br /><span class="n">un site intéressant (Tags: site)</span><br /><br />
+<a href="http://www.opera.com/docs/specs/" class="d">Web Specifications Supported in Opera 9 - CSS</a> - <span class="l">http://www.opera.com/docs/specs/</span><br /><span class="n"> (Tags: browser)</span><br /><br />
+<a href="http://bob.developpez.com/phpxslt/" class="d">XML/XSL avec PHP - Club d'entraide des développeurs francophones</a> - <span class="l">http://bob.developpez.com/phpxslt/</span><br /><span class="n">pour parser du xml avec php (Tags: php xml programming)</span><br /><br />
+<a href="http://pecl.php.net/package/bcompiler" class="d">PECL :: Package :: Bcompiler</a> - <span class="l">http://pecl.php.net/package/bcompiler</span><br /><span class="n">le php peut être compilé (Tags: php programming tools)</span><br /><br />
+<a href="http://www.naholyr.com/home/index.php" class="d">Naholyr Devnotes - Accueil</a> - <span class="l">http://www.naholyr.com/home/index.php</span><br /><span class="n">Un site intéréssant (Tags: blog)</span><br /><br />
+<a href="http://www.lumadis.be/regex/index.php" class="d">Regex - Expressions régulières PCRE</a> - <span class="l">http://www.lumadis.be/regex/index.php</span><br /><span class="n"> (Tags: php programming)</span><br /><br />
+<a href="http://www.weebls-stuff.com/games/Rock+Scissors+Paper+Multiplayer/" class="d">Weebls Stuff - Rock Scissors Paper Multiplayer</a> - <span class="l">http://www.weebls-stuff.com/games/Rock+Scissors+Paper+Multiplayer/</span><br /><span class="n">pour jouer au chi fu mi sur internet !! (Tags: fun)</span><br /><br />
+<a href="http://www.brandspankingnew.net/archive/2006/12/hohoho.html" class="d">HoHoHo! : Design : Brand Spanking New</a> - <span class="l">http://www.brandspankingnew.net/archive/2006/12/hohoho.html</span><br /><span class="n">des icones (Tags: graphics icons)</span><br /><br />
+<a href="http://onsmalltalk.com/programming/my-personal-pet-peeves-i-see-in-other-peoples-code/" class="d">My Personal Pet Peeves I See in Other People’s Code</a> - <span class="l">http://onsmalltalk.com/programming/my-personal-pet-peeves-i-see-in-other-peoples-code/</span><br /><span class="n">trouvé sur les liens de sebsauvage(http://del.icio.us/sebsauvage/ ) (Tags: programming)</span><br /><br />
+<a href="http://secretgeek.net/GradientMaker.asp" class="d">secretGeek's Gradient Maker</a> - <span class="l">http://secretgeek.net/GradientMaker.asp</span><br /><span class="n">un outil pour faire des gradients (Tags: graphics tools)</span><br /><br />
+<a href="http://www.dbpoweramp.com/shutdown.htm" class="d">dBpowerAMP</a> - <span class="l">http://www.dbpoweramp.com/shutdown.htm</span><br /><span class="n">un programme pour arrêter windows plus rapidement (Tags: tools)</span><br /><br />
+<a href="http://www.w3.org/Style/CSS/current-work" class="d">CSS: Under Construction</a> - <span class="l">http://www.w3.org/Style/CSS/current-work</span><br /><span class="n">de la documentation sur les CSS (Tags: css)</span><br /><br />
+<a href="http://www.chez.com/xml/" class="d">XML Francophone</a> - <span class="l">http://www.chez.com/xml/</span><br /><span class="n">un site pour apprendre le xml et ses dérivés (Tags: xml)</span><br /><br />
+<a href="http://www.siteduzero.com/forum-83-4711-p1-tutoriaux.html" class="d">Tutoriaux - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/forum-83-4711-p1-tutoriaux.html</span><br /><span class="n">une liste de sites sur html, php, flash, javascript, etc (Tags: xhtml css php javascript flash xml programming)</span><br /><br />
+<a href="http://schneegans.de/sv/" class="d">XML Schema Validator</a> - <span class="l">http://schneegans.de/sv/</span><br /><span class="n">un autre validateur (Tags: xhtml valide)</span><br /><br />
+<a href="http://www.cleancss.com/" class="d">Clean CSS - A Resource for Web Designers - Optmize and Format your CSS</a> - <span class="l">http://www.cleancss.com/</span><br /><span class="n">il y a la même chose ici : http://www.cdburnerxp.se/cssparse/css_optimiser.php (Tags: css)</span><br /><br />
+<a href="http://wiki.media-box.net/documentation/css" class="d">documentation css - Ressources Mediabox - Wiki</a> - <span class="l">http://wiki.media-box.net/documentation/css</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.totoffe.net/" class="d">Le site de Totoffe</a> - <span class="l">http://www.totoffe.net/</span><br /><span class="n">intéressant (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.pouipouidesign.net/" class="d">Portail - pouipouidesign v.6 ... et pourquoi pas ? ©2006</a> - <span class="l">http://www.pouipouidesign.net/</span><br /><span class="n">un blog intéressant (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.stopie.com/" class="d">StopIE: Help stop Internet Explorer, the worlds most popular and worst internet browser - StopIE.com</a> - <span class="l">http://www.stopie.com/</span><br /><span class="n">un site contre IE (Tags: activism browser)</span><br /><br />
+<a href="http://pompage.net/pompe/separation/" class="d">POMPAGE - Séparer le comportement de la structure</a> - <span class="l">http://pompage.net/pompe/separation/</span><br /><span class="n">c'est à dire n'utiliser aucun attribut onevent dans le code html. (Tags: xhtml css valide)</span><br /><br />
+<a href="http://pompage.net/pompe/lirespec/" class="d">POMPAGE - Comment lire une spécification du W3C</a> - <span class="l">http://pompage.net/pompe/lirespec/</span><br /><span class="n">(les dtd) (Tags: system:unfiled)</span><br /><br />
+<a href="http://diabolhuile.free.fr/index.php" class="d">Diabolhuile.free.fr</a> - <span class="l">http://diabolhuile.free.fr/index.php</span><br /><span class="n">un site sur le diabolo, avec plusieurs figures (Tags: fun)</span><br /><br />
+<a href="http://pompage.net/pompe/sitestandard/" class="d">POMPAGE - Mon site Web est standard ! Et le vôtre ?</a> - <span class="l">http://pompage.net/pompe/sitestandard/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.oswd.org/" class="d">Open Source Web Design - Download free web design templates.</a> - <span class="l">http://www.oswd.org/</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.geneeweb.com/" class="d">GeneeWeb - le créateur de site ! Créer son site est gratuit, facile et rapide avec GeneeWeb !</a> - <span class="l">http://www.geneeweb.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.toutjavascript.com/reference/reference.php?ref=RegExp&parent=0" class="d">Objet : RegExp - Référence Tout JavaScript.com</a> - <span class="l">http://www.toutjavascript.com/reference/reference.php?ref=RegExp&parent=0</span><br /><span class="n"> (Tags: javascript)</span><br /><br />
+<a href="http://blog.alsacreations.com/2004/09/09/58-parents-et-enfants" class="d">Parents et enfants - Blog Alsacréations : XHTML, CSS et Standards web</a> - <span class="l">http://blog.alsacreations.com/2004/09/09/58-parents-et-enfants</span><br /><span class="n">pour savoir quel élément peut contenir quels autres (Tags: xhtml)</span><br /><br />
+<a href="http://web-modules.net/#" class="d">Web-Modules >> Services pour Webmaster</a> - <span class="l">http://web-modules.net/#</span><br /><span class="n">plusieurs petits scripts intéréssants (Tags: webmaster)</span><br /><br />
+<a href="http://www.ultrairprod.info/tutoriaux-photoshop/index.php" class="d">Tutoriaux-Photoshop :: Tutoriaux Adobe Photoshop ::</a> - <span class="l">http://www.ultrairprod.info/tutoriaux-photoshop/index.php</span><br /><span class="n"> (Tags: graphics)</span><br /><br />
+<a href="http://www.siteduzero.com/tuto-3-11537-1-eviter-les-injections-sql.html" class="d">Eviter les injections SQL - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/tuto-3-11537-1-eviter-les-injections-sql.html</span><br /><span class="n"> (Tags: securite)</span><br /><br />
+<a href="http://video.google.com/videoplay?docid=5695044769427318137&q=mentos+diet" class="d">The NEW EXTREME WAY To Do the Diet Coke Mentos Reaction Explosion - Google Video</a> - <span class="l">http://video.google.com/videoplay?docid=5695044769427318137&q=mentos+diet</span><br /><span class="n">waow ! une sorte de mini fusée avec des mentos et du coca.(voir aussi : http://www.siteduzero.com/forum-83-50236.html ) (Tags: fun)</span><br /><br />
+<a href="http://distrowatch.com/" class="d">DistroWatch.com: Put the fun back into computing. Use Linux, BSD.</a> - <span class="l">http://distrowatch.com/</span><br /><span class="n">pour télécharger des distributions linux (beaucoup de pub malheureusement) (Tags: linux)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-1823800-m-sarkozy-nous-spamme" class="d">M. Sarkozy nous spamme ?</a> - <span class="l">http://www.commentcamarche.net/forum/affich-1823800-m-sarkozy-nous-spamme</span><br /><span class="n"> (Tags: activism)</span><br /><br />
+<a href="http://blog.aelor.net/" class="d">Ubuntu's Stories</a> - <span class="l">http://blog.aelor.net/</span><br /><span class="n">un blog intéressant (trouvé sur les liens de sebsauvage) (Tags: blog)</span><br /><br />
+<a href="http://developpeur.journaldunet.com/imprimer/tutoriel/dht/051103-javascript-ajax-conseils.shtml" class="d">8 conseils pour le développement Ajax</a> - <span class="l">http://developpeur.journaldunet.com/imprimer/tutoriel/dht/051103-javascript-ajax-conseils.shtml</span><br /><span class="n"> (Tags: ajax programming)</span><br /><br />
+<a href="http://www.iana.org/assignments/media-types/" class="d">IANA | MIME Media Types</a> - <span class="l">http://www.iana.org/assignments/media-types/</span><br /><span class="n"> (Tags: server)</span><br /><br />
+<a href="http://httpd.apache.org/docs/2.0/howto/htaccess.html" class="d">Apache Tutorial: .htaccess files - Apache HTTP Server</a> - <span class="l">http://httpd.apache.org/docs/2.0/howto/htaccess.html</span><br /><span class="n"> (Tags: server)</span><br /><br />
+<a href="http://www.aidejavascript.com/" class="d">Aide Javascript</a> - <span class="l">http://www.aidejavascript.com/</span><br /><span class="n">et aussi du php (Tags: javascript php programming)</span><br /><br />
+<a href="http://tecfa.unige.ch/themes/FAQ-FL/controle_diff_page_web/htaccess.html" class="d">Création d'un fichier htaccess pour gérer l'accès. des pages web.</a> - <span class="l">http://tecfa.unige.ch/themes/FAQ-FL/controle_diff_page_web/htaccess.html</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.framasoft.net/article1988.html" class="d">SciTE - Éditeurs de Texte - Logiciels Libres - Framasoft</a> - <span class="l">http://www.framasoft.net/article1988.html</span><br /><span class="n">ce logiciel a l'air intéressant (Tags: logiciel open-source)</span><br /><br />
+<a href="http://www.htmlvalidator.com/" class="d">CSE HTML Validator - Professional HTML Syntax Checker and HTML Editor</a> - <span class="l">http://www.htmlvalidator.com/</span><br /><span class="n">mouais. payant et pas forcément performant, mais on ne sait jamais (Tags: xhtml validateur)</span><br /><br />
+<a href="http://www.htmlhelp.com/tools/validator/" class="d">Le validateur HTML du WDG</a> - <span class="l">http://www.htmlhelp.com/tools/validator/</span><br /><span class="n">encore un (Tags: xhtml valide)</span><br /><br />
+<a href="http://blog.alsacreations.com/2004/06/09/22-display-vous-connaissez" class="d">Display, vous connaissez ? - Blog Alsacréations : XHTML, CSS et Standards web</a> - <span class="l">http://blog.alsacreations.com/2004/06/09/22-display-vous-connaissez</span><br /><span class="n">elle peut prendre plusieurs de valeurs utiles (Tags: css)</span><br /><br />
+<a href="http://forum.alsacreations.com/faq/#item42" class="d">Comment bien décalrer XHTML 1.1 ?</a> - <span class="l">http://forum.alsacreations.com/faq/#item42</span><br /><span class="n">il faut le déclarer en application/xhtml+xml, point barre (Tags: xhtml site valide)</span><br /><br />
+<a href="http://extensions.geckozone.org/SmartMiddleClick" class="d">SmartMiddleClick - Geckozone</a> - <span class="l">http://extensions.geckozone.org/SmartMiddleClick</span><br /><span class="n">Par défaut, lors d'un clique-milieu sur un lien javascript, Firefox ouvre un nouvel onglet vide. Cette extension corrige ce problème et permet l'ouverture des liens en javascript dans un nouvel onglet. Elle permet donc -entre autres- d'ouvrir des pages, (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://www.tonwebmaster.com/zones_webmasters/cours_php_actions_fichier.php" class="d">cours php (écrire, lire, créer supprimer un fichier) ! [Ton Webmaster .com]</a> - <span class="l">http://www.tonwebmaster.com/zones_webmasters/cours_php_actions_fichier.php</span><br /><span class="n">beaucoup de fonction pour le traitement des fichiers (Tags: php programming)</span><br /><br />
+<a href="http://www.siteduzero.com/forum-83-91185-p1-js-colorisation-syntaxique-instantanee.html" class="d">[JS] Colorisation Syntaxique Instantanée - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/forum-83-91185-p1-js-colorisation-syntaxique-instantanee.html</span><br /><span class="n">plusieurs liens intéressants vers des essais de coloration syntaxique instantanée (en plusieurs langages) (Tags: programming)</span><br /><br />
+<a href="http://remouk.alt-tab.org/2006/11/14/le-gars-qui-ne-savait-pas-faire-de-musique/" class="d">Maître shteshitsu » Le gars qui ne savait pas faire de musique</a> - <span class="l">http://remouk.alt-tab.org/2006/11/14/le-gars-qui-ne-savait-pas-faire-de-musique/</span><br /><span class="n">marrant (Tags: fun)</span><br /><br />
+<a href="http://www.colorjack.com/studio/" class="d">ColorJack: Color Generator</a> - <span class="l">http://www.colorjack.com/studio/</span><br /><span class="n">une palette de couleurs (trouvée sur les liens de sebsauvage) (Tags: graphics fun)</span><br /><br />
+<a href="http://www.elizium.nu/scripts/lemmings/" class="d">All lemmingsâ„¢ accounted for!</a> - <span class="l">http://www.elizium.nu/scripts/lemmings/</span><br /><span class="n">Un petit jeu amusant (Tags: fun)</span><br /><br />
+<a href="http://www.inquisitorx.com/beta/" class="d">Inquisitor - Instant Search</a> - <span class="l">http://www.inquisitorx.com/beta/</span><br /><span class="n">Permet de faire une recherche avec plusieurs moteurs de recherche en lançant instantanément la recherche a chaque nouvelle lettre tapée. (Tags: fun service)</span><br /><br />
+<a href="http://tiny.media.mit.edu/" class="d">Tiny Icon Factory</a> - <span class="l">http://tiny.media.mit.edu/</span><br /><span class="n">vous pouvez créer des icônes qui seront ajoutées à des milliers d'autres (trouvé via :http://del.icio.us/sebsauvage/ ) (Tags: icon graphics fun)</span><br /><br />
+<a href="http://xhtml-css.net/" class="d">XHTML and CSS</a> - <span class="l">http://xhtml-css.net/</span><br /><span class="n"> (Tags: xhtml css)</span><br /><br />
+<a href="http://xhtmlcsskits.xooit.net/base.html" class="d">DKG-FMR</a> - <span class="l">http://xhtmlcsskits.xooit.net/base.html</span><br /><span class="n">Waow.... un éditeur de xhtml/css/js en temps réel ! (un pop-up s'ouvre pour voir le résultat) avec eds fragments de code, les balises a portée, etc... (Tags: ajax fun web2.0)</span><br /><br />
+<a href="http://www.chevrel.org/fr/extensions/" class="d">Mes extensions pour Firefox/thunderbird/Nvu</a> - <span class="l">http://www.chevrel.org/fr/extensions/</span><br /><span class="n"> (Tags: firefox_extension)</span><br /><br />
+<a href="http://www.blog-and-blues.org/weblog/2004/08/16/275-encodage-caracteres-xhtml" class="d">Spécifier l'encodage des caractères d'un document (X)HTML août 2004 Weblog - Blog & Blues</a> - <span class="l">http://www.blog-and-blues.org/weblog/2004/08/16/275-encodage-caracteres-xhtml</span><br /><span class="n"> (Tags: valide xhtml)</span><br /><br />
+<a href="http://www.numabilis.com/blog/2006-09-05-applet_object_ou_embed" class="d">Applet, Object ou Embed ? | Numabilis</a> - <span class="l">http://www.numabilis.com/blog/2006-09-05-applet_object_ou_embed</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://eric.hurtebis.chez-alice.fr/embed.htm" class="d">Essais EMBED</a> - <span class="l">http://eric.hurtebis.chez-alice.fr/embed.htm</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.opera-fr.com/" class="d">Opera-Fr.com :: Communauté francophone des utilisateurs d'opera</a> - <span class="l">http://www.opera-fr.com/</span><br /><span class="n"> (Tags: browser)</span><br /><br />
+<a href="http://webdod.free.fr/injections_sql.txt" class="d">Injections sql</a> - <span class="l">http://webdod.free.fr/injections_sql.txt</span><br /><span class="n"> (Tags: securite bdd)</span><br /><br />
+<a href="http://tourneffaceur.free.fr/" class="d">L'école de tournage d'effaceur - pen spinning</a> - <span class="l">http://tourneffaceur.free.fr/</span><br /><span class="n">des vidéos impresionnantes (Tags: fun)</span><br /><br />
+<a href="http://www.php.net/manual/fr/ref.tidy.php" class="d">PHP: Tidy - Manual</a> - <span class="l">http://www.php.net/manual/fr/ref.tidy.php</span><br /><span class="n">une extension pour php qui permet d'indenter le code html généré. (Tags: php programming)</span><br /><br />
+<a href="http://www.info-3000.com/phpmysql/listecompletefonction.php" class="d">Liste des fonctions PHP</a> - <span class="l">http://www.info-3000.com/phpmysql/listecompletefonction.php</span><br /><span class="n">une liste complète (cependant les fonctions sont celles d'anciennes versions de php) (Tags: php)</span><br /><br />
+<a href="http://www.presence-pc.com/forum/ppc/Programmation/test-presence-fichier-distant-is_file-sujet-1000-1.htm" class="d">Test de la présence d'un fichier hébregé sur un serveur distant [PHP]</a> - <span class="l">http://www.presence-pc.com/forum/ppc/Programmation/test-presence-fichier-distant-is_file-sujet-1000-1.htm</span><br /><span class="n">pratique (Tags: php programming)</span><br /><br />
+<a href="http://forum.ubuntu-fr.org/viewtopic.php?id=44965" class="d">Forum Ubuntu-fr.org / Wine est un Windows XP valide!</a> - <span class="l">http://forum.ubuntu-fr.org/viewtopic.php?id=44965</span><br /><span class="n">Ou "Comment faire croire qu'on a Windows en deux clics au super-logiciel-de-la-mort-qui-tue de Microsoft" (Tags: activism fun os)</span><br /><br />
+<a href="http://alliance.bugiweb.com/phpPetitions/modele/test/index_anti_verrous.html" class="d">Campagne Anti-Verrous</a> - <span class="l">http://alliance.bugiweb.com/phpPetitions/modele/test/index_anti_verrous.html</span><br /><span class="n">un site contre la loi dadvsi et tout ce qui tourne autour (Tags: activism article site)</span><br /><br />
+<a href="http://www.gnu.org/philosophy/categories.fr.html#ProprietarySoftware" class="d">Catégories de logiciels libres et non libres - Projet GNU - Free Software Foundation/Fondation pour le Logiciel Libre (FSF/FLL)</a> - <span class="l">http://www.gnu.org/philosophy/categories.fr.html#ProprietarySoftware</span><br /><span class="n"> (Tags: article)</span><br /><br />
+<a href="http://www.gnu.org/philosophy/free-software-for-freedom.fr.html" class="d">Pourquoi «Free Software» est-il meilleur que «Open Source» - Projet GNU - Free Software Foundation/Fondation pour le Logiciel Libre (FSF/FLL)</a> - <span class="l">http://www.gnu.org/philosophy/free-software-for-freedom.fr.html</span><br /><span class="n"> (Tags: article)</span><br /><br />
+<a href="http://www.kde-look.org/index.php?xcontentmode=22" class="d">KDE-Look.org</a> - <span class="l">http://www.kde-look.org/index.php?xcontentmode=22</span><br /><span class="n">une librairie d'icônes (Tags: graphics)</span><br /><br />
+<a href="http://www.scaranet.net/" class="d">scaranet.net</a> - <span class="l">http://www.scaranet.net/</span><br /><span class="n">un site interessant, et le logiciel shoot2png est très bien ! (Tags: freeware site)</span><br /><br />
+<a href="http://www.dotclear.net/" class="d">Accueil - DotClear - DotClear 2</a> - <span class="l">http://www.dotclear.net/</span><br /><span class="n">un excellent logiciel libre et gratuit utilisé pour la conception de blogs (Tags: blog open-source freeware)</span><br /><br />
+<a href="http://fockniouzes.zaup.org/" class="d">.::[FockNiouzes]::. - Webradio libre associative.</a> - <span class="l">http://fockniouzes.zaup.org/</span><br /><span class="n">un site de musique libre (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.tousenprison.info/index.html" class="d">A nous la guillotine</a> - <span class="l">http://www.tousenprison.info/index.html</span><br /><span class="n">un site sur la loi DADVSI (Tags: activism)</span><br /><br />
+<a href="http://www.goldzoneweb.info/" class="d">GoLDZoNE Web HoSTING - L'hébergeur web gratuit pour tous</a> - <span class="l">http://www.goldzoneweb.info/</span><br /><span class="n">un hébergeur gratuit qui a l'air interessant (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.editions-eyrolles.com/css2/tests/couleur/couleur9.htm" class="d">Tests css</a> - <span class="l">http://www.editions-eyrolles.com/css2/tests/couleur/couleur9.htm</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.wormux.org/wiki/fr/index.php" class="d">Wormux</a> - <span class="l">http://www.wormux.org/wiki/fr/index.php</span><br /><span class="n">Génial ! Un clone open source de Worms ! (trouvé via : http://del.icio.us/sebsauvage/ (Tags: fun games)</span><br /><br />
+<a href="http://yansanmo.no-ip.org/w3c-validator/" class="d">Validation HTML/XHTML</a> - <span class="l">http://yansanmo.no-ip.org/w3c-validator/</span><br /><span class="n">encore un validateur xhtml/xml, qui a l'air bon aussi. Le site est interessant (voir : http://yansanmo.no-ip.org/ ) (Tags: valide)</span><br /><br />
+<a href="http://scaraweb.free.fr/scaranet/www/?page=index&z=shoot2png" class="d">Scaramanga's</a> - <span class="l">http://scaraweb.free.fr/scaranet/www/?page=index&z=shoot2png</span><br /><span class="n">Shoot2Png, un logiciel pour faire des captures d'écran. Il a l'air bien (Tags: system:unfiled)</span><br /><br />
+<a href="http://cui.unige.ch/~robin0/configuration.xhtml" class="d">Configuration</a> - <span class="l">http://cui.unige.ch/~robin0/configuration.xhtml</span><br /><span class="n">Plusieurs logiciels intéressants ainsi qu'une liste d'extensions pour Firefox (Tags: firefox_extension logiciel)</span><br /><br />
+<a href="http://www.kopikol.net/" class="d">kopikol.net</a> - <span class="l">http://www.kopikol.net/</span><br /><span class="n">un annuaire de sites (Tags: fun)</span><br /><br />
+<a href="http://bbcomposer.elitwork.com/" class="d">BBComposer : Editeur BBCode intégré à Mozilla Firefox</a> - <span class="l">http://bbcomposer.elitwork.com/</span><br /><span class="n">une extension qui permet d'éditer en mode WYSIWYG une page, avec le langage xhtml, bbcode, ou xbbcode (Tags: firefox_extension xhtml)</span><br /><br />
+<a href="http://www.codeshttp.com/" class="d">Liste complète des codes HTTP</a> - <span class="l">http://www.codeshttp.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://extensions.geckozone.org/FireBug" class="d">FireBug</a> - <span class="l">http://extensions.geckozone.org/FireBug</span><br /><span class="n">cette extension permet de voir le traffic xmlhttprequest, les fonctions javascript, débugger certaines pages ou scripts.... (Tags: firefox_extension)</span><br /><br />
+<a href="http://www.pygame.org/projects/20/308/" class="d">pygame - python game development</a> - <span class="l">http://www.pygame.org/projects/20/308/</span><br /><span class="n">un site de développement de jeux en python (Tags: python programming games fun)</span><br /><br />
+<a href="http://abcdelasecurite.free.fr/chkrootkit.org/download/index.html" class="d">chkrootkit -- locally checks for signs of a rootkit</a> - <span class="l">http://abcdelasecurite.free.fr/chkrootkit.org/download/index.html</span><br /><span class="n">un anti-rootkit (Tags: anti-rootkit securite)</span><br /><br />
+<a href="http://clb56.freezee.org/" class="d">clb56 - Tests en développement web - Page d'accueil.</a> - <span class="l">http://clb56.freezee.org/</span><br /><span class="n"> (Tags: webmaster tools)</span><br /><br />
+<a href="http://www.info-actu.info/" class="d">Info-Actu</a> - <span class="l">http://www.info-actu.info/</span><br /><span class="n">un site interessant (Tags: system:unfiled)</span><br /><br />
+<a href="http://membres.lycos.fr/cybertux/" class="d">Tux</a> - <span class="l">http://membres.lycos.fr/cybertux/</span><br /><span class="n">une galerie de png de pingouins :) (Tags: graphics png)</span><br /><br />
+<a href="http://www.exquisses.com/gecko/test.php?texte=Mettez+un+texte" class="d">test.php (Image PNG, 180x60 pixels)</a> - <span class="l">http://www.exquisses.com/gecko/test.php?texte=Mettez+un+texte</span><br /><span class="n">pour mettre du texte sur une image (Tags: fun)</span><br /><br />
+<a href="http://www.certifyr.com/" class="d">Official Web 2.0 Certifyr</a> - <span class="l">http://www.certifyr.com/</span><br /><span class="n">on aura tout vu (Tags: web2.0)</span><br /><br />
+<a href="http://www.gtopala.com/" class="d">SIW - System Information for Windows</a> - <span class="l">http://www.gtopala.com/</span><br /><span class="n">un logiciel pour avoir différentes informations sur son ordinateur (windows). (Tags: windows tools)</span><br /><br />
+<a href="http://www.fleiner.com/bots/" class="d">How to keep bad robots</a> - <span class="l">http://www.fleiner.com/bots/</span><br /><span class="n">une explicaion sur les robots qui visitent les sites pour les indexer. (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.la-grange.net/w3c/html4.01/interact/scripts.html#h-18.2.3" class="d">Les scripts dans les documents HTML</a> - <span class="l">http://www.la-grange.net/w3c/html4.01/interact/scripts.html#h-18.2.3</span><br /><span class="n">les évènement relatifs aux actions de la souris : onclick, onmouseover, etc.... (Tags: javascript)</span><br /><br />
+<a href="http://marc.golinvaux.free.fr/shamrock/session.php" class="d">shamrock</a> - <span class="l">http://marc.golinvaux.free.fr/shamrock/session.php</span><br /><span class="n">un autre os en ligne. (Tags: os web2.0)</span><br /><br />
+<a href="http://jojaba.free.fr/" class="d">Le site de JoJaBa</a> - <span class="l">http://jojaba.free.fr/</span><br /><span class="n">slogan du site : "Traduction d'extensions Mozilla et utilisation de PLume CMS". Un bon site, même s'il n'est plsu mis a jour. (Tags: firefox_extension)</span><br /><br />
+<a href="http://plone.org/" class="d">plone.org — plone.org</a> - <span class="l">http://plone.org/</span><br /><span class="n">un autre cms open source (cf guppy) qui a l'air interessant (Tags: cms free)</span><br /><br />
+<a href="http://dean.edwards.name/IE7/" class="d">/IE7/</a> - <span class="l">http://dean.edwards.name/IE7/</span><br /><span class="n">une librairie javascript qui permet de "faire fonctionner" certaines propriétés CSS par IE. Quand est ce qu'on aura plus besoin de recourir a tant de manipulations avec ce navigateur ? (Tags: activism browser javascript)</span><br /><br />
+<a href="http://totalementcretin.apinc.org/blog/2006/10/26/370" class="d">IE7: easier and more secure (2) - Totalement Cretin(s)</a> - <span class="l">http://totalementcretin.apinc.org/blog/2006/10/26/370</span><br /><span class="n">youpi ! encore des failles de sécurité dans IE ! Qu'est ce qu'ils sont généreux chez microsoft ! (Tags: activism browser)</span><br /><br />
+<a href="http://skybeurk.net/" class="d">Skybeurk Awards : Les Pires SkyBlogs du Net</a> - <span class="l">http://skybeurk.net/</span><br /><span class="n">je déteste les skyblogs (Tags: fun blog)</span><br /><br />
+<a href="http://www.squarefree.com/bookmarklets/webdevel.html" class="d">Web Development Bookmarklets</a> - <span class="l">http://www.squarefree.com/bookmarklets/webdevel.html</span><br /><span class="n">quelques scripts javascripts (Tags: javascript)</span><br /><br />
+<a href="http://www.lemondeduweb.net/" class="d">Lemondeduweb</a> - <span class="l">http://www.lemondeduweb.net/</span><br /><span class="n">un site/blog interessant (Tags: blog)</span><br /><br />
+<a href="http://gabbly.com/" class="d">Gabbly</a> - <span class="l">http://gabbly.com/</span><br /><span class="n">ce site permet de chatter avec les visiteurs d'un autre site. Une fenêtre s'ouvre par-dessus la page du site visité. Tout ca sans aucune installation, c'est immédiat. Essayez par exemple http://gabbly.com/sylvain.sab.free.fr/ (Tags: fun chat)</span><br /><br />
+<a href="http://wiki.creativecommons.org/MozCC" class="d">MozCC - CcWiki</a> - <span class="l">http://wiki.creativecommons.org/MozCC</span><br /><span class="n">Une extension pour Firefox qui permet de voir les détails d'une licence Creative Commons d'un site. (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://www.commentcamarche.net/actualites/firefox-interview-et-version-2-0-finale-2437007-actualite.php3" class="d">Firefox - Interview et version 2.0 finale - Logiciels/Systèmes - Actualités</a> - <span class="l">http://www.commentcamarche.net/actualites/firefox-interview-et-version-2-0-finale-2437007-actualite.php3</span><br /><span class="n">bon téléchargement :) (Tags: firefox)</span><br /><br />
+<a href="http://www.commentcamarche.net/faq/sujet-244-lutter-contre-les-spammeurs" class="d">Lutter contre les spammeurs</a> - <span class="l">http://www.commentcamarche.net/faq/sujet-244-lutter-contre-les-spammeurs</span><br /><span class="n"> (Tags: antispam securite)</span><br /><br />
+<a href="http://www.peutetreunereponse.net/" class="d">Peut-être une réponse ?</a> - <span class="l">http://www.peutetreunereponse.net/</span><br /><span class="n">plusieurs astuces pour webmaster et autres. interessant (Tags: webmaster)</span><br /><br />
+<a href="http://fr.selfhtml.org/" class="d">SELFHTML</a> - <span class="l">http://fr.selfhtml.org/</span><br /><span class="n">Une liste de balises, fonction et propriétés html/css/jS.... Trouvé via : http://www.commentcamarche.net/forum/affich-2433992 (Tags: xhtml css javascript webmaster)</span><br /><br />
+<a href="http://openweb.eu.org/articles/objet_xmlhttprequest/" class="d">Openweb.eu.org - L'objet XMLHttpRequest</a> - <span class="l">http://openweb.eu.org/articles/objet_xmlhttprequest/</span><br /><span class="n"> (Tags: ajax programming)</span><br /><br />
+<a href="http://siddh.developpez.com/articles/ajax/" class="d">Web 2.0, allez plus loin avec AJAX et XMLHttpRequest - Club d'entraide des développeurs francophones</a> - <span class="l">http://siddh.developpez.com/articles/ajax/</span><br /><span class="n"> (Tags: ajax programming)</span><br /><br />
+<a href="http://www.xul.fr/xml-ajax.html" class="d">Ajax et XMLHttpRequest</a> - <span class="l">http://www.xul.fr/xml-ajax.html</span><br /><span class="n"> (Tags: ajax programming tutoriel)</span><br /><br />
+<a href="http://fr.wikibooks.org/wiki/Programmation_PHP" class="d">Programmation PHP - Wikibooks</a> - <span class="l">http://fr.wikibooks.org/wiki/Programmation_PHP</span><br /><span class="n">une référence sur la programmation en php sur wikipedia (Tags: php programming)</span><br /><br />
+<a href="http://www.css3.info/selectors-test/index.html" class="d">CSS Selectors testsuite - CSS3 . info</a> - <span class="l">http://www.css3.info/selectors-test/index.html</span><br /><span class="n">un test pour voir quels sont les selceteurs css 3 compatibles avec votre navigateur (Tags: css)</span><br /><br />
+<a href="http://rakaz.nl/item/how_well_do_browsers_support_css_selectors" class="d">rakaz - How well do browsers support CSS Selectors?</a> - <span class="l">http://rakaz.nl/item/how_well_do_browsers_support_css_selectors</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.cdburnerxp.se/cssparse/css_optimiser.php" class="d">CSS Formatteur et Optimiseur (basé sur CSSTidy 1.2)</a> - <span class="l">http://www.cdburnerxp.se/cssparse/css_optimiser.php</span><br /><span class="n">un autre très bon optimiseur de code css (Tags: css)</span><br /><br />
+<a href="http://flumpcakes.co.uk/css/keyboard#" class="d">CSS Keyboard : flumpCakes</a> - <span class="l">http://flumpcakes.co.uk/css/keyboard#</span><br /><span class="n">un faux clavier entièrement en CSS ! (Tags: css)</span><br /><br />
+<a href="http://flumpcakes.co.uk/css/optimiser/" class="d">Online CSS Optimiser/Optimizer : flumpCakes</a> - <span class="l">http://flumpcakes.co.uk/css/optimiser/</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://developer.mozilla.org/fr/docs/AJAX:Premiers_pas" class="d">AJAX:Premiers pas - MDC</a> - <span class="l">http://developer.mozilla.org/fr/docs/AJAX:Premiers_pas</span><br /><span class="n">un tutoriel sur ajax (Tags: ajax programming webmaster)</span><br /><br />
+<a href="http://fr2.php.net/manual/fr/reserved.variables.php#reserved.variables.server" class="d">PHP: Variables prédéfinies - Manual</a> - <span class="l">http://fr2.php.net/manual/fr/reserved.variables.php#reserved.variables.server</span><br /><span class="n">la doc php sur les variables superglobales (Tags: php)</span><br /><br />
+<a href="http://www.phpscripts-fr.net/scripts/scripts.php?cat=MailingList+%2F+NewsLetter" class="d">PHPScripts - Scripts PHP / MySQL - MailingList / NewsLetter</a> - <span class="l">http://www.phpscripts-fr.net/scripts/scripts.php?cat=MailingList+%2F+NewsLetter</span><br /><span class="n"> (Tags: php)</span><br /><br />
+<a href="http://www.developpez.net/forums/archive/index.php/f-241.html" class="d">Outils [Archives] - Forum des développeurs</a> - <span class="l">http://www.developpez.net/forums/archive/index.php/f-241.html</span><br /><span class="n">une faq sur php (Tags: php)</span><br /><br />
+<a href="http://greenmarocain.blog.jeuxvideo.com/25.php" class="d">BashFR.org, ... - La Maroquinerie (greenmarocain)</a> - <span class="l">http://greenmarocain.blog.jeuxvideo.com/25.php</span><br /><span class="n">Je cite : "Sur BashFR ( http://www.bashfr.org ), on trouve des conversations marrantes trouvées sur des forums, chats, etc. Je vais mettre ici celles qui parlent de jeux vidéo. Pour certaines, avec le titre du jeu avant, c'est moins drôle, y a moins de (Tags: fun)</span><br /><br />
+<a href="http://www.commentcamarche.net/actualites/suggestions-pour-firefox-3-2425727-actualite.php3" class="d">Suggestions pour Firefox 3</a> - <span class="l">http://www.commentcamarche.net/actualites/suggestions-pour-firefox-3-2425727-actualite.php3</span><br /><span class="n"> (Tags: firefox)</span><br /><br />
+<a href="http://desencyclopedie.wikia.com/wiki/D%C3%A9sencyclop%C3%A9die:Accueil" class="d">Désencyclopédie:Accueil - Désencyclopédie</a> - <span class="l">http://desencyclopedie.wikia.com/wiki/D%C3%A9sencyclop%C3%A9die:Accueil</span><br /><span class="n">une parodie de Wikipedia (Tags: fun)</span><br /><br />
+<a href="http://www.macbidouille.com/articles/218/" class="d">MacBidouille.com : Bidouille hardware sur Mac</a> - <span class="l">http://www.macbidouille.com/articles/218/</span><br /><span class="n">Je cite : "Cet article détaille comment faire cohabiter Mac OS X, Linux, Windows XP et Windows Vista sur un même Mac Pro." (Tags: os windows linux)</span><br /><br />
+<a href="http://www.keime.fr/projets.html" class="d">Quelques logiciels</a> - <span class="l">http://www.keime.fr/projets.html</span><br /><span class="n"> (Tags: freeware)</span><br /><br />
+<a href="http://www.phptools4u.com/site/2002/06/04/97-variables-utiles-en-php" class="d">PHPTools4U.com : Variables utiles en PHP</a> - <span class="l">http://www.phptools4u.com/site/2002/06/04/97-variables-utiles-en-php</span><br /><span class="n">surtout des variables serveur (Tags: php)</span><br /><br />
+<a href="http://www.expreg.com/" class="d">REGEX - REGEXP - Expressions régulières</a> - <span class="l">http://www.expreg.com/</span><br /><span class="n">un site sur les regex en php (Tags: php)</span><br /><br />
+<a href="http://koivi.com/ie-png-transparency/" class="d">PNG-24 Alpha Transparency With Microsoft Internet Explorer</a> - <span class="l">http://koivi.com/ie-png-transparency/</span><br /><span class="n"> (Tags: graphics webmaster)</span><br /><br />
+<a href="http://www.ryxeo.com/index.php/2006/07/12/56-notre-site-a-t-il-des-problemes-avec-internet-explorer" class="d">Notre site a-t-il des problèmes avec Internet Explorerâ„¢? - RyXéo SARL</a> - <span class="l">http://www.ryxeo.com/index.php/2006/07/12/56-notre-site-a-t-il-des-problemes-avec-internet-explorer</span><br /><span class="n">"Les internautes ne s'aperçoivent donc pas du manque et pensent qu'Internet Explorer est un bon navigateur". Sic.... (Tags: activism)</span><br /><br />
+<a href="http://web-modules.net/" class="d">Web-Modules >> Services pour Webmaster</a> - <span class="l">http://web-modules.net/</span><br /><span class="n"> (Tags: webmaster)</span><br /><br />
+<a href="http://www.commentcamarche.net/faq/sujet-188-utiliser-des-accents-et-autres-caracteres-speciaux" class="d">Utiliser des accents et autres caractères spéciaux</a> - <span class="l">http://www.commentcamarche.net/faq/sujet-188-utiliser-des-accents-et-autres-caracteres-speciaux</span><br /><span class="n">pour utiliser des accents dans les langages de programmation (Tags: caractere speciaux)</span><br /><br />
+<a href="http://www.liutilities.com/products/wintaskspro/processlibrary/" class="d">Windows Process Library</a> - <span class="l">http://www.liutilities.com/products/wintaskspro/processlibrary/</span><br /><span class="n">une autre liste de processus (Tags: tools windows)</span><br /><br />
+<a href="http://www.opensourcecms.com/" class="d">OpenSourceCMS - Home</a> - <span class="l">http://www.opensourcecms.com/</span><br /><span class="n">un site de CMS open source. (les cms permettent de faire un site complet sans s'y connaitre) (Tags: free gratuit webmaster site)</span><br /><br />
+<a href="http://www.exalead.fr/search" class="d">Exalead</a> - <span class="l">http://www.exalead.fr/search</span><br /><span class="n">un nouveau moteur de recherche (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.csstopsites.com/resources/" class="d">CSS Top Sites Resources</a> - <span class="l">http://www.csstopsites.com/resources/</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.css3.info/preview/" class="d">CSS3 Preview - CSS3 . info</a> - <span class="l">http://www.css3.info/preview/</span><br /><span class="n">un apercu de ce que permettron les CSS 3 (trouvé via les liens de sebsauvage) (Tags: css webmaster)</span><br /><br />
+<a href="http://www.apachefriends.org/fr/xampp-linux.html" class="d">apache friends - xampp pour linux</a> - <span class="l">http://www.apachefriends.org/fr/xampp-linux.html</span><br /><span class="n">un serveur ? (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.linux-area.info/" class="d">Linux-area</a> - <span class="l">http://www.linux-area.info/</span><br /><span class="n">un site qui a l'air interessant (sur Linux) (Tags: os linux)</span><br /><br />
+<a href="http://afpy.org/" class="d">AFPY — Association Francophone PYthon</a> - <span class="l">http://afpy.org/</span><br /><span class="n"> (Tags: python programming)</span><br /><br />
+<a href="http://www.w3.org/Style/css3-selectors-updates/WD-css3-selectors-20010126.fr.html" class="d">CSS3 module: W3C Selectors</a> - <span class="l">http://www.w3.org/Style/css3-selectors-updates/WD-css3-selectors-20010126.fr.html</span><br /><span class="n">plusieurs pseudo classes parfois utiles. certaines sont CSS 2 (Tags: css)</span><br /><br />
+<a href="http://media-convert.com/convert/" class="d">Media Convert - free and on line - convert and split sound, ringtones, images, docs</a> - <span class="l">http://media-convert.com/convert/</span><br /><span class="n">un convertisseur de fichiers en ligne. beaucoup de formats supportés. (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.cssplay.co.uk/book/index.html" class="d">A css mouseover</a> - <span class="l">http://www.cssplay.co.uk/book/index.html</span><br /><span class="n">une excellente utilisation des CSS. Comme d'habitude, ne fonctionne pas sous IE. (Tags: css)</span><br /><br />
+<a href="http://xmlfr.org/w3c/TR/xslt/" class="d">Transformations XSL (XSLT)</a> - <span class="l">http://xmlfr.org/w3c/TR/xslt/</span><br /><span class="n">les recommandations du W3C (Tags: webmaster xml xslt)</span><br /><br />
+<a href="http://seb.prevot.free.fr/csscursor.html" class="d">Changement de curseurs en CSS</a> - <span class="l">http://seb.prevot.free.fr/csscursor.html</span><br /><span class="n"> (Tags: css)</span><br /><br />
+<a href="http://www.xs4all.nl/~jvdkuyp/flash/see.htm" class="d">Icon War</a> - <span class="l">http://www.xs4all.nl/~jvdkuyp/flash/see.htm</span><br /><span class="n"> (Tags: fun)</span><br /><br />
+<a href="http://blog.virgule.info/" class="d">ツ blog.virgule.info</a> - <span class="l">http://blog.virgule.info/</span><br /><span class="n">un autre blog interessant sur divers sujets (entre autres l'informatique) (Tags: blog article)</span><br /><br />
+<a href="http://www.petitiononline.com/msiepng/petition.html" class="d">Proper PNG Support in Internet Explorer for Windows Petition</a> - <span class="l">http://www.petitiononline.com/msiepng/petition.html</span><br /><span class="n">Ah, esperons que cette pétition se fera entendre et aura un impact (IE ne supporte pas les png transparents, vachement pratique d'utiliser les gifs.....) (Tags: webmaster browser article activism)</span><br /><br />
+<a href="http://blogzinet.free.fr/index.php?2004/09/22/359-liens-mozilla-vs-ie-essentiels" class="d">Liens Mozilla vs IE essentiels - BlogZiNet</a> - <span class="l">http://blogzinet.free.fr/index.php?2004/09/22/359-liens-mozilla-vs-ie-essentiels</span><br /><span class="n">Pourquoi FF est mieux que IE. On pourait aussi dire : "Pourquoi IE est le moins avancé des navigateurs graphiques". (Tags: browser article)</span><br /><br />
+<a href="http://www.biologeek.com/contact/mail_encoder.php.txt" class="d">Mail encoder</a> - <span class="l">http://www.biologeek.com/contact/mail_encoder.php.txt</span><br /><span class="n">des fonctions php qui permettraient d'encoder un e mail (Tags: php webmaster securite)</span><br /><br />
+<a href="http://msdn.microsoft.com/workshop/essentials/whatsnew/whatsnew_70_scr.asp" class="d">What's New in Internet Explorer 7 (Script)</a> - <span class="l">http://msdn.microsoft.com/workshop/essentials/whatsnew/whatsnew_70_scr.asp</span><br /><span class="n"> (Tags: article browser)</span><br /><br />
+<a href="http://www.biologeek.com/" class="d">Biologeek : Ubuntu, bio-informatique et geekeries libres d'un bio-informaticien au quotidien.</a> - <span class="l">http://www.biologeek.com/</span><br /><span class="n">un bon site que j'aurais du marquer plus tôt. (Tags: webmaster article site)</span><br /><br />
+<a href="http://www.codeblocks.org/" class="d">Code::Blocks IDE - Open Source, Cross-platform Free C++ IDE</a> - <span class="l">http://www.codeblocks.org/</span><br /><span class="n">un éditeur C/C++ open source (Tags: programming logiciel gratuit freeware)</span><br /><br />
+<a href="http://www.acces-pour-tous.net/fichiers_communs/access.php?rub=sigles" class="d">Les sigles, acronymes et autres abréviations</a> - <span class="l">http://www.acces-pour-tous.net/fichiers_communs/access.php?rub=sigles</span><br /><span class="n"> (Tags: webmaster accessibilite)</span><br /><br />
+<a href="http://www.stervinou.com/projets/rss/" class="d">Jean-Yves Stervinou > RSS 2.0 traduction française</a> - <span class="l">http://www.stervinou.com/projets/rss/</span><br /><span class="n">un article interessant sur le format rss (Tags: webmaster xml)</span><br /><br />
+<a href="http://www.monrss.info/" class="d">Mon RSS :: Des flux RSS et des Podcast pour être au courant de l'actualité</a> - <span class="l">http://www.monrss.info/</span><br /><span class="n"> (Tags: général)</span><br /><br />
+<a href="http://www.googlefight.com/index.php?lang=fr_FR" class="d">Google Fight : proposez un combat avec googleFight</a> - <span class="l">http://www.googlefight.com/index.php?lang=fr_FR</span><br /><span class="n"> (Tags: fun)</span><br /><br />
+<a href="http://www.siteduzero.com/forum-83-55210-p1-linux-sur-la-toile.html" class="d">Linux sur la Toile - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/forum-83-55210-p1-linux-sur-la-toile.html</span><br /><span class="n">Une liste utile de sites sur Linux. (Tags: os linux)</span><br /><br />
+<a href="http://www.commentcamarche.net/actualites/mandriva-2007-dans-les-bacs-2406038-actualite.php3" class="d">Mandriva 2007 dans les bacs</a> - <span class="l">http://www.commentcamarche.net/actualites/mandriva-2007-dans-les-bacs-2406038-actualite.php3</span><br /><span class="n"> (Tags: os linux)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-2407608-le-reve-americain" class="d">Le rêve américain...</a> - <span class="l">http://www.commentcamarche.net/forum/affich-2407608-le-reve-americain</span><br /><span class="n"> (Tags: activism)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-2406267-nouvelle-loi-sur-la-surveillance-electronique" class="d">Nouvelle loi sur la surveillance électronique</a> - <span class="l">http://www.commentcamarche.net/forum/affich-2406267-nouvelle-loi-sur-la-surveillance-electronique</span><br /><span class="n">En plus, les Etats unis sont en train de faire voter une loi quipermettrait d'emprisonner et de *torturer* n'importe qui sur le territoire américain. Mais vous inquiétez pas hein, c'est les défenseurs du monde libre. (Tags: activism)</span><br /><br />
+<a href="http://www.hoaxbuster.com/" class="d">HoaxBuster - Premiere ressource francophone sur les hoax</a> - <span class="l">http://www.hoaxbuster.com/</span><br /><span class="n">Ce site recense des chaines qui existent. Si vous recevez un mail groupé avec un contenu bidon, c'est surement une chaine. Voici comment envoyer un mail groupé en cachant les destinataires : http://sylvain.sab.free.fr/autres/temp/mailccibss.gif (Tags: securite)</span><br /><br />
+<a href="http://www.videoronk.com/" class="d">::.VideoRonk.:: Your favorite videos</a> - <span class="l">http://www.videoronk.com/</span><br /><span class="n">ce site mermet d'enregistrer des videos de google, youtube, et autres sites de vidéo en ligne. Trouvé comme pas mal d'autres sur http://del.icio.us/sebsauvage/ (Tags: fun)</span><br /><br />
+<a href="http://labs.digg.com/swarm/" class="d">digg labs / swarm</a> - <span class="l">http://labs.digg.com/swarm/</span><br /><span class="n">Une animation en flash qui permet de voir les liens postés dans digg. Lorsque l'on pointe la souris sur un lien, on voit les liens en rapport. (Tags: fun)</span><br /><br />
+<a href="http://www.liveplasma.com/" class="d">liveplasma music, movies, search engine and discovery engine</a> - <span class="l">http://www.liveplasma.com/</span><br /><span class="n">Entrez le nom d'un artiste, vous aurez des artistes qui y ressemblent. En plus, c'est marrant de se balader dans ce truc : ) (Tags: fun)</span><br /><br />
+<a href="http://www.ndesign-studio.com/resources/links/" class="d">Links</a> - <span class="l">http://www.ndesign-studio.com/resources/links/</span><br /><span class="n">des liens interresants. (Tags: webmaster fun site)</span><br /><br />
+<a href="http://www.ndesign-studio.com/resources/mini-pixel-icons/" class="d">Mini Pixel Icons</a> - <span class="l">http://www.ndesign-studio.com/resources/mini-pixel-icons/</span><br /><span class="n">Oh, plein d'icones, génial. Trouvé via les liens de sebsauvage (http://del.icio.us/sebsauvage/ ) (Tags: images)</span><br /><br />
+<a href="http://openweb.eu.org/articles/zoom_image/" class="d">Openweb.eu.org - Zoom d'images avec les CSS</a> - <span class="l">http://openweb.eu.org/articles/zoom_image/</span><br /><span class="n">Modifier une image au survol par la souris (Tags: css webmaster)</span><br /><br />
+<a href="http://www.codes-sources.com/" class="d">CodeS-SourceS.com</a> - <span class="l">http://www.codes-sources.com/</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.branchez-vous.com/actu/06-09/10-295504.html" class="d">Torpark : un Firefox anonyme et gratuit</a> - <span class="l">http://www.branchez-vous.com/actu/06-09/10-295504.html</span><br /><span class="n">voir également http://internetauxpetitsoignons.50webs.com/ et http://matrix.samizdat.net/crypto/AnonApps/#firefox (Tags: browser)</span><br /><br />
+<a href="http://openweb.eu.org/articles/cascade_css/" class="d">Openweb.eu.org - Cascade CSS et **priorité des sélecteurs**</a> - <span class="l">http://openweb.eu.org/articles/cascade_css/</span><br /><span class="n">quelles règles CSS les navigateurs suivent-ils en premier ? (Tags: webmaster CSS)</span><br /><br />
+<a href="http://openweb.eu.org/articles/validation_formulaire/" class="d">Openweb.eu.org - Bien valider ses formulaires avec Javascript</a> - <span class="l">http://openweb.eu.org/articles/validation_formulaire/</span><br /><span class="n"> (Tags: webmaster accessibilite)</span><br /><br />
+<a href="http://openweb.eu.org/articles/css_impression/" class="d">Openweb.eu.org - Une feuille de style pour l'impression</a> - <span class="l">http://openweb.eu.org/articles/css_impression/</span><br /><span class="n">Attention : l'attribut "title" d'une balise link pour insérer un CSS doit prendre une valeur selon le media utilisé, par exemple "Ecran" ou "Impression", et non "Design par defaut du site" par exemple. (Tags: css webmaster)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/1429/" class="d">IE View Lite</a> - <span class="l">https://addons.mozilla.org/firefox/1429/</span><br /><span class="n">Cette extension permet d'ouvrir une page dans IE. Il existe une extension similaire qui utilise opera. (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://www.siteduzero.com/tuto-3-8314-1-css-les-compteurs.html#ss_part_1" class="d">[CSS] Les compteurs - Le Site du Zéro</a> - <span class="l">http://www.siteduzero.com/tuto-3-8314-1-css-les-compteurs.html#ss_part_1</span><br /><span class="n">Une facon pratique de numéroter ses titres pour faire des chapitres. Mais bon, comme d'habitude, ne fonctionne pas sous IE.... (Tags: css)</span><br /><br />
+<a href="http://svmblogs.vnunet.fr/svm/2006/09/windows_vista_c.html" class="d">SVM: Windows Vista crée des emplois</a> - <span class="l">http://svmblogs.vnunet.fr/svm/2006/09/windows_vista_c.html</span><br /><span class="n">Sisi, c'est vrai ! Et il ne faut pas prendre Linux hein, ca coute de l'argent a Microsft. Une analyse détaillée : http://nauges.typepad.com/my_weblog/2006/09/windows_vista_l.html (Tags: fun)</span><br /><br />
+<a href="http://extensions.geckozone.org/DragDeGo/" class="d">DragDeGo - Geckozone - Extensions pour Firefox</a> - <span class="l">http://extensions.geckozone.org/DragDeGo/</span><br /><span class="n">cette extension a l'air très pratique (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://web-sniffer.net/" class="d">View HTTP Request and Response Header</a> - <span class="l">http://web-sniffer.net/</span><br /><span class="n"> (Tags: webmaster)</span><br /><br />
+<a href="http://css.alsacreations.com/Tutoriels-PHP/style-switcher-php" class="d">Faire un Style switcher (changement d'habillage) en PHP - Alsacréations</a> - <span class="l">http://css.alsacreations.com/Tutoriels-PHP/style-switcher-php</span><br /><span class="n"> (Tags: webmaster)</span><br /><br />
+<a href="http://forum.alsacreations.com/faq/#item56" class="d">Comment faire un arrière-plan étirable ? - Alsacreations</a> - <span class="l">http://forum.alsacreations.com/faq/#item56</span><br /><span class="n">faire une image d'arrière plan qui s'agranda it ou se rétrécit avec le texte. (Tags: webmaster css)</span><br /><br />
+<a href="http://perso.orange.fr/coin.des.experts/" class="d">Le Coin des Experts</a> - <span class="l">http://perso.orange.fr/coin.des.experts/</span><br /><span class="n">quelques trucs utiles ? (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.michaelbach.de/ot/index.html" class="d">Optical Illusions and Visual Phenomena</a> - <span class="l">http://www.michaelbach.de/ot/index.html</span><br /><span class="n">oh, un site sur les illutsion d'optique.... (Tags: fun)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/938" class="d">Dr.Web anti-virus link checker :: Mozilla Add-ons</a> - <span class="l">https://addons.mozilla.org/firefox/938</span><br /><span class="n">cete extension pour firefox permet de vérifier si un fichier ne comporte pas de virus avant de le télécharger (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://ptaff.ca/xhtml/#css" class="d">XHTML:: Comment réussir</a> - <span class="l">http://ptaff.ca/xhtml/#css</span><br /><span class="n">un article interessant (Tags: webmaster xhtml)</span><br /><br />
+<a href="http://www.openweb.eu.org/articles/caracteres_illegaux/" class="d">Codage valide des caractères Windows illégaux en HTML et XHTML</a> - <span class="l">http://www.openweb.eu.org/articles/caracteres_illegaux/</span><br /><span class="n">une autre liste de caractères spéciaux (Tags: caractere speciaux)</span><br /><br />
+<a href="http://christ.bouthier.free.fr/index.html" class="d">Christophe Bouthier</a> - <span class="l">http://christ.bouthier.free.fr/index.html</span><br /><span class="n">un site qui a l'air interessant (Tags: site)</span><br /><br />
+<a href="http://forum.alsacreations.com/posting.php?action=newp&tid=5547&fid=20&p=1&q=48507" class="d">Donner le bon type MIME - Alsacréations</a> - <span class="l">http://forum.alsacreations.com/posting.php?action=newp&tid=5547&fid=20&p=1&q=48507</span><br /><span class="n">Serait-ce enfin la solution pour envoyer le bon type MIME selon le navigateur ? On dirait. Mais il faut activer le module url rewriting. (grrrr). Petit rappel : IE ne gère pas correctement la version 1.1 de http ni le type application/xhtml+xml (remarq (Tags: webmaster)</span><br /><br />
+<a href="http://www.validome.org/lang/fr/html/sidebar/" class="d">Barre latérale - Validateur HTML / XHTML / XML / WML</a> - <span class="l">http://www.validome.org/lang/fr/html/sidebar/</span><br /><span class="n">un plug-in pour IE qui permet de valider des sites WEB. En plus, le validateur a l'air très performant. (Tags: webmaster valid)</span><br /><br />
+<a href="http://wikipython.flibuste.net/" class="d">FrontPage - Wiki Python Fr</a> - <span class="l">http://wikipython.flibuste.net/</span><br /><span class="n">un site sur Python (Tags: programming)</span><br /><br />
+<a href="http://florian54.over-blog.net/" class="d">le blog florian54 par: Florian</a> - <span class="l">http://florian54.over-blog.net/</span><br /><span class="n">un blog interessant (Tags: blog fun)</span><br /><br />
+<a href="http://www.googoo.fr/lecteur_universel/" class="d">Lecteur de Fichiers Universel Online</a> - <span class="l">http://www.googoo.fr/lecteur_universel/</span><br /><span class="n">a tester (Tags: webmaster)</span><br /><br />
+<a href="http://www.w3.org/TR/html4/types.html" class="d">Basic HTML data types</a> - <span class="l">http://www.w3.org/TR/html4/types.html</span><br /><span class="n">les differents types de soctypes, de medias, de balises link/meta, etc.... très utile et complet (Tags: webmaster)</span><br /><br />
+<a href="http://download.zonelabs.com/bin/free/fr/zaAFR1079.html" class="d">Nouvelle version de ZA</a> - <span class="l">http://download.zonelabs.com/bin/free/fr/zaAFR1079.html</span><br /><span class="n">Une nouvelle version de Zone Alarm est disponible. Mais vu ce qui s'est passé avec la précédente version, je vous coseille d'attendre avant de la télécharger. (Tags: logiciels securite)</span><br /><br />
+<a href="http://t2net.fr/outils/edit2web/index.html" class="d">edit2web</a> - <span class="l">http://t2net.fr/outils/edit2web/index.html</span><br /><span class="n">cette extension permet d'éditer le code d'une page, pour enlever les publicités par exemple (Tags: firefox firefox_extension)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/2703/" class="d">Snapper</a> - <span class="l">https://addons.mozilla.org/firefox/2703/</span><br /><span class="n">encore un extension qui permet cette fois de faire des captures d'écran (Tags: firefox firefox_extension)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/2109/" class="d">Firefox Extension Backup</a> - <span class="l">https://addons.mozilla.org/firefox/2109/</span><br /><span class="n">Cette extension permet de sauvegarder vos mots de passe, historique, marque pages.... etc. Ressemble un peu a MozBackup (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://extensions.geckozone.org/vrs/" class="d">View-source-chart</a> - <span class="l">http://extensions.geckozone.org/vrs/</span><br /><span class="n">Cette extension pour Firefox permet de voir la source d'une page (Tags: firefox firefox_extension)</span><br /><br />
+<a href="http://tagsoup.com/-dev/null-/css/fixed/" class="d">Fixed Positioning for Windows Internet Explorer</a> - <span class="l">http://tagsoup.com/-dev/null-/css/fixed/</span><br /><span class="n">Encore une astce qui permet de contourner les bugs CSs d'IE (Tags: webmaster css)</span><br /><br />
+<a href="http://gcyrillus.free.fr/trucs_css/" class="d">Astuces</a> - <span class="l">http://gcyrillus.free.fr/trucs_css/</span><br /><span class="n">encore des astuces (Tags: webmaster)</span><br /><br />
+<a href="http://www.siteduzero.com/forum-83-6123-53117.html#r53117" class="d">Astuces xhtml/css</a> - <span class="l">http://www.siteduzero.com/forum-83-6123-53117.html#r53117</span><br /><span class="n">pratique (Tags: webmaster)</span><br /><br />
+<a href="http://www.commentcamarche.net/faq/sujet-893-messagerie-adresses-serveurs-pop-et-smtp-des-fai" class="d">[Messagerie] Adresses serveurs POP ET SMTP des FAI</a> - <span class="l">http://www.commentcamarche.net/faq/sujet-893-messagerie-adresses-serveurs-pop-et-smtp-des-fai</span><br /><span class="n"> (Tags: messagerie)</span><br /><br />
+<a href="http://fr.creativecommons.org/contrats.htm" class="d">Creative Commons France - les 6 contrats</a> - <span class="l">http://fr.creativecommons.org/contrats.htm</span><br /><span class="n"> (Tags: system:unfiled)</span><br /><br />
+<a href="http://www.w3.org/QA/Tips/" class="d">W3C QA - Quality Tips for Webmasters</a> - <span class="l">http://www.w3.org/QA/Tips/</span><br /><span class="n">des recommandations sur ce qu'il ne faut pas faire sur un site (Tags: webmaster)</span><br /><br />
+<a href="http://www.useit.com/alertbox/9605.html" class="d">Top Ten Mistakes in Web Design (Jakob Nielsen's Alertbox)</a> - <span class="l">http://www.useit.com/alertbox/9605.html</span><br /><span class="n">les 10 choses les plus exsapérantes sur un site. (Tags: fun site)</span><br /><br />
+<a href="http://osswin.sourceforge.net/" class="d">The OSSwin project: Open Source for Windows!</a> - <span class="l">http://osswin.sourceforge.net/</span><br /><span class="n">Une liste de projets libres pour Windows (Tags: freeware gratuit windows)</span><br /><br />
+<a href="http://labs.google.com/" class="d">Google Labs</a> - <span class="l">http://labs.google.com/</span><br /><span class="n">des moteurs de recherches spécifiques de Google (Tags: web)</span><br /><br />
+<a href="http://labs.google.com/accessible/" class="d">Google Accessible Search</a> - <span class="l">http://labs.google.com/accessible/</span><br /><span class="n">Une version de google qui affiche en premier les sites les plus accessibles. (Tags: web webmaster site)</span><br /><br />
+<a href="http://cyberzoide.developpez.com/html/navigateurs/" class="d">Comparatif des navigateurs web - Club d'entraide des développeurs francophones</a> - <span class="l">http://cyberzoide.developpez.com/html/navigateurs/</span><br /><span class="n">Une liste très complète de navigateurs (d'ailleurs, regardez le classement.... Firefox est premier partout :) (Tags: browser web)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-236418-nous-les-informaticiens" class="d">Nous les informaticiens</a> - <span class="l">http://www.commentcamarche.net/forum/affich-236418-nous-les-informaticiens</span><br /><span class="n">.... (Tags: fun)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-2139295-ware" class="d">-ware</a> - <span class="l">http://www.commentcamarche.net/forum/affich-2139295-ware</span><br /><span class="n">Marrant (Tags: fun)</span><br /><br />
+<a href="http://jojaba.free.fr/traductions.htm" class="d">Traduction d'extensions pour les logiciels Mozilla</a> - <span class="l">http://jojaba.free.fr/traductions.htm</span><br /><span class="n">un site qui a l'air interessant. (Tags: extensions)</span><br /><br />
+<a href="http://danzcontrib2.free.fr/statistiques.php" class="d">Statistiques Navigateurs, détecter le navigateur avec PHP</a> - <span class="l">http://danzcontrib2.free.fr/statistiques.php</span><br /><span class="n"> (Tags: php webmaster site)</span><br /><br />
+<a href="http://friendlybit.com/html/encyclopedia-of-html-elements/" class="d">Encyclopedia of HTML elements - Friendly Bit</a> - <span class="l">http://friendlybit.com/html/encyclopedia-of-html-elements/</span><br /><span class="n">Une liste des balises html (encore) (Tags: xhtml webmaster site)</span><br /><br />
+<a href="http://www.amaryllidaceae.org/web-jardin/CSS/moz-border-radius.htm" class="d">-moz-border-radius : coins ronds avec Gecko</a> - <span class="l">http://www.amaryllidaceae.org/web-jardin/CSS/moz-border-radius.htm</span><br /><span class="n">Des exemples concrets sur l'utilisation des propriétés CSS 3 (Tags: css webmaster)</span><br /><br />
+<a href="http://xulfr.org/wiki/Reference/Css" class="d">wiki XULfr - Reference/Css</a> - <span class="l">http://xulfr.org/wiki/Reference/Css</span><br /><span class="n">Les propriétés CSS 3 (supportés par Firefox et autres navigateurs utilisant le moteur de rendu Gecko) qui s'appliquent aux bordures. (Tags: css webmaster)</span><br /><br />
+<a href="http://www.framasoft.net/article2077.html" class="d">AMSN - IRC / Chat - Logiciels Libres - Framasoft</a> - <span class="l">http://www.framasoft.net/article2077.html</span><br /><span class="n">aMSN remplace aisément MSN messenger. (Tags: chat messagerie)</span><br /><br />
+<a href="http://entraide.aceboard.fr/" class="d">Forum Entraide des Helpers</a> - <span class="l">http://entraide.aceboard.fr/</span><br /><span class="n">Un forum qui pourra vous rendre service si vous avez un problème de malware (Tags: securite)</span><br /><br />
+<a href="http://www.htmlhelp.com/" class="d">HTML Help by The Web Design Group</a> - <span class="l">http://www.htmlhelp.com/</span><br /><span class="n">un site qui a l'air interessant et utile (Tags: webmaster site)</span><br /><br />
+<a href="http://www.faqs.org/rfcs/rfc2822" class="d">RFC 2822 (rfc2822) - Internet Message Format</a> - <span class="l">http://www.faqs.org/rfcs/rfc2822</span><br /><span class="n"> (Tags: mail)</span><br /><br />
+<a href="http://cestadire.ch/" class="d">solutions libres pour les Webmasters</a> - <span class="l">http://cestadire.ch/</span><br /><span class="n">un site qui a l'air interessant (Tags: web)</span><br /><br />
+<a href="http://www.tableless.com.br/" class="d">Tableless - Web Standards com arroz e feijão.</a> - <span class="l">http://www.tableless.com.br/</span><br /><span class="n">Un site avec pas mal de tutoriels sur l'accessibilité, et les technologies du WEB 2.0 (Ajax par exemple) et autres. Bon d'accord c'est en espagnol ou italien (j'ai l'impression), mais bon... (Tags: fun webmaster site)</span><br /><br />
+<a href="http://www.validome.org/" class="d">Validateur HTML / XHTML / XML / WML</a> - <span class="l">http://www.validome.org/</span><br /><span class="n">Encore un validateur (Tags: w3c standards xhtml)</span><br /><br />
+<a href="http://validateur.ca/" class="d">Validateur W3C Multipages pour une validation de site XHTML</a> - <span class="l">http://validateur.ca/</span><br /><span class="n">Ce validateur vous permet de valider l'ensemble des pages d'un site en une seule fois. un énorme gain de temps. (Tags: valid w3c xhtml)</span><br /><br />
+<a href="http://www.technicland.com/fixvirus.php3" class="d">Détecteur de politesse</a> - <span class="l">http://www.technicland.com/fixvirus.php3</span><br /><span class="n">... (Tags: fun)</span><br /><br />
+<a href="http://mouserunner.com/Mozilla_and_Firefox_Games.html" class="d">Mozilla and Firefox Games</a> - <span class="l">http://mouserunner.com/Mozilla_and_Firefox_Games.html</span><br /><span class="n"> (Tags: firefox fun games)</span><br /><br />
+<a href="http://www.headbands.com/gspot/" class="d">GSpot Codec Information Appliance</a> - <span class="l">http://www.headbands.com/gspot/</span><br /><span class="n">un logiciel qui indique le codec dont on a besoin pour lire un fichier. (Tags: codec)</span><br /><br />
+<a href="http://www.gmer.net/" class="d">GMER</a> - <span class="l">http://www.gmer.net/</span><br /><span class="n">Un détecteur de rootkits pour windows (il existe aussi un logiciel de la société sysinternals (RootkitRevealer) et un logiciel de la société fsecure (blacklight)) (Tags: anti-rootkit)</span><br /><br />
+<a href="http://www.commentcamarche.net/faq/sujet-3045-tutoriels-tutoriels-de-logiciels" class="d">[Tutoriels] Tutoriels de logiciels - La solution</a> - <span class="l">http://www.commentcamarche.net/faq/sujet-3045-tutoriels-tutoriels-de-logiciels</span><br /><span class="n"> (Tags: tutoriel windows logiciels)</span><br /><br />
+<a href="http://www.anybrowser.com/siteviewer.html" class="d">AnyBrowser.COM</a> - <span class="l">http://www.anybrowser.com/siteviewer.html</span><br /><span class="n">Pratique, ce site permet de voir a quoi ressemble votre site si on desactive javascript et certains des CSS. (Tags: accessibilite)</span><br /><br />
+<a href="http://bluestorm.info/ZAP/" class="d">ZAP</a> - <span class="l">http://bluestorm.info/ZAP/</span><br /><span class="n">ZAP signifie zCode A Plusieurs. Le zCode est un langage dévellopé par le site du zero. Le ZAP est donc un wiki, vous pouvez y participer. (Tags: wiki)</span><br /><br />
+<a href="http://www.vulgarisation-informatique.com/optimiser-php.php" class="d">Optimiser un script php</a> - <span class="l">http://www.vulgarisation-informatique.com/optimiser-php.php</span><br /><span class="n">voir aussi: http://www.phpdebutant.org/article147.php http://www.blueshoes.org/en/developer/php_bench/ http://www.siteduzero.com/tuto-3-1600-1-optimiser-un-script-php.html (Tags: php)</span><br /><br />
+<a href="http://www.aliasdmc.fr/" class="d">Liste des balises html</a> - <span class="l">http://www.aliasdmc.fr/</span><br /><span class="n">et leurs équivalent en CSS et javascript. (Tags: css xhtml)</span><br /><br />
+<a href="http://www.salemioche.net/" class="d">créer un site web ?</a> - <span class="l">http://www.salemioche.net/</span><br /><span class="n">je n'avais encore jamais vu ce site, ou il y a plusieurs tutoriaux sur les langages du web. (Tags: site webmaster)</span><br /><br />
+<a href="http://www.yazerty.net/category/Soft-spirit" class="d">Ce que votre browser internet revele de vous</a> - <span class="l">http://www.yazerty.net/category/Soft-spirit</span><br /><span class="n">Marrant. (Tags: fun)</span><br /><br />
+<a href="http://dominique.guebey.club.fr/tekno/lynx/lynx_com.htm" class="d">Navigateur Lynx, codes usuels</a> - <span class="l">http://dominique.guebey.club.fr/tekno/lynx/lynx_com.htm</span><br /><span class="n">Les touches utilisées pour naviguer dans Lynx (Tags: lynx browser)</span><br /><br />
+<a href="http://lynx.isc.org/" class="d">Lynx, un navigateur en mode texte</a> - <span class="l">http://lynx.isc.org/</span><br /><span class="n">Pour des liens ou tester son site avec Lynx, voir : http://forum.alsacreations.com/topic-6-11061-1.html (Tags: lynx browser)</span><br /><br />
+<a href="http://www.freeantispam.org/" class="d">Free Anti Spam and Spyware Programs</a> - <span class="l">http://www.freeantispam.org/</span><br /><span class="n">Un site qui distribue des antispams et antispywares gratuits. (Tags: antispam antispyware gratuit)</span><br /><br />
+<a href="http://www.browserfirefox.com/" class="d">Your Firefox browser guide. Download it now!</a> - <span class="l">http://www.browserfirefox.com/</span><br /><span class="n">un autre site sur Firefox qui a l'air interessant. Je ne connaissais pas. (Tags: firefox)</span><br /><br />
+<a href="http://www.htmlhelp.com/reference/html40/entities/latin1.html" class="d">HTML 4.0 Latin-1 Entities</a> - <span class="l">http://www.htmlhelp.com/reference/html40/entities/latin1.html</span><br /><span class="n">Idem, mais avec plus de combinaisons que alt (Tags: caractere speciaux)</span><br /><br />
+<a href="http://www.starr.net/is/type/altnum-fr.html" class="d">Combinaisons De Nombre + Alt</a> - <span class="l">http://www.starr.net/is/type/altnum-fr.html</span><br /><span class="n">Cette page montre les caractères spéciaux que l'on peut écrire avec la touche [Alt] et une combinaison de chiffres (0356 par exemple). (Tags: caractere speciaux)</span><br /><br />
+<a href="http://www.generation-nt.com/processus/" class="d">Processus Windows</a> - <span class="l">http://www.generation-nt.com/processus/</span><br /><span class="n">Une liste de plein de processus Windows. (Tags: processus windows)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-1312312-firefox-recherche-integre" class="d">Ajouter un moteur de recherche a Firefox</a> - <span class="l">http://www.commentcamarche.net/forum/affich-1312312-firefox-recherche-integre</span><br /><span class="n">Une manière très simple d'ajouter son propre moteur de recherche a firefox. très patique. (Tags: firefox firefox_add-on)</span><br /><br />
+<a href="http://www.concisefreeware.com/" class="d">Concise Freeware</a> - <span class="l">http://www.concisefreeware.com/</span><br /><span class="n">Un site de freeware (logiciel gratuit) très complet (Tags: freeware logiciels gratuit)</span><br /><br />
+<a href="http://www.commentcamarche.net/forum/affich-2256094-wga-supprimer-windows-genuine-advantage" class="d">Désactiver le mouchard WGA</a> - <span class="l">http://www.commentcamarche.net/forum/affich-2256094-wga-supprimer-windows-genuine-advantage</span><br /><span class="n">Ce topic donne divers liens pour expliquer comment désactiver et desinstaller le progrmmae wga, un mouchard (?) de windows. (Tags: wga windows spyware)</span><br /><br />
+<a href="http://www.washington.edu/pine/" class="d">Pine Information Center</a> - <span class="l">http://www.washington.edu/pine/</span><br /><span class="n">Pine, un logiciel de messagerie en mode texte. (Tags: mail)</span><br /><br />
+<a href="http://www.freeantispam.org/gratuit/email-html.php" class="d">N'envoyez pas vos mails en html</a> - <span class="l">http://www.freeantispam.org/gratuit/email-html.php</span><br /><span class="n">Plusieurs bonnes raisons de ne pas envoyre ses e mails en html. préferez le format texte. (Tags: mail)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/436/" class="d">SessionSaver .2 :: Mozilla Add-ons</a> - <span class="l">https://addons.mozilla.org/firefox/436/</span><br /><span class="n">Une extension pour firefox qui permet de sauvegarder sa session. je vais l'essayer (Tags: firefox firefox_add-on)</span><br /><br />
+<a href="http://www.blackboxsearch.com/" class="d">BLACK BOX SEARCH... no IP, no tracking cookies, no logging - EVER!</a> - <span class="l">http://www.blackboxsearch.com/</span><br /><span class="n">Permet d'utiliser un proxy pour éviter que les moteurs de recherche n'enregistrent vos recherches (trouvé sur les liens de sebsauvage) (Tags: internet privacy tools)</span><br /><br />
+<a href="http://xhtml.css.free.fr/" class="d">XHTML CSS</a> - <span class="l">http://xhtml.css.free.fr/</span><br /><span class="n">Un site qui a l'air interessant (Tags: xhtml css site webmaster)</span><br /><br />
+<a href="http://spins.us/tools/l33t.asp" class="d">Transformer du texte.</a> - <span class="l">http://spins.us/tools/l33t.asp</span><br /><span class="n">Avec ca, vous pouvez transformer votre text en "mode geek" (Tags: geek)</span><br /><br />
+<a href="http://www.startyourdev.com/" class="d">Plusieurs tutoriels sur les langages du web.</a> - <span class="l">http://www.startyourdev.com/</span><br /><span class="n"> (Tags: tutoriel webmaster)</span><br /><br />
+<a href="http://www.visibone.com/font/FontResults.html" class="d">Polices de caractère</a> - <span class="l">http://www.visibone.com/font/FontResults.html</span><br /><span class="n">une liste de polices de caractères. (Tags: police font caractere)</span><br /><br />
+<a href="http://www.siteduzero.com/tuto-3-6192-1-la-base-d-039-un-site-php.html" class="d">Une seule page pour le site.</a> - <span class="l">http://www.siteduzero.com/tuto-3-6192-1-la-base-d-039-un-site-php.html</span><br /><span class="n">Comment faire une seule page source en PHP, valide html, avec un titre qui change, bref, comme il faut. Très utile. (Tags: php webmaster)</span><br /><br />
+<a href="http://centricle.com/ref/css/filters/" class="d">centricle : css filters (css hacks)</a> - <span class="l">http://centricle.com/ref/css/filters/</span><br /><span class="n">un schéma qui mon tre plein de facons de cacher une propriété CSS a un ou des navigateurs. très complet. (Tags: css webmaster)</span><br /><br />
+<a href="http://loliwin.org/contenu.php" class="d">Logiciels Libres pour Windows</a> - <span class="l">http://loliwin.org/contenu.php</span><br /><span class="n"> (Tags: logiciels open-source)</span><br /><br />
+<a href="http://validateur-accessibilite.apinc.org/mode_emploi_validateur.htm" class="d">Validateur d'accessibilité</a> - <span class="l">http://validateur-accessibilite.apinc.org/mode_emploi_validateur.htm</span><br /><span class="n">Pour vérifier si votre site est accessible et si la sémantique est bonne. (Tags: accessibilite)</span><br /><br />
+<a href="https://addons.mozilla.org/firefox/1532/" class="d">Extension foxylicious pour firefox</a> - <span class="l">https://addons.mozilla.org/firefox/1532/</span><br /><span class="n"> (Tags: firefox firefox_add-on del.icio.us)</span><br /><br />
+<a href="http://www.readwriteweb.com/archives/top_10_firefox_addons.php" class="d">Top 10 Firefox Web 2.0 Add-ons</a> - <span class="l">http://www.readwriteweb.com/archives/top_10_firefox_addons.php</span><br /><span class="n">Un classement des 10 meilleurs extensions pour firefox. (dont del.icio.us). (Tags: firefox_add-on)</span><br /><br />
+<a href="http://www.w3.org/QA/Tips/use-links" class="d">Use links in your document - Quality Web Tips</a> - <span class="l">http://www.w3.org/QA/Tips/use-links</span><br /><span class="n">Les recommandations du w3c : utiliser les éléments link. utile, a voir. (Tags: w3c standards xhtml)</span><br /><br />
+<a href="http://membres.lycos.fr/cestquoiwindows/" class="d">C'est quoi windows - Mon premier essai de ce système d'exploitation</a> - <span class="l">http://membres.lycos.fr/cestquoiwindows/</span><br /><span class="n">Un linuxien qui a essayé Windows. C'est assez parlant. (Tags: Windows Linux)</span><br /><br />
+<a href="https://www.youos.com/" class="d">Welcome to YouOS.</a> - <span class="l">https://www.youos.com/</span><br /><span class="n">Un système d'exploitation directement dans le navigateur (Tags: os youos)</span><br /><br />
+<a href="http://www.siteduzero.com/tuto-3-7340-1-colorer-son-code.html" class="d">GeSHI - colorer son code</a> - <span class="l">http://www.siteduzero.com/tuto-3-7340-1-colorer-son-code.html</span><br /><span class="n">pratique pour colorer du code sans utiliser span class... (Tags: webmaster)</span><br /><br />
+<a href="http://mozilla.tlk.fr/splash.php" class="d">Plein d'images mozilla</a> - <span class="l">http://mozilla.tlk.fr/splash.php</span><br /><span class="n"> (Tags: images mozilla)</span><br /><br />
+<a href="http://www.generation-nt.com/actualites/17335/mozilla-thunderbird-alpha-client-messagerie/" class="d">Mozilla Thunderbird 2.0 en alpha est de sortie</a> - <span class="l">http://www.generation-nt.com/actualites/17335/mozilla-thunderbird-alpha-client-messagerie/</span><br /><span class="n"> (Tags: mail thunderbird)</span><br /><br />
+<a href="http://www.html-kit.com/favicon/" class="d">FavIcon from Pics -- favicon.ico for your website</a> - <span class="l">http://www.html-kit.com/favicon/</span><br /><span class="n">faire une favicon a partir d'une image avec du texte défilant (Tags: web icon)</span><br /><br />
+<a href="http://www.xhtml.net/xhtmlcss/favicon" class="d">Icônes de pages web, la favicon.ico - XHTML.net</a> - <span class="l">http://www.xhtml.net/xhtmlcss/favicon</span><br /><span class="n">ce qu'est une favicon, comment en faire une pour son site et autres (Tags: web site icon webmaster)</span><br /><br />
+</p>
+<hr class="fb" />
+<p class="note">Cette page à été créée avec un programme de
+ <a href="http://www.sebsauvage.net/">Sébastien Sauvage</a>, que j'ai modifié.<br />
+ Plus d'informations : <a href="/delxml/">instructions</a>
+</p>
+<?php require'../autres/source-bas.php'?>
blob - /dev/null
blob + d8a95f67c5d7c3bd01479be67f50e3e239022872 (mode 644)
--- /dev/null
+++ pages/menu.php
+<?php
+$titre='Menu';
+$SQL['TypePage']=2;
+require'../autres/source-haut.php';
+require'../autres/source-bas.php'?>
blob - /dev/null
blob + 4bf05a52365e10fe5a404ae641d3daaafa4505f2 (mode 644)
--- /dev/null
+++ pclzip.lib.php
+<?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.8.2
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - August 2009
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+// PclZip is a PHP library that manage ZIP archives.
+// So far tests show that archives generated by PclZip are readable by
+// WinZip application and other tools.
+//
+// Description :
+// See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+// This library and the associated files are non commercial, non professional
+// work.
+// It should not have unexpected results. However if any damage is caused by
+// this software the author can not be responsible.
+// The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id: pclzip.lib.php,v 1.60 2009/09/30 21:01:04 vblavet Exp $
+// --------------------------------------------------------------------------------
+
+ // ----- Constants
+ if (!defined('PCLZIP_READ_BLOCK_SIZE')) {
+ define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
+ }
+
+ // ----- File list separator
+ // In version 1.x of PclZip, the separator for file list is a space
+ // (which is not a very smart choice, specifically for windows paths !).
+ // A better separator should be a comma (,). This constant gives you the
+ // abilty to change that.
+ // However notice that changing this value, may have impact on existing
+ // scripts, using space separated filenames.
+ // Recommanded values for compatibility with older versions :
+ //define( 'PCLZIP_SEPARATOR', ' ' );
+ // Recommanded values for smart separation of filenames.
+ if (!defined('PCLZIP_SEPARATOR')) {
+ define( 'PCLZIP_SEPARATOR', ',' );
+ }
+
+ // ----- Error configuration
+ // 0 : PclZip Class integrated error handling
+ // 1 : PclError external library error handling. By enabling this
+ // you must ensure that you have included PclError library.
+ // [2,...] : reserved for futur use
+ if (!defined('PCLZIP_ERROR_EXTERNAL')) {
+ define( 'PCLZIP_ERROR_EXTERNAL', 0 );
+ }
+
+ // ----- Optional static temporary directory
+ // By default temporary files are generated in the script current
+ // path.
+ // If defined :
+ // - MUST BE terminated by a '/'.
+ // - MUST be a valid, already created directory
+ // Samples :
+ // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
+ // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
+ if (!defined('PCLZIP_TEMPORARY_DIR')) {
+ define( 'PCLZIP_TEMPORARY_DIR', '' );
+ }
+
+ // ----- Optional threshold ratio for use of temporary files
+ // Pclzip sense the size of the file to add/extract and decide to
+ // use or not temporary file. The algorythm is looking for
+ // memory_limit of PHP and apply a ratio.
+ // threshold = memory_limit * ratio.
+ // Recommended values are under 0.5. Default 0.47.
+ // Samples :
+ // define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.5 );
+ if (!defined('PCLZIP_TEMPORARY_FILE_RATIO')) {
+ define( 'PCLZIP_TEMPORARY_FILE_RATIO', 0.47 );
+ }
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+ // ----- Global variables
+ $g_pclzip_version = "2.8.2";
+
+ // ----- Error codes
+ // -1 : Unable to open file in binary write mode
+ // -2 : Unable to open file in binary read mode
+ // -3 : Invalid parameters
+ // -4 : File does not exist
+ // -5 : Filename is too long (max. 255)
+ // -6 : Not a valid zip file
+ // -7 : Invalid extracted file size
+ // -8 : Unable to create directory
+ // -9 : Invalid archive extension
+ // -10 : Invalid archive format
+ // -11 : Unable to delete file (unlink)
+ // -12 : Unable to rename file (rename)
+ // -13 : Invalid header checksum
+ // -14 : Invalid archive size
+ define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+ define( 'PCLZIP_ERR_NO_ERROR', 0 );
+ define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+ define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+ define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+ define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+ define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+ define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+ define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+ define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+ define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+ define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+ define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+ define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+ define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+ define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+ define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+ define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+ define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+ define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+ define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+
+ // ----- Options values
+ define( 'PCLZIP_OPT_PATH', 77001 );
+ define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+ define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+ define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+ define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+ define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+ define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+ define( 'PCLZIP_OPT_BY_NAME', 77008 );
+ define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+ define( 'PCLZIP_OPT_BY_EREG', 77010 );
+ define( 'PCLZIP_OPT_BY_PREG', 77011 );
+ define( 'PCLZIP_OPT_COMMENT', 77012 );
+ define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+ define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+ define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+ define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+ define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+ // Having big trouble with crypt. Need to multiply 2 long int
+ // which is not correctly supported by PHP ...
+ //define( 'PCLZIP_OPT_CRYPT', 77018 );
+ define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+ define( 'PCLZIP_OPT_TEMP_FILE_THRESHOLD', 77020 );
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_THRESHOLD', 77020 ); // alias
+ define( 'PCLZIP_OPT_TEMP_FILE_ON', 77021 );
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_ON', 77021 ); // alias
+ define( 'PCLZIP_OPT_TEMP_FILE_OFF', 77022 );
+ define( 'PCLZIP_OPT_ADD_TEMP_FILE_OFF', 77022 ); // alias
+
+ // ----- File description attributes
+ define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+ define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+ define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+ define( 'PCLZIP_ATT_FILE_MTIME', 79004 );
+ define( 'PCLZIP_ATT_FILE_CONTENT', 79005 );
+ define( 'PCLZIP_ATT_FILE_COMMENT', 79006 );
+
+ // ----- Call backs values
+ define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+ define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+ define( 'PCLZIP_CB_PRE_ADD', 78003 );
+ define( 'PCLZIP_CB_POST_ADD', 78004 );
+ /* For futur use
+ define( 'PCLZIP_CB_PRE_LIST', 78005 );
+ define( 'PCLZIP_CB_POST_LIST', 78006 );
+ define( 'PCLZIP_CB_PRE_DELETE', 78007 );
+ define( 'PCLZIP_CB_POST_DELETE', 78008 );
+ */
+
+ // --------------------------------------------------------------------------------
+ // Class : PclZip
+ // Description :
+ // PclZip is the class that represent a Zip archive.
+ // The public methods allow the manipulation of the archive.
+ // Attributes :
+ // Attributes must not be accessed directly.
+ // Methods :
+ // PclZip() : Object creator
+ // create() : Creates the Zip archive
+ // listContent() : List the content of the Zip archive
+ // extract() : Extract the content of the archive
+ // properties() : List the properties of the archive
+ // --------------------------------------------------------------------------------
+ class PclZip
+ {
+ // ----- Filename of the zip file
+ var $zipname = '';
+
+ // ----- File descriptor of the zip file
+ var $zip_fd = 0;
+
+ // ----- Internal error handling
+ var $error_code = 1;
+ var $error_string = '';
+
+ // ----- Current status of the magic_quotes_runtime
+ // This value store the php configuration for magic_quotes
+ // The class can then disable the magic_quotes and reset it after
+ var $magic_quotes_status;
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZip()
+ // Description :
+ // Creates a PclZip object and set the name of the associated Zip archive
+ // filename.
+ // Note that no real action is taken, if the archive does not exist it is not
+ // created. Use create() for that.
+ // --------------------------------------------------------------------------------
+ function PclZip($p_zipname)
+ {
+
+ // ----- Tests the zlib
+ if (!function_exists('gzopen'))
+ {
+ die('Abort '.basename(__FILE__).' : Missing zlib extensions');
+ }
+
+ // ----- Set the attributes
+ $this->zipname = $p_zipname;
+ $this->zip_fd = 0;
+ $this->magic_quotes_status = -1;
+
+ // ----- Return
+ return;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // create($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // create($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two different synopsis. The first one is historical.
+ // This method creates a Zip Archive. The Zip file is created in the
+ // filesystem. The files and directories indicated in $p_filelist
+ // are added in the archive. See the parameters description for the
+ // supported format of $p_filelist.
+ // When a directory is in the list, the directory and its content is added
+ // in the archive.
+ // In this synopsis, the function takes an optional variable list of
+ // options. See bellow the supported options.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function create($p_filelist)
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove from the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional',
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Invalid number / type of arguments");
+ return 0;
+ }
+ }
+ }
+
+ // ----- Look for default option values
+ $this->privOptionDefaultThreshold($v_options);
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ if ($v_string != '') {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ else {
+ }
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_MTIME => 'optional'
+ ,PCLZIP_ATT_FILE_CONTENT => 'optional'
+ ,PCLZIP_ATT_FILE_COMMENT => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Return
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // add($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // add($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This methods add the list of files in an existing archive.
+ // If a file with the same name already exists, it is added at the end of the
+ // archive, the first one is still present.
+ // If the archive does not exist, it is created.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_OPT_ADD_COMMENT :
+ // PCLZIP_OPT_PREPEND_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function add($p_filelist)
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional',
+ PCLZIP_OPT_ADD_COMMENT => 'optional',
+ PCLZIP_OPT_PREPEND_COMMENT => 'optional',
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ return 0;
+ }
+ }
+ }
+
+ // ----- Look for default option values
+ $this->privOptionDefaultThreshold($v_options);
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_MTIME => 'optional'
+ ,PCLZIP_ATT_FILE_CONTENT => 'optional'
+ ,PCLZIP_ATT_FILE_COMMENT => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Return
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : listContent()
+ // Description :
+ // This public method, gives the list of the files and directories, with their
+ // properties.
+ // The properties of each entries in the list are (used also in other functions) :
+ // filename : Name of the file. For a create or add action it is the filename
+ // given by the user. For an extract function it is the filename
+ // of the extracted file.
+ // stored_filename : Name of the file / directory stored in the archive.
+ // size : Size of the stored file.
+ // compressed_size : Size of the file's data compressed in the archive
+ // (without the headers overhead)
+ // mtime : Last known modification date of the file (UNIX timestamp)
+ // comment : Comment associated with the file
+ // folder : true | false
+ // index : index of the file in the archive
+ // status : status of the action (depending of the action) :
+ // Values are :
+ // ok : OK !
+ // filtered : the file / dir is not extracted (filtered by user)
+ // already_a_directory : the file can not be extracted because a
+ // directory with the same name already exists
+ // write_protected : the file can not be extracted because a file
+ // with the same name already exists and is
+ // write protected
+ // newer_exist : the file was not extracted because a newer file exists
+ // path_creation_fail : the file is not extracted because the folder
+ // does not exist and can not be created
+ // write_error : the file was not extracted because there was a
+ // error while writing the file
+ // read_error : the file was not extracted because there was a error
+ // while reading the file
+ // invalid_header : the file was not extracted because of an archive
+ // format error (bad file header)
+ // Note that each time a method can continue operating when there
+ // is an action error on a file, the error is only logged in the file status.
+ // Return Values :
+ // 0 on an unrecoverable failure,
+ // The list of the files in the archive.
+ // --------------------------------------------------------------------------------
+ function listContent()
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ return(0);
+ }
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ if (($v_result = $this->privList($p_list)) != 1)
+ {
+ unset($p_list);
+ return(0);
+ }
+
+ // ----- Return
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extract($p_path="./", $p_remove_path="")
+ // extract([$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method extract all the files / directories from the archive to the
+ // folder indicated in $p_path.
+ // If you want to ignore the 'root' part of path of the memorized files
+ // you can indicate this in the optional $p_remove_path parameter.
+ // By default, if a newer file with the same name already exists, the
+ // file is not extracted.
+ //
+ // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+ // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+ // at the end of the path value of PCLZIP_OPT_PATH.
+ // Parameters :
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 or a negative value on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function extract()
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
+ ));
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ return 0;
+ }
+ }
+ }
+
+ // ----- Look for default option values
+ $this->privOptionDefaultThreshold($v_options);
+
+ // ----- Trace
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
+ $v_remove_all_path, $v_options);
+ if ($v_result < 1) {
+ unset($p_list);
+ return(0);
+ }
+
+ // ----- Return
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extractByIndex($p_index, $p_path="./", $p_remove_path="")
+ // extractByIndex($p_index, [$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method is doing a partial extract of the archive.
+ // The extracted files or folders are identified by their index in the
+ // archive (from 0 to n).
+ // Note that if the index identify a folder, only the folder entry is
+ // extracted, not all the files included in the archive.
+ // Parameters :
+ // $p_index : A single index (integer) or a string of indexes of files to
+ // extract. The form of the string is "0,4-6,8-12" with only numbers
+ // and '-' for range or ',' to separate ranges. No spaces or ';'
+ // are allowed.
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+ // not as files.
+ // The resulting content is in a new field 'content' in the file
+ // structure.
+ // This option must be used alone (any other options are ignored).
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ //function extractByIndex($p_index, options...)
+ function extractByIndex($p_index)
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
+ PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
+ PCLZIP_OPT_TEMP_FILE_ON => 'optional',
+ PCLZIP_OPT_TEMP_FILE_OFF => 'optional'
+ ));
+ if ($v_result != 1) {
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+ }
+ else {
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+
+ // ----- Trick
+ // Here I want to reuse extractByRule(), so I need to parse the $p_index
+ // with privParseOptions()
+ $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
+ $v_options_trick = array();
+ $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
+ array (PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ return 0;
+ }
+ $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
+
+ // ----- Look for default option values
+ $this->privOptionDefaultThreshold($v_options);
+
+ // ----- Call the extracting fct
+ if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
+ return(0);
+ }
+
+ // ----- Return
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // delete([$p_option, $p_option_value, ...])
+ // Description :
+ // This method removes files from the archive.
+ // If no parameters are given, then all the archive is emptied.
+ // Parameters :
+ // None or optional arguments.
+ // Options :
+ // PCLZIP_OPT_BY_INDEX :
+ // PCLZIP_OPT_BY_NAME :
+ // PCLZIP_OPT_BY_EREG :
+ // PCLZIP_OPT_BY_PREG :
+ // Return Values :
+ // 0 on failure,
+ // The list of the files which are still present in the archive.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function delete()
+ {
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ return 0;
+ }
+ }
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Call the delete fct
+ $v_list = array();
+ if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
+ $this->privSwapBackMagicQuotes();
+ unset($v_list);
+ return(0);
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : deleteByIndex()
+ // Description :
+ // ***** Deprecated *****
+ // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+ // --------------------------------------------------------------------------------
+ function deleteByIndex($p_index)
+ {
+
+ $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
+
+ // ----- Return
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : properties()
+ // Description :
+ // This method gives the properties of the archive.
+ // The properties are :
+ // nb : Number of files in the archive
+ // comment : Comment associated with the archive file
+ // status : not_exist, ok
+ // Parameters :
+ // None
+ // Return Values :
+ // 0 on failure,
+ // An array with the archive properties.
+ // --------------------------------------------------------------------------------
+ function properties()
+ {
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ $this->privSwapBackMagicQuotes();
+ return(0);
+ }
+
+ // ----- Default properties
+ $v_prop = array();
+ $v_prop['comment'] = '';
+ $v_prop['nb'] = 0;
+ $v_prop['status'] = 'not_exist';
+
+ // ----- Look if file exists
+ if (@is_file($this->zipname))
+ {
+ // ----- Open the zip file
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ return 0;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ return 0;
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Set the user attributes
+ $v_prop['comment'] = $v_central_dir['comment'];
+ $v_prop['nb'] = $v_central_dir['entries'];
+ $v_prop['status'] = 'ok';
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_prop;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : duplicate()
+ // Description :
+ // This method creates an archive by copying the content of an other one. If
+ // the archive already exist, it is replaced by the new one without any warning.
+ // Parameters :
+ // $p_archive : The filename of a valid archive, or
+ // a valid PclZip object.
+ // Return Values :
+ // 1 on success.
+ // 0 or a negative value on error (error code).
+ // --------------------------------------------------------------------------------
+ function duplicate($p_archive)
+ {
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the $p_archive is a PclZip object
+ if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
+ {
+
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive->zipname);
+ }
+
+ // ----- Look if the $p_archive is a string (so a filename)
+ else if (is_string($p_archive))
+ {
+
+ // ----- Check that $p_archive is a valid zip file
+ // TBC : Should also check the archive format
+ if (!is_file($p_archive)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
+ $v_result = PCLZIP_ERR_MISSING_FILE;
+ }
+ else {
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive);
+ }
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : merge()
+ // Description :
+ // This method merge the $p_archive_to_add archive at the end of the current
+ // one ($this).
+ // If the archive ($this) does not exist, the merge becomes a duplicate.
+ // If the $p_archive_to_add archive does not exist, the merge is a success.
+ // Parameters :
+ // $p_archive_to_add : It can be directly the filename of a valid zip archive,
+ // or a PclZip object archive.
+ // Return Values :
+ // 1 on success,
+ // 0 or negative values on error (see below).
+ // --------------------------------------------------------------------------------
+ function merge($p_archive_to_add)
+ {
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ return(0);
+ }
+
+ // ----- Look if the $p_archive_to_add is a PclZip object
+ if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
+ {
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($p_archive_to_add);
+ }
+
+ // ----- Look if the $p_archive_to_add is a string (so a filename)
+ else if (is_string($p_archive_to_add))
+ {
+
+ // ----- Create a temporary archive
+ $v_object_archive = new PclZip($p_archive_to_add);
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($v_object_archive);
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : errorCode()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorCode()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorCode());
+ }
+ else {
+ return($this->error_code);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorName()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorName($p_with_code=false)
+ {
+ $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
+ PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
+ PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
+ PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
+ PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
+ PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
+ PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
+ PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
+ PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
+ PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
+ PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
+ PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
+ PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
+ PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
+ PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
+ PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
+ PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
+ PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
+ ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
+ ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
+ );
+
+ if (isset($v_name[$this->error_code])) {
+ $v_value = $v_name[$this->error_code];
+ }
+ else {
+ $v_value = 'NoName';
+ }
+
+ if ($p_with_code) {
+ return($v_value.' ('.$this->error_code.')');
+ }
+ else {
+ return($v_value);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorInfo()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorInfo($p_full=false)
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorString());
+ }
+ else {
+ if ($p_full) {
+ return($this->errorName(true)." : ".$this->error_string);
+ }
+ else {
+ return($this->error_string." [code ".$this->error_code."]");
+ }
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// ***** *****
+// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
+// --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFormat()
+ // Description :
+ // This method check that the archive exists and is a valid zip archive.
+ // Several level of check exists. (futur)
+ // Parameters :
+ // $p_level : Level of check. Default 0.
+ // 0 : Check the first bytes (magic codes) (default value))
+ // 1 : 0 + Check the central directory (futur)
+ // 2 : 1 + Check each file header (futur)
+ // Return Values :
+ // true on success,
+ // false on error, the error code is set.
+ // --------------------------------------------------------------------------------
+ function privCheckFormat($p_level=0)
+ {
+ $v_result = true;
+
+ // ----- Reset the file system cache
+ clearstatcache();
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the file exits
+ if (!is_file($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
+ return(false);
+ }
+
+ // ----- Check that the file is readeable
+ if (!is_readable($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
+ return(false);
+ }
+
+ // ----- Check the magic code
+ // TBC
+
+ // ----- Check the central header
+ // TBC
+
+ // ----- Check each file header
+ // TBC
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privParseOptions()
+ // Description :
+ // This internal methods reads the variable list of arguments ($p_options_list,
+ // $p_size) and generate an array with the options and values ($v_result_list).
+ // $v_requested_options contains the options that can be present and those that
+ // must be present.
+ // $v_requested_options is an array, with the option value as key, and 'optional',
+ // or 'mandatory' as value.
+ // Parameters :
+ // See above.
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
+ {
+ $v_result=1;
+
+ // ----- Read the options
+ $i=0;
+ while ($i<$p_size) {
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$p_options_list[$i]])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for next option
+ switch ($p_options_list[$i]) {
+ // ----- Look for options that request a path value
+ case PCLZIP_OPT_PATH :
+ case PCLZIP_OPT_REMOVE_PATH :
+ case PCLZIP_OPT_ADD_PATH :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
+ $i++;
+ break;
+
+ case PCLZIP_OPT_TEMP_FILE_THRESHOLD :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+ return PclZip::errorCode();
+ }
+
+ // ----- Check for incompatible options
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
+ return PclZip::errorCode();
+ }
+
+ // ----- Check the value
+ $v_value = $p_options_list[$i+1];
+ if ((!is_integer($v_value)) || ($v_value<0)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value (and convert it in bytes)
+ $v_result_list[$p_options_list[$i]] = $v_value*1048576;
+ $i++;
+ break;
+
+ case PCLZIP_OPT_TEMP_FILE_ON :
+ // ----- Check for incompatible options
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
+ return PclZip::errorCode();
+ }
+
+ $v_result_list[$p_options_list[$i]] = true;
+ break;
+
+ case PCLZIP_OPT_TEMP_FILE_OFF :
+ // ----- Check for incompatible options
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
+ return PclZip::errorCode();
+ }
+ // ----- Check for incompatible options
+ if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '".PclZipUtilOptionText($p_options_list[$i])."' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
+ return PclZip::errorCode();
+ }
+
+ $v_result_list[$p_options_list[$i]] = true;
+ break;
+
+ case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if ( is_string($p_options_list[$i+1])
+ && ($p_options_list[$i+1] != '')) {
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], FALSE);
+ $i++;
+ }
+ else {
+ }
+ break;
+
+ // ----- Look for options that request an array of string for value
+ case PCLZIP_OPT_BY_NAME :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ $i++;
+ break;
+
+ // ----- Look for options that request an EREG or PREG expression
+ case PCLZIP_OPT_BY_EREG :
+ // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG
+ // to PCLZIP_OPT_BY_PREG
+ $p_options_list[$i] = PCLZIP_OPT_BY_PREG;
+ case PCLZIP_OPT_BY_PREG :
+ //case PCLZIP_OPT_CRYPT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ $i++;
+ break;
+
+ // ----- Look for options that takes a string
+ case PCLZIP_OPT_COMMENT :
+ case PCLZIP_OPT_ADD_COMMENT :
+ case PCLZIP_OPT_PREPEND_COMMENT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
+ "Missing parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
+ "Wrong parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ $i++;
+ break;
+
+ // ----- Look for options that request an array of index
+ case PCLZIP_OPT_BY_INDEX :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_work_list = array();
+ if (is_string($p_options_list[$i+1])) {
+
+ // ----- Remove spaces
+ $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
+
+ // ----- Parse items
+ $v_work_list = explode(",", $p_options_list[$i+1]);
+ }
+ else if (is_integer($p_options_list[$i+1])) {
+ $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ $v_work_list = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Reduce the index list
+ // each index item in the list must be a couple with a start and
+ // an end value : [0,3], [5-5], [8-10], ...
+ // ----- Check the format of each item
+ $v_sort_flag=false;
+ $v_sort_value=0;
+ for ($j=0; $j<sizeof($v_work_list); $j++) {
+ // ----- Explode the item
+ $v_item_list = explode("-", $v_work_list[$j]);
+ $v_size_item_list = sizeof($v_item_list);
+
+ // ----- TBC : Here we might check that each item is a
+ // real integer ...
+
+ // ----- Look for single value
+ if ($v_size_item_list == 1) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+ }
+ elseif ($v_size_item_list == 2) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+
+ // ----- Look for list sort
+ if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
+ $v_sort_flag=true;
+
+ // ----- TBC : An automatic sort should be writen ...
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+ }
+
+ // ----- Sort the items
+ if ($v_sort_flag) {
+ // TBC : To Be Completed
+ }
+
+ // ----- Next option
+ $i++;
+ break;
+
+ // ----- Look for options that request no value
+ case PCLZIP_OPT_REMOVE_ALL_PATH :
+ case PCLZIP_OPT_EXTRACT_AS_STRING :
+ case PCLZIP_OPT_NO_COMPRESSION :
+ case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
+ case PCLZIP_OPT_REPLACE_NEWER :
+ case PCLZIP_OPT_STOP_ON_ERROR :
+ $v_result_list[$p_options_list[$i]] = true;
+ break;
+
+ // ----- Look for options that request an octal value
+ case PCLZIP_OPT_SET_CHMOD :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ $i++;
+ break;
+
+ // ----- Look for options that request a call-back
+ case PCLZIP_CB_PRE_EXTRACT :
+ case PCLZIP_CB_POST_EXTRACT :
+ case PCLZIP_CB_PRE_ADD :
+ case PCLZIP_CB_POST_ADD :
+ /* for futur use
+ case PCLZIP_CB_PRE_DELETE :
+ case PCLZIP_CB_POST_DELETE :
+ case PCLZIP_CB_PRE_LIST :
+ case PCLZIP_CB_POST_LIST :
+ */
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_function_name = $p_options_list[$i+1];
+
+ // ----- Check that the value is a valid existing function
+ if (!function_exists($v_function_name)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Set the attribute
+ $v_result_list[$p_options_list[$i]] = $v_function_name;
+ $i++;
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '"
+ .$p_options_list[$i]."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Next options
+ $i++;
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ // ----- Look if present
+ if (!isset($v_result_list[$key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // ----- Look for default values
+ if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
+
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privOptionDefaultThreshold()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privOptionDefaultThreshold(&$p_options)
+ {
+ $v_result=1;
+
+ if (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
+ || isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF])) {
+ return $v_result;
+ }
+
+ // ----- Get 'memory_limit' configuration value
+ $v_memory_limit = ini_get('memory_limit');
+ $v_memory_limit = trim($v_memory_limit);
+ $last = strtolower(substr($v_memory_limit, -1));
+
+ if($last == 'g')
+ //$v_memory_limit = $v_memory_limit*1024*1024*1024;
+ $v_memory_limit = $v_memory_limit*1073741824;
+ if($last == 'm')
+ //$v_memory_limit = $v_memory_limit*1024*1024;
+ $v_memory_limit = $v_memory_limit*1048576;
+ if($last == 'k')
+ $v_memory_limit = $v_memory_limit*1024;
+
+ $p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] = floor($v_memory_limit*PCLZIP_TEMPORARY_FILE_RATIO);
+
+
+ // ----- Sanity check : No threshold if value lower than 1M
+ if ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] < 1048576) {
+ unset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD]);
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrParseAtt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
+ {
+ $v_result=1;
+
+ // ----- For each file in the list check the attributes
+ foreach ($p_file_list as $v_key => $v_value) {
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$v_key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for attribute
+ switch ($v_key) {
+ case PCLZIP_ATT_FILE_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
+
+ if ($p_filedescr['filename'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
+
+ if ($p_filedescr['new_short_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_FULL_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
+
+ if ($p_filedescr['new_full_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+ break;
+
+ // ----- Look for options that takes a string
+ case PCLZIP_ATT_FILE_COMMENT :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['comment'] = $v_value;
+ break;
+
+ case PCLZIP_ATT_FILE_MTIME :
+ if (!is_integer($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". Integer expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['mtime'] = $v_value;
+ break;
+
+ case PCLZIP_ATT_FILE_CONTENT :
+ $p_filedescr['content'] = $v_value;
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '".$v_key."'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ // ----- Look if present
+ if (!isset($p_file_list[$key])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // end foreach
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrExpand()
+ // Description :
+ // This method look for each item of the list to see if its a file, a folder
+ // or a string to be added as file. For any other type of files (link, other)
+ // just ignore the item.
+ // Then prepare the information that will be stored for that file.
+ // When its a folder, expand the folder with all the files that are in that
+ // folder (recursively).
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrExpand(&$p_filedescr_list, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Create a result list
+ $v_result_list = array();
+
+ // ----- Look each entry
+ for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
+
+ // ----- Get filedescr
+ $v_descr = $p_filedescr_list[$i];
+
+ // ----- Reduce the filename
+ $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename'], false);
+ $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
+
+ // ----- Look for real file or folder
+ if (file_exists($v_descr['filename'])) {
+ if (@is_file($v_descr['filename'])) {
+ $v_descr['type'] = 'file';
+ }
+ else if (@is_dir($v_descr['filename'])) {
+ $v_descr['type'] = 'folder';
+ }
+ else if (@is_link($v_descr['filename'])) {
+ // skip
+ continue;
+ }
+ else {
+ // skip
+ continue;
+ }
+ }
+
+ // ----- Look for string added as file
+ else if (isset($v_descr['content'])) {
+ $v_descr['type'] = 'virtual_file';
+ }
+
+ // ----- Missing file
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exist");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Calculate the stored filename
+ $this->privCalculateStoredFilename($v_descr, $p_options);
+
+ // ----- Add the descriptor in result list
+ $v_result_list[sizeof($v_result_list)] = $v_descr;
+
+ // ----- Look for folder
+ if ($v_descr['type'] == 'folder') {
+ // ----- List of items in folder
+ $v_dirlist_descr = array();
+ $v_dirlist_nb = 0;
+ if ($v_folder_handler = @opendir($v_descr['filename'])) {
+ while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+
+ // ----- Skip '.' and '..'
+ if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+ continue;
+ }
+
+ // ----- Compose the full filename
+ $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+
+ // ----- Look for different stored filename
+ // Because the name of the folder was changed, the name of the
+ // files/sub-folders also change
+ if (($v_descr['stored_filename'] != $v_descr['filename'])
+ && (!isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
+ if ($v_descr['stored_filename'] != '') {
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+ }
+ else {
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_item_handler;
+ }
+ }
+
+ $v_dirlist_nb++;
+ }
+
+ @closedir($v_folder_handler);
+ }
+ else {
+ // TBC : unable to open folder in read mode
+ }
+
+ // ----- Expand each element of the list
+ if ($v_dirlist_nb != 0) {
+ // ----- Expand
+ if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+ return $v_result;
+ }
+
+ // ----- Concat the resulting list
+ $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+ }
+ else {
+ }
+
+ // ----- Free local array
+ unset($v_dirlist_descr);
+ }
+ }
+
+ // ----- Get the result list
+ $p_filedescr_list = $v_result_list;
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCreate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the file in write mode
+ if (($v_result = $this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Add the list of files
+ $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAdd()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Look if the archive exists or is empty
+ if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
+ {
+
+ // ----- Do a create
+ $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Return
+ return $v_result;
+ }
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ @rewind($this->zip_fd);
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Create the Central Dir files header
+ for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = $v_central_dir['comment'];
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
+ $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privOpenFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privOpenFd($p_mode)
+ {
+ $v_result=1;
+
+ // ----- Look if already open
+ if ($this->zip_fd != 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Open the zip file
+ if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCloseFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privCloseFd()
+ {
+ $v_result=1;
+
+ if ($this->zip_fd != 0)
+ @fclose($this->zip_fd);
+ $this->zip_fd = 0;
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddList()
+ // Description :
+ // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+ // different from the real path of the file. This is usefull if you want to have PclTar
+ // running in any directory, and memorize relative path from an other directory.
+ // Parameters :
+ // $p_list : An array containing the file or directory names to add in the tar
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // $p_add_dir : Path to add in the filename path archived
+ // $p_remove_dir : Path to remove in the filename path archived
+ // Return Values :
+ // --------------------------------------------------------------------------------
+// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
+ function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+
+ // ----- Create the Central Dir files header
+ for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ // ----- Return
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFileList()
+ // Description :
+ // Parameters :
+ // $p_filedescr_list : An array containing the file description
+ // or directory names to add in the zip
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ $v_result=1;
+ $v_header = array();
+
+ // ----- Recuperate the current number of elt in list
+ $v_nb = sizeof($p_result_list);
+
+ // ----- Loop on the files
+ for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
+ // ----- Format the filename
+ $p_filedescr_list[$j]['filename']
+ = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+
+
+ // ----- Skip empty file names
+ // TBC : Can this be possible ? not checked in DescrParseAtt ?
+ if ($p_filedescr_list[$j]['filename'] == "") {
+ continue;
+ }
+
+ // ----- Check the filename
+ if ( ($p_filedescr_list[$j]['type'] != 'virtual_file')
+ && (!file_exists($p_filedescr_list[$j]['filename']))) {
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exist");
+ return PclZip::errorCode();
+ }
+
+ // ----- Look if it is a file or a dir with no all path remove option
+ // or a dir with all its path removed
+// if ( (is_file($p_filedescr_list[$j]['filename']))
+// || ( is_dir($p_filedescr_list[$j]['filename'])
+ if ( ($p_filedescr_list[$j]['type'] == 'file')
+ || ($p_filedescr_list[$j]['type'] == 'virtual_file')
+ || ( ($p_filedescr_list[$j]['type'] == 'folder')
+ && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
+ || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))
+ ) {
+
+ // ----- Add the file
+ $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
+ $p_options);
+ if ($v_result != 1) {
+ return $v_result;
+ }
+
+ // ----- Store the file infos
+ $p_result_list[$v_nb++] = $v_header;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFile($p_filedescr, &$p_header, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Working variable
+ $p_filename = $p_filedescr['filename'];
+
+ // TBC : Already done in the fileAtt check ... ?
+ if ($p_filename == "") {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for a stored different filename
+ /* TBC : Removed
+ if (isset($p_filedescr['stored_filename'])) {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ }
+ else {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ }
+ */
+
+ // ----- Set the file properties
+ clearstatcache();
+ $p_header['version'] = 20;
+ $p_header['version_extracted'] = 10;
+ $p_header['flag'] = 0;
+ $p_header['compression'] = 0;
+ $p_header['crc'] = 0;
+ $p_header['compressed_size'] = 0;
+ $p_header['filename_len'] = strlen($p_filename);
+ $p_header['extra_len'] = 0;
+ $p_header['disk'] = 0;
+ $p_header['internal'] = 0;
+ $p_header['offset'] = 0;
+ $p_header['filename'] = $p_filename;
+// TBC : Removed $p_header['stored_filename'] = $v_stored_filename;
+ $p_header['stored_filename'] = $p_filedescr['stored_filename'];
+ $p_header['extra'] = '';
+ $p_header['status'] = 'ok';
+ $p_header['index'] = -1;
+
+ // ----- Look for regular file
+ if ($p_filedescr['type']=='file') {
+ $p_header['external'] = 0x00000000;
+ $p_header['size'] = filesize($p_filename);
+ }
+
+ // ----- Look for regular folder
+ else if ($p_filedescr['type']=='folder') {
+ $p_header['external'] = 0x00000010;
+ $p_header['mtime'] = filemtime($p_filename);
+ $p_header['size'] = filesize($p_filename);
+ }
+
+ // ----- Look for virtual file
+ else if ($p_filedescr['type'] == 'virtual_file') {
+ $p_header['external'] = 0x00000000;
+ $p_header['size'] = strlen($p_filedescr['content']);
+ }
+
+
+ // ----- Look for filetime
+ if (isset($p_filedescr['mtime'])) {
+ $p_header['mtime'] = $p_filedescr['mtime'];
+ }
+ else if ($p_filedescr['type'] == 'virtual_file') {
+ $p_header['mtime'] = time();
+ }
+ else {
+ $p_header['mtime'] = filemtime($p_filename);
+ }
+
+ // ------ Look for file comment
+ if (isset($p_filedescr['comment'])) {
+ $p_header['comment_len'] = strlen($p_filedescr['comment']);
+ $p_header['comment'] = $p_filedescr['comment'];
+ }
+ else {
+ $p_header['comment_len'] = 0;
+ $p_header['comment'] = '';
+ }
+
+ // ----- Look for pre-add callback
+ if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_PRE_ADD](PCLZIP_CB_PRE_ADD, $v_local_header);
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_header['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+ $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
+ }
+ }
+
+ // ----- Look for empty stored filename
+ if ($p_header['stored_filename'] == "") {
+ $p_header['status'] = "filtered";
+ }
+
+ // ----- Check the path length
+ if (strlen($p_header['stored_filename']) > 0xFF) {
+ $p_header['status'] = 'filename_too_long';
+ }
+
+ // ----- Look if no error, or file not skipped
+ if ($p_header['status'] == 'ok') {
+
+ // ----- Look for a file
+ if ($p_filedescr['type'] == 'file') {
+ // ----- Look for using temporary file to zip
+ if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
+ && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
+ || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
+ && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_header['size'])) ) ) {
+ $v_result = $this->privAddFileUsingTempFile($p_filedescr, $p_header, $p_options);
+ if ($v_result < PCLZIP_ERR_NO_ERROR) {
+ return $v_result;
+ }
+ }
+
+ // ----- Use "in memory" zip algo
+ else {
+
+ // ----- Open the source file
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the file content
+ $v_content = @fread($v_file, $p_header['size']);
+
+ // ----- Close the file
+ @fclose($v_file);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content);
+
+ // ----- Look for no compression
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+ // ----- Set header parameters
+ $p_header['compressed_size'] = $p_header['size'];
+ $p_header['compression'] = 0;
+ }
+
+ // ----- Look for normal compression
+ else {
+ // ----- Compress the content
+ $v_content = @gzdeflate($v_content);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = strlen($v_content);
+ $p_header['compression'] = 8;
+ }
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ @fclose($v_file);
+ return $v_result;
+ }
+
+ // ----- Write the compressed (or not) content
+ @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
+
+ }
+
+ }
+
+ // ----- Look for a virtual file (a file from string)
+ else if ($p_filedescr['type'] == 'virtual_file') {
+
+ $v_content = $p_filedescr['content'];
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content);
+
+ // ----- Look for no compression
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+ // ----- Set header parameters
+ $p_header['compressed_size'] = $p_header['size'];
+ $p_header['compression'] = 0;
+ }
+
+ // ----- Look for normal compression
+ else {
+ // ----- Compress the content
+ $v_content = @gzdeflate($v_content);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = strlen($v_content);
+ $p_header['compression'] = 8;
+ }
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ @fclose($v_file);
+ return $v_result;
+ }
+
+ // ----- Write the compressed (or not) content
+ @fwrite($this->zip_fd, $v_content, $p_header['compressed_size']);
+ }
+
+ // ----- Look for a directory
+ else if ($p_filedescr['type'] == 'folder') {
+ // ----- Look for directory last '/'
+ if (@substr($p_header['stored_filename'], -1) != '/') {
+ $p_header['stored_filename'] .= '/';
+ }
+
+ // ----- Set the file properties
+ $p_header['size'] = 0;
+ //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked
+ $p_header['external'] = 0x00000010; // Value for a folder : to be checked
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
+ {
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Look for post-add callback
+ if (isset($p_options[PCLZIP_CB_POST_ADD])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_POST_ADD](PCLZIP_CB_POST_ADD, $v_local_header);
+ if ($v_result == 0) {
+ // ----- Ignored
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Nothing can be modified
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFileUsingTempFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFileUsingTempFile($p_filedescr, &$p_header, &$p_options)
+ {
+ $v_result=PCLZIP_ERR_NO_ERROR;
+
+ // ----- Working variable
+ $p_filename = $p_filedescr['filename'];
+
+
+ // ----- Open the source file
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
+ return PclZip::errorCode();
+ }
+
+ // ----- Creates a compressed temporary file
+ $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
+ if (($v_file_compressed = @gzopen($v_gzip_temp_name, "wb")) == 0) {
+ fclose($v_file);
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = filesize($p_filename);
+ while ($v_size != 0) {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($v_file, $v_read_size);
+ //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @gzputs($v_file_compressed, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close the file
+ @fclose($v_file);
+ @gzclose($v_file_compressed);
+
+ // ----- Check the minimum file size
+ if (filesize($v_gzip_temp_name) < 18) {
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the compressed attributes
+ if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the gzip file header
+ $v_binary_data = @fread($v_file_compressed, 10);
+ $v_data_header = unpack('a1id1/a1id2/a1cm/a1flag/Vmtime/a1xfl/a1os', $v_binary_data);
+
+ // ----- Check some parameters
+ $v_data_header['os'] = bin2hex($v_data_header['os']);
+
+ // ----- Read the gzip file footer
+ @fseek($v_file_compressed, filesize($v_gzip_temp_name)-8);
+ $v_binary_data = @fread($v_file_compressed, 8);
+ $v_data_footer = unpack('Vcrc/Vcompressed_size', $v_binary_data);
+
+ // ----- Set the attributes
+ $p_header['compression'] = ord($v_data_header['cm']);
+ //$p_header['mtime'] = $v_data_header['mtime'];
+ $p_header['crc'] = $v_data_footer['crc'];
+ $p_header['compressed_size'] = filesize($v_gzip_temp_name)-18;
+
+ // ----- Close the file
+ @fclose($v_file_compressed);
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ return $v_result;
+ }
+
+ // ----- Add the compressed data
+ if (($v_file_compressed = @fopen($v_gzip_temp_name, "rb")) == 0)
+ {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ fseek($v_file_compressed, 10);
+ $v_size = $p_header['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($v_file_compressed, $v_read_size);
+ //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close the file
+ @fclose($v_file_compressed);
+
+ // ----- Unlink the temporary file
+ @unlink($v_gzip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCalculateStoredFilename()
+ // Description :
+ // Based on file descriptor properties and global options, this method
+ // calculate the filename that will be stored in the archive.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCalculateStoredFilename(&$p_filedescr, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Working variables
+ $p_filename = $p_filedescr['filename'];
+ if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
+ $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
+ }
+ else {
+ $p_add_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ else {
+ $p_remove_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ else {
+ $p_remove_all_dir = 0;
+ }
+
+
+ // ----- Look for full name change
+ if (isset($p_filedescr['new_full_name'])) {
+ // ----- Remove drive letter if any
+ $v_stored_filename = PclZipUtilTranslateWinPath($p_filedescr['new_full_name']);
+ }
+
+ // ----- Look for path and/or short name change
+ else {
+
+ // ----- Look for short name change
+ // Its when we cahnge just the filename but not the path
+ if (isset($p_filedescr['new_short_name'])) {
+ $v_path_info = pathinfo($p_filename);
+ $v_dir = '';
+ if ($v_path_info['dirname'] != '') {
+ $v_dir = $v_path_info['dirname'].'/';
+ }
+ $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+ }
+ else {
+ // ----- Calculate the stored filename
+ $v_stored_filename = $p_filename;
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_dir) {
+ $v_stored_filename = basename($p_filename);
+ }
+ // ----- Look for partial path remove
+ else if ($p_remove_dir != "") {
+ if (substr($p_remove_dir, -1) != '/')
+ $p_remove_dir .= "/";
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ || (substr($p_remove_dir, 0, 2) == "./")) {
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ && (substr($p_remove_dir, 0, 2) != "./")) {
+ $p_remove_dir = "./".$p_remove_dir;
+ }
+ if ( (substr($p_filename, 0, 2) != "./")
+ && (substr($p_remove_dir, 0, 2) == "./")) {
+ $p_remove_dir = substr($p_remove_dir, 2);
+ }
+ }
+
+ $v_compare = PclZipUtilPathInclusion($p_remove_dir,
+ $v_stored_filename);
+ if ($v_compare > 0) {
+ if ($v_compare == 2) {
+ $v_stored_filename = "";
+ }
+ else {
+ $v_stored_filename = substr($v_stored_filename,
+ strlen($p_remove_dir));
+ }
+ }
+ }
+
+ // ----- Remove drive letter if any
+ $v_stored_filename = PclZipUtilTranslateWinPath($v_stored_filename);
+
+ // ----- Look for path to add
+ if ($p_add_dir != "") {
+ if (substr($p_add_dir, -1) == "/")
+ $v_stored_filename = $p_add_dir.$v_stored_filename;
+ else
+ $v_stored_filename = $p_add_dir."/".$v_stored_filename;
+ }
+ }
+
+ // ----- Filename (reduce the path of stored name)
+ $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
+ $p_filedescr['stored_filename'] = $v_stored_filename;
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteFileHeader(&$p_header)
+ {
+ $v_result=1;
+
+ // ----- Store the offset position of the file
+ $p_header['offset'] = ftell($this->zip_fd);
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
+ $p_header['version_extracted'], $p_header['flag'],
+ $p_header['compression'], $v_mtime, $v_mdate,
+ $p_header['crc'], $p_header['compressed_size'],
+ $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len']);
+
+ // ----- Write the first 148 bytes of the header in the archive
+ fputs($this->zip_fd, $v_binary_data, 30);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralFileHeader(&$p_header)
+ {
+ $v_result=1;
+
+ // TBC
+ //for(reset($p_header); $key = key($p_header); next($p_header)) {
+ //}
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
+ $p_header['version'], $p_header['version_extracted'],
+ $p_header['flag'], $p_header['compression'],
+ $v_mtime, $v_mdate, $p_header['crc'],
+ $p_header['compressed_size'], $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len'], $p_header['comment_len'],
+ $p_header['disk'], $p_header['internal'],
+ $p_header['external'], $p_header['offset']);
+
+ // ----- Write the 42 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 46);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+ if ($p_header['comment_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+ {
+ $v_result=1;
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
+ $p_nb_entries, $p_size,
+ $p_offset, strlen($p_comment));
+
+ // ----- Write the 22 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 22);
+
+ // ----- Write the variable fields
+ if (strlen($p_comment) != 0)
+ {
+ fputs($this->zip_fd, $p_comment, strlen($p_comment));
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privList()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privList(&$p_list)
+ {
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+
+ // ----- Go to beginning of Central Dir
+ @rewind($this->zip_fd);
+ if (@fseek($this->zip_fd, $v_central_dir['offset']))
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read each entry
+ for ($i=0; $i<$v_central_dir['entries']; $i++)
+ {
+ // ----- Read the file header
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+ $v_header['index'] = $i;
+
+ // ----- Get the only interesting attributes
+ $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
+ unset($v_header);
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privConvertHeader2FileInfo()
+ // Description :
+ // This function takes the file informations from the central directory
+ // entries and extract the interesting parameters that will be given back.
+ // The resulting file infos are set in the array $p_info
+ // $p_info['filename'] : Filename with full path. Given by user (add),
+ // extracted in the filesystem (extract).
+ // $p_info['stored_filename'] : Stored filename in the archive.
+ // $p_info['size'] = Size of the file.
+ // $p_info['compressed_size'] = Compressed size of the file.
+ // $p_info['mtime'] = Last modification date of the file.
+ // $p_info['comment'] = Comment associated with the file.
+ // $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+ // $p_info['status'] = status of the action on the file.
+ // $p_info['crc'] = CRC of the file content.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privConvertHeader2FileInfo($p_header, &$p_info)
+ {
+ $v_result=1;
+
+ // ----- Get the interesting attributes
+ $v_temp_path = PclZipUtilPathReduction($p_header['filename']);
+ $p_info['filename'] = $v_temp_path;
+ $v_temp_path = PclZipUtilPathReduction($p_header['stored_filename']);
+ $p_info['stored_filename'] = $v_temp_path;
+ $p_info['size'] = $p_header['size'];
+ $p_info['compressed_size'] = $p_header['compressed_size'];
+ $p_info['mtime'] = $p_header['mtime'];
+ $p_info['comment'] = $p_header['comment'];
+ $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
+ $p_info['index'] = $p_header['index'];
+ $p_info['status'] = $p_header['status'];
+ $p_info['crc'] = $p_header['crc'];
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractByRule()
+ // Description :
+ // Extract a file or directory depending of rules (by index, by name, ...)
+ // Parameters :
+ // $p_file_list : An array where will be placed the properties of each
+ // extracted file
+ // $p_path : Path to add while writing the extracted files
+ // $p_remove_path : Path to remove (from the file memorized path) while writing the
+ // extracted files. If the path does not match the file path,
+ // the file is extracted with its memorized path.
+ // $p_remove_path does not apply to 'list' mode.
+ // $p_path and $p_remove_path are commulative.
+ // Return Values :
+ // 1 on success,0 or less on error (see error code list)
+ // --------------------------------------------------------------------------------
+ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check the path
+ if ( ($p_path == "")
+ || ( (substr($p_path, 0, 1) != "/")
+ && (substr($p_path, 0, 3) != "../")
+ && (substr($p_path,1,2)!=":/")))
+ $p_path = "./".$p_path;
+
+ // ----- Reduce the path last (and duplicated) '/'
+ if (($p_path != "./") && ($p_path != "/"))
+ {
+ // ----- Look for the path end '/'
+ while (substr($p_path, -1) == "/")
+ {
+ $p_path = substr($p_path, 0, strlen($p_path)-1);
+ }
+ }
+
+ // ----- Look for path to remove format (should end by /)
+ if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
+ {
+ $p_remove_path .= '/';
+ }
+ $p_remove_path_size = strlen($p_remove_path);
+
+ // ----- Open the zip file
+ if (($v_result = $this->privOpenFd('rb')) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ return $v_result;
+ }
+
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+
+ // ----- Read each entry
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+
+ // ----- Read next Central dir entry
+ @rewind($this->zip_fd);
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ return $v_result;
+ }
+
+ // ----- Store the index
+ $v_header['index'] = $i;
+
+ // ----- Store the file position
+ $v_pos_entry = ftell($this->zip_fd);
+
+ // ----- Look for the specific extract rules
+ $v_extract = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ $v_extract = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ $v_extract = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ // ereg() is deprecated with PHP 5.3
+ /*
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
+ $v_extract = true;
+ }
+ }
+ */
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ $v_extract = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ break;
+ }
+ }
+ }
+
+ // ----- Look for no rule, which means extract all the archive
+ else {
+ $v_extract = true;
+ }
+
+ // ----- Check compression method
+ if ( ($v_extract)
+ && ( ($v_header['compression'] != 8)
+ && ($v_header['compression'] != 0))) {
+ $v_header['status'] = 'unsupported_compression';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
+ "Filename '".$v_header['stored_filename']."' is "
+ ."compressed by an unsupported compression "
+ ."method (".$v_header['compression'].") ");
+
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Check encrypted files
+ if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
+ $v_header['status'] = 'unsupported_encryption';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
+ "Unsupported encryption for "
+ ." filename '".$v_header['stored_filename']
+ ."'");
+
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for real extraction
+ if (($v_extract) && ($v_header['status'] != 'ok')) {
+ $v_result = $this->privConvertHeader2FileInfo($v_header,
+ $p_file_list[$v_nb_extracted++]);
+ if ($v_result != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+
+ $v_extract = false;
+ }
+
+ // ----- Look for real extraction
+ if ($v_extract)
+ {
+
+ // ----- Go to the file position
+ @rewind($this->zip_fd);
+ if (@fseek($this->zip_fd, $v_header['offset']))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for extraction as string
+ if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
+
+ $v_string = '';
+
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFileAsString($v_header, $v_string, $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ return $v_result;
+ }
+
+ // ----- Set the file content
+ $p_file_list[$v_nb_extracted]['content'] = $v_string;
+
+ // ----- Next extracted file
+ $v_nb_extracted++;
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for extraction in standard output
+ elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
+ && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
+ // ----- Extracting the file in standard output
+ $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for normal extraction
+ else {
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFile($v_header,
+ $p_path, $p_remove_path,
+ $p_remove_all_path,
+ $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ }
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ //
+ // 1 : ... ?
+ // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+ // --------------------------------------------------------------------------------
+ function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_path == true) {
+ // ----- Look for folder entry that not need to be extracted
+ if (($p_entry['external']&0x00000010)==0x00000010) {
+
+ $p_entry['status'] = "filtered";
+
+ return $v_result;
+ }
+
+ // ----- Get the basename of the path
+ $p_entry['filename'] = basename($p_entry['filename']);
+ }
+
+ // ----- Look for path to remove
+ else if ($p_remove_path != "")
+ {
+ if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
+ {
+
+ // ----- Change the file status
+ $p_entry['status'] = "filtered";
+
+ // ----- Return
+ return $v_result;
+ }
+
+ $p_remove_path_size = strlen($p_remove_path);
+ if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
+ {
+
+ // ----- Remove the path
+ $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+
+ }
+ }
+
+ // ----- Add the path
+ if ($p_path != '') {
+ $p_entry['filename'] = $p_path."/".$p_entry['filename'];
+ }
+
+ // ----- Check a base_dir_restriction
+ if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
+ $v_inclusion
+ = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
+ $p_entry['filename']);
+ if ($v_inclusion == 0) {
+
+ PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
+ "Filename '".$p_entry['filename']."' is "
+ ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
+
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ }
+
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Look for specific actions while the file exist
+ if (file_exists($p_entry['filename']))
+ {
+
+ // ----- Look if file is a directory
+ if (is_dir($p_entry['filename']))
+ {
+
+ // ----- Change the file status
+ $p_entry['status'] = "already_a_directory";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+
+ PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
+ "Filename '".$p_entry['filename']."' is "
+ ."already used by an existing directory");
+
+ return PclZip::errorCode();
+ }
+ }
+ // ----- Look if file is write protected
+ else if (!is_writeable($p_entry['filename']))
+ {
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_protected";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Filename '".$p_entry['filename']."' exists "
+ ."and is write protected");
+
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look if the extracted file is older
+ else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
+ {
+ // ----- Change the file status
+ if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
+ && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
+ }
+ else {
+ $p_entry['status'] = "newer_exist";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Newer version of '".$p_entry['filename']."' exists "
+ ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
+
+ return PclZip::errorCode();
+ }
+ }
+ }
+ else {
+ }
+ }
+
+ // ----- Check the directory availability and create it if necessary
+ else {
+ if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
+ $v_dir_to_check = $p_entry['filename'];
+ else if (!strstr($p_entry['filename'], "/"))
+ $v_dir_to_check = "";
+ else
+ $v_dir_to_check = dirname($p_entry['filename']);
+
+ if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
+
+ // ----- Change the file status
+ $p_entry['status'] = "path_creation_fail";
+
+ // ----- Return
+ //return $v_result;
+ $v_result = 1;
+ }
+ }
+ }
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+ if ($p_entry['compression'] == 0) {
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
+ {
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ // ----- Return
+ return $v_result;
+ }
+
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ /* Try to speed up the code
+ $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+ */
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Closing the destination file
+ fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ touch($p_entry['filename'], $p_entry['mtime']);
+
+
+ }
+ else {
+ // ----- TBC
+ // Need to be finished
+ if (($p_entry['flag'] & 1) == 1) {
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION, 'File \''.$p_entry['filename'].'\' is encrypted. Encrypted files are not supported.');
+ return PclZip::errorCode();
+ }
+
+
+ // ----- Look for using temporary file to unzip
+ if ( (!isset($p_options[PCLZIP_OPT_TEMP_FILE_OFF]))
+ && (isset($p_options[PCLZIP_OPT_TEMP_FILE_ON])
+ || (isset($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD])
+ && ($p_options[PCLZIP_OPT_TEMP_FILE_THRESHOLD] <= $p_entry['size'])) ) ) {
+ $v_result = $this->privExtractFileUsingTempFile($p_entry, $p_options);
+ if ($v_result < PCLZIP_ERR_NO_ERROR) {
+ return $v_result;
+ }
+ }
+
+ // ----- Look for extract in memory
+ else {
+
+
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ $v_file_content = @gzinflate($v_buffer);
+ unset($v_buffer);
+ if ($v_file_content === FALSE) {
+
+ // ----- Change the file status
+ // TBC
+ $p_entry['status'] = "error";
+
+ return $v_result;
+ }
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ return $v_result;
+ }
+
+ // ----- Write the uncompressed data
+ @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+ unset($v_file_content);
+
+ // ----- Closing the destination file
+ @fclose($v_dest_file);
+
+ }
+
+ // ----- Change the file mtime
+ @touch($p_entry['filename'], $p_entry['mtime']);
+ }
+
+ // ----- Look for chmod option
+ if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
+
+ // ----- Change the mode of the file
+ @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
+ }
+
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileUsingTempFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileUsingTempFile(&$p_entry, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Creates a temporary file
+ $v_gzip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.gz';
+ if (($v_dest_file = @fopen($v_gzip_temp_name, "wb")) == 0) {
+ fclose($v_file);
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary write mode');
+ return PclZip::errorCode();
+ }
+
+
+ // ----- Write gz file format header
+ $v_binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($p_entry['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
+ @fwrite($v_dest_file, $v_binary_data, 10);
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Write gz file format footer
+ $v_binary_data = pack('VV', $p_entry['crc'], $p_entry['size']);
+ @fwrite($v_dest_file, $v_binary_data, 8);
+
+ // ----- Close the temporary file
+ @fclose($v_dest_file);
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+ $p_entry['status'] = "write_error";
+ return $v_result;
+ }
+
+ // ----- Open the temporary gz file
+ if (($v_src_file = @gzopen($v_gzip_temp_name, 'rb')) == 0) {
+ @fclose($v_dest_file);
+ $p_entry['status'] = "read_error";
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_gzip_temp_name.'\' in binary read mode');
+ return PclZip::errorCode();
+ }
+
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['size'];
+ while ($v_size != 0) {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @gzread($v_src_file, $v_read_size);
+ //$v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+ @fclose($v_dest_file);
+ @gzclose($v_src_file);
+
+ // ----- Delete the temporary file
+ @unlink($v_gzip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileInOutput()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileInOutput(&$p_entry, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+ return $v_result;
+ }
+
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ }
+
+ // ----- Trace
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+ // ----- Look for not compressed file
+ if ($p_entry['compressed_size'] == $p_entry['size']) {
+
+ // ----- Read the file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Send the file to the output
+ echo $v_buffer;
+ unset($v_buffer);
+ }
+ else {
+
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ $v_file_content = gzinflate($v_buffer);
+ unset($v_buffer);
+
+ // ----- Send the file to the output
+ echo $v_file_content;
+ unset($v_file_content);
+ }
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileAsString()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileAsString(&$p_entry, &$p_string, &$p_options)
+ {
+ $v_result=1;
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_PRE_EXTRACT](PCLZIP_CB_PRE_EXTRACT, $v_local_header);
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ }
+
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+ // ----- Look for not compressed file
+ // if ($p_entry['compressed_size'] == $p_entry['size'])
+ if ($p_entry['compression'] == 0) {
+
+ // ----- Reading the file
+ $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+ else {
+
+ // ----- Reading the file
+ $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ if (($p_string = @gzinflate($v_data)) === FALSE) {
+ // TBC
+ }
+ }
+
+ // ----- Trace
+ }
+ else {
+ // TBC : error : can not extract a folder in a string
+ }
+
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Swap the content to header
+ $v_local_header['content'] = $p_string;
+ $p_string = '';
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+// eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+ $v_result = $p_options[PCLZIP_CB_POST_EXTRACT](PCLZIP_CB_POST_EXTRACT, $v_local_header);
+
+ // ----- Swap back the content to header
+ $p_string = $v_local_header['content'];
+ unset($v_local_header['content']);
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadFileHeader(&$p_header)
+ {
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ $v_data = unpack('Vid', $v_binary_data);
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x04034b50)
+ {
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 26);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 26)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
+
+ // ----- Get filename
+ $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
+
+ // ----- Get extra_fields
+ if ($v_data['extra_len'] != 0) {
+ $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
+ }
+ else {
+ $p_header['extra'] = '';
+ }
+
+ // ----- Extract properties
+ $p_header['version_extracted'] = $v_data['version'];
+ $p_header['compression'] = $v_data['compression'];
+ $p_header['size'] = $v_data['size'];
+ $p_header['compressed_size'] = $v_data['compressed_size'];
+ $p_header['crc'] = $v_data['crc'];
+ $p_header['flag'] = $v_data['flag'];
+ $p_header['filename_len'] = $v_data['filename_len'];
+
+ // ----- Recuperate date in UNIX format
+ $p_header['mdate'] = $v_data['mdate'];
+ $p_header['mtime'] = $v_data['mtime'];
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ }
+
+ // TBC
+ //for(reset($v_data); $key = key($v_data); next($v_data)) {
+ //}
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set the status field
+ $p_header['status'] = "ok";
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadCentralFileHeader(&$p_header)
+ {
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ $v_data = unpack('Vid', $v_binary_data);
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x02014b50)
+ {
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 42);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 42)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
+
+ // ----- Get filename
+ if ($p_header['filename_len'] != 0)
+ $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
+ else
+ $p_header['filename'] = '';
+
+ // ----- Get extra
+ if ($p_header['extra_len'] != 0)
+ $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
+ else
+ $p_header['extra'] = '';
+
+ // ----- Get comment
+ if ($p_header['comment_len'] != 0)
+ $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
+ else
+ $p_header['comment'] = '';
+
+ // ----- Extract properties
+
+ // ----- Recuperate date in UNIX format
+ //if ($p_header['mdate'] && $p_header['mtime'])
+ // TBC : bug : this was ignoring time with 0/0/0
+ if (1)
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = @mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ }
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set default status to ok
+ $p_header['status'] = 'ok';
+
+ // ----- Look if it is a directory
+ if (substr($p_header['filename'], -1) == '/') {
+ //$p_header['external'] = 0x41FF0010;
+ $p_header['external'] = 0x00000010;
+ }
+
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFileHeaders()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success,
+ // 0 on error;
+ // --------------------------------------------------------------------------------
+ function privCheckFileHeaders(&$p_local_header, &$p_central_header)
+ {
+ $v_result=1;
+
+ // ----- Check the static values
+ // TBC
+ if ($p_local_header['filename'] != $p_central_header['filename']) {
+ }
+ if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+ }
+ if ($p_local_header['flag'] != $p_central_header['flag']) {
+ }
+ if ($p_local_header['compression'] != $p_central_header['compression']) {
+ }
+ if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+ }
+ if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+ }
+
+ // ----- Look for flag bit 3
+ if (($p_local_header['flag'] & 8) == 8) {
+ $p_local_header['size'] = $p_central_header['size'];
+ $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+ $p_local_header['crc'] = $p_central_header['crc'];
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadEndCentralDir()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadEndCentralDir(&$p_central_dir)
+ {
+ $v_result=1;
+
+ // ----- Go to the end of the zip file
+ $v_size = filesize($this->zipname);
+ @fseek($this->zip_fd, $v_size);
+ if (@ftell($this->zip_fd) != $v_size)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- First try : look if this is an archive with no commentaries (most of the time)
+ // in this case the end of central dir is at 22 bytes of the file end
+ $v_found = 0;
+ if ($v_size > 26) {
+ @fseek($this->zip_fd, $v_size-22);
+ if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read for bytes
+ $v_binary_data = @fread($this->zip_fd, 4);
+ $v_data = @unpack('Vid', $v_binary_data);
+
+ // ----- Check signature
+ if ($v_data['id'] == 0x06054b50) {
+ $v_found = 1;
+ }
+
+ $v_pos = ftell($this->zip_fd);
+ }
+
+ // ----- Go back to the maximum possible size of the Central Dir End Record
+ if (!$v_found) {
+ $v_maximum_size = 65557; // 0xFFFF + 22;
+ if ($v_maximum_size > $v_size)
+ $v_maximum_size = $v_size;
+ @fseek($this->zip_fd, $v_size-$v_maximum_size);
+ if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read byte per byte in order to find the signature
+ $v_pos = ftell($this->zip_fd);
+ $v_bytes = 0x00000000;
+ while ($v_pos < $v_size)
+ {
+ // ----- Read a byte
+ $v_byte = @fread($this->zip_fd, 1);
+
+ // ----- Add the byte
+ //$v_bytes = ($v_bytes << 8) | Ord($v_byte);
+ // Note we mask the old value down such that once shifted we can never end up with more than a 32bit number
+ // Otherwise on systems where we have 64bit integers the check below for the magic number will fail.
+ $v_bytes = ( ($v_bytes & 0xFFFFFF) << 8) | Ord($v_byte);
+
+ // ----- Compare the bytes
+ if ($v_bytes == 0x504b0506)
+ {
+ $v_pos++;
+ break;
+ }
+
+ $v_pos++;
+ }
+
+ // ----- Look if not found end of central dir
+ if ($v_pos == $v_size)
+ {
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Read the first 18 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 18);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 18)
+ {
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+
+ // ----- Check the global size
+ if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+
+ // ----- Removed in release 2.2 see readme file
+ // The check of the file size is a little too strict.
+ // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+ // While decrypted, zip has training 0 bytes
+ if (0) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
+ 'The central dir is not at the end of the archive.'
+ .' Some trailing bytes exists after the archive.');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Get comment
+ if ($v_data['comment_size'] != 0) {
+ $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
+ }
+ else
+ $p_central_dir['comment'] = '';
+
+ $p_central_dir['entries'] = $v_data['entries'];
+ $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+ $p_central_dir['offset'] = $v_data['offset'];
+ $p_central_dir['size'] = $v_data['size'];
+ $p_central_dir['disk'] = $v_data['disk'];
+ $p_central_dir['disk_start'] = $v_data['disk_start'];
+
+ // TBC
+ //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+ //}
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDeleteByRule()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDeleteByRule(&$p_result_list, &$p_options)
+ {
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Open the zip file
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ @rewind($this->zip_fd);
+
+ // ----- Scan all the files
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+ @rewind($this->zip_fd);
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read each entry
+ $v_header_list = array();
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+
+ // ----- Read the file header
+ $v_header_list[$v_nb_extracted] = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ return $v_result;
+ }
+
+
+ // ----- Store the index
+ $v_header_list[$v_nb_extracted]['index'] = $i;
+
+ // ----- Look for the specific extract rules
+ $v_found = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ $v_found = true;
+ }
+ elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
+ && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ $v_found = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ $v_found = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ // ereg() is deprecated with PHP 5.3
+ /*
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ $v_found = true;
+ }
+ }
+ */
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ $v_found = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ break;
+ }
+ }
+ }
+ else {
+ $v_found = true;
+ }
+
+ // ----- Look for deletion
+ if ($v_found)
+ {
+ unset($v_header_list[$v_nb_extracted]);
+ }
+ else
+ {
+ $v_nb_extracted++;
+ }
+ }
+
+ // ----- Look if something need to be deleted
+ if ($v_nb_extracted > 0) {
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Creates a temporary zip archive
+ $v_temp_zip = new PclZip($v_zip_temp_name);
+
+ // ----- Open the temporary zip file in write mode
+ if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
+ $this->privCloseFd();
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Look which file need to be kept
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+
+ // ----- Calculate the position of the header
+ @rewind($this->zip_fd);
+ if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the file header
+ $v_local_header = array();
+ if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Check that local file header is same as central file header
+ if ($this->privCheckFileHeaders($v_local_header,
+ $v_header_list[$i]) != 1) {
+ // TBC
+ }
+ unset($v_local_header);
+
+ // ----- Write the file header
+ if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Read/write the data block
+ if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_temp_zip->zip_fd);
+
+ // ----- Re-Create the Central Dir files header
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ // ----- Create the file header
+ if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Close
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Destroy the temporary archive
+ unset($v_temp_zip);
+ }
+
+ // ----- Remove every files : reset the file
+ else if ($v_central_dir['entries'] != 0) {
+ $this->privCloseFd();
+
+ if (($v_result = $this->privOpenFd('wb')) != 1) {
+ return $v_result;
+ }
+
+ if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
+ return $v_result;
+ }
+
+ $this->privCloseFd();
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDirCheck()
+ // Description :
+ // Check if a directory exists, if not it creates it and all the parents directory
+ // which may be useful.
+ // Parameters :
+ // $p_dir : Directory path to check.
+ // Return Values :
+ // 1 : OK
+ // -1 : Unable to create directory
+ // --------------------------------------------------------------------------------
+ function privDirCheck($p_dir, $p_is_dir=false)
+ {
+ $v_result = 1;
+
+
+ // ----- Remove the final '/'
+ if (($p_is_dir) && (substr($p_dir, -1)=='/'))
+ {
+ $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+ }
+
+ // ----- Check the directory availability
+ if ((is_dir($p_dir)) || ($p_dir == ""))
+ {
+ return 1;
+ }
+
+ // ----- Extract parent directory
+ $p_parent_dir = dirname($p_dir);
+
+ // ----- Just a check
+ if ($p_parent_dir != $p_dir)
+ {
+ // ----- Look for parent directory
+ if ($p_parent_dir != "")
+ {
+ if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
+ {
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Create the directory
+ if (!@mkdir($p_dir, 0777))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privMerge()
+ // Description :
+ // If $p_archive_to_add does not exist, the function exit with a success result.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privMerge(&$p_archive_to_add)
+ {
+ $v_result=1;
+
+ // ----- Look if the archive_to_add exists
+ if (!is_file($p_archive_to_add->zipname))
+ {
+
+ // ----- Nothing to merge, so merge is a success
+ $v_result = 1;
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Look if the archive exists
+ if (!is_file($this->zipname))
+ {
+
+ // ----- Do a duplicate
+ $v_result = $this->privDuplicate($p_archive_to_add->zipname);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ @rewind($this->zip_fd);
+
+ // ----- Open the archive_to_add file
+ if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
+ {
+ $this->privCloseFd();
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir_to_add = array();
+ if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ @rewind($p_archive_to_add->zip_fd);
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the files from the archive_to_add into the temporary file
+ $v_size = $v_central_dir_to_add['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_zip_temp_fd);
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the block of file headers from the archive_to_add
+ $v_size = $v_central_dir_to_add['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Merge the file comments
+ $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+
+ // ----- Calculate the size of the (new) central header
+ $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive fd
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+ @fclose($v_zip_temp_fd);
+ $this->zip_fd = null;
+
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDuplicate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDuplicate($p_archive_filename)
+ {
+ $v_result=1;
+
+ // ----- Look if the $p_archive_filename exists
+ if (!is_file($p_archive_filename))
+ {
+
+ // ----- Nothing to duplicate, so duplicate is a success.
+ $v_result = 1;
+
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ if (($v_result=$this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ return $v_result;
+ }
+
+ // ----- Open the temporary file in write mode
+ if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
+ {
+ $this->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+
+ // ----- Return
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = filesize($p_archive_filename);
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorLog()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorLog($p_error_code=0, $p_error_string='')
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclError($p_error_code, $p_error_string);
+ }
+ else {
+ $this->error_code = $p_error_code;
+ $this->error_string = $p_error_string;
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorReset()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorReset()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclErrorReset();
+ }
+ else {
+ $this->error_code = 0;
+ $this->error_string = '';
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDisableMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDisableMagicQuotes()
+ {
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ return $v_result;
+ }
+
+ // ----- Look if already done
+ if ($this->magic_quotes_status != -1) {
+ return $v_result;
+ }
+
+ // ----- Get and memorize the magic_quote value
+ $this->magic_quotes_status = @get_magic_quotes_runtime();
+
+ // ----- Disable magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ @set_magic_quotes_runtime(0);
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privSwapBackMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privSwapBackMagicQuotes()
+ {
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ return $v_result;
+ }
+
+ // ----- Look if something to do
+ if ($this->magic_quotes_status != -1) {
+ return $v_result;
+ }
+
+ // ----- Swap back magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ @set_magic_quotes_runtime($this->magic_quotes_status);
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ }
+ // End of class
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathReduction()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathReduction($p_dir)
+ {
+ $v_result = "";
+
+ // ----- Look for not empty path
+ if ($p_dir != "") {
+ // ----- Explode path by directory names
+ $v_list = explode("/", $p_dir);
+
+ // ----- Study directories from last to first
+ $v_skip = 0;
+ for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+ // ----- Look for current path
+ if ($v_list[$i] == ".") {
+ // ----- Ignore this directory
+ // Should be the first $i=0, but no check is done
+ }
+ else if ($v_list[$i] == "..") {
+ $v_skip++;
+ }
+ else if ($v_list[$i] == "") {
+ // ----- First '/' i.e. root slash
+ if ($i == 0) {
+ $v_result = "/".$v_result;
+ if ($v_skip > 0) {
+ // ----- It is an invalid path, so the path is not modified
+ // TBC
+ $v_result = $p_dir;
+ $v_skip = 0;
+ }
+ }
+ // ----- Last '/' i.e. indicates a directory
+ else if ($i == (sizeof($v_list)-1)) {
+ $v_result = $v_list[$i];
+ }
+ // ----- Double '/' inside the path
+ else {
+ // ----- Ignore only the double '//' in path,
+ // but not the first and last '/'
+ }
+ }
+ else {
+ // ----- Look for item to skip
+ if ($v_skip > 0) {
+ $v_skip--;
+ }
+ else {
+ $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
+ }
+ }
+ }
+
+ // ----- Look for skip
+ if ($v_skip > 0) {
+ while ($v_skip > 0) {
+ $v_result = '../'.$v_result;
+ $v_skip--;
+ }
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathInclusion()
+ // Description :
+ // This function indicates if the path $p_path is under the $p_dir tree. Or,
+ // said in an other way, if the file or sub-dir $p_path is inside the dir
+ // $p_dir.
+ // The function indicates also if the path is exactly the same as the dir.
+ // This function supports path with duplicated '/' like '//', but does not
+ // support '.' or '..' statements.
+ // Parameters :
+ // Return Values :
+ // 0 if $p_path is not inside directory $p_dir
+ // 1 if $p_path is inside directory $p_dir
+ // 2 if $p_path is exactly the same as $p_dir
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathInclusion($p_dir, $p_path)
+ {
+ $v_result = 1;
+
+ // ----- Look for path beginning by ./
+ if ( ($p_dir == '.')
+ || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
+ $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
+ }
+ if ( ($p_path == '.')
+ || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
+ $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
+ }
+
+ // ----- Explode dir and path by directory separator
+ $v_list_dir = explode("/", $p_dir);
+ $v_list_dir_size = sizeof($v_list_dir);
+ $v_list_path = explode("/", $p_path);
+ $v_list_path_size = sizeof($v_list_path);
+
+ // ----- Study directories paths
+ $i = 0;
+ $j = 0;
+ while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
+
+ // ----- Look for empty dir (path reduction)
+ if ($v_list_dir[$i] == '') {
+ $i++;
+ continue;
+ }
+ if ($v_list_path[$j] == '') {
+ $j++;
+ continue;
+ }
+
+ // ----- Compare the items
+ if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
+ $v_result = 0;
+ }
+
+ // ----- Next items
+ $i++;
+ $j++;
+ }
+
+ // ----- Look if everything seems to be the same
+ if ($v_result) {
+ // ----- Skip all the empty items
+ while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
+ while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
+
+ if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
+ // ----- There are exactly the same
+ $v_result = 2;
+ }
+ else if ($i < $v_list_dir_size) {
+ // ----- The path is shorter than the dir
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilCopyBlock()
+ // Description :
+ // Parameters :
+ // $p_mode : read/write compression mode
+ // 0 : src & dest normal
+ // 1 : src gzip, dest normal
+ // 2 : src normal, dest gzip
+ // 3 : src & dest gzip
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+ {
+ $v_result = 1;
+
+ if ($p_mode==0)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==1)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==2)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @fread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==3)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilRename()
+ // Description :
+ // This function tries to do a simple rename() function. If it fails, it
+ // tries to copy the $p_src file in a new $p_dest file and then unlink the
+ // first one.
+ // Parameters :
+ // $p_src : Old filename
+ // $p_dest : New filename
+ // Return Values :
+ // 1 on success, 0 on failure.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilRename($p_src, $p_dest)
+ {
+ $v_result = 1;
+
+ // ----- Try to rename the files
+ if (!@rename($p_src, $p_dest)) {
+
+ // ----- Try to copy & unlink the src
+ if (!@copy($p_src, $p_dest)) {
+ $v_result = 0;
+ }
+ else if (!@unlink($p_src)) {
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilOptionText()
+ // Description :
+ // Translate option value in text. Mainly for debug purpose.
+ // Parameters :
+ // $p_option : the option value.
+ // Return Values :
+ // The option text value.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilOptionText($p_option)
+ {
+
+ $v_list = get_defined_constants();
+ for (reset($v_list); $v_key = key($v_list); next($v_list)) {
+ $v_prefix = substr($v_key, 0, 10);
+ if (( ($v_prefix == 'PCLZIP_OPT')
+ || ($v_prefix == 'PCLZIP_CB_')
+ || ($v_prefix == 'PCLZIP_ATT'))
+ && ($v_list[$v_key] == $p_option)) {
+ return $v_key;
+ }
+ }
+
+ $v_result = 'Unknown';
+
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilTranslateWinPath()
+ // Description :
+ // Translate windows path by replacing '\' by '/' and optionally removing
+ // drive letter.
+ // Parameters :
+ // $p_path : path to translate.
+ // $p_remove_disk_letter : true | false
+ // Return Values :
+ // The path translated.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+ {
+ if (stristr(php_uname(), 'windows')) {
+ // ----- Look for potential disk letter
+ if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
+ $p_path = substr($p_path, $v_position+1);
+ }
+ // ----- Change potential windows directory separator
+ if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+ $p_path = strtr($p_path, '\\', '/');
+ }
+ }
+ return $p_path;
+ }
+ // --------------------------------------------------------------------------------
+
+
+?>
blob - /dev/null
blob + 157dd06d93f78abbd3e4e9e59ec8ca2157a26da9 (mode 644)
--- /dev/null
+++ phpinfo.php
+<?php phpinfo()?>
blob - /dev/null
blob + 67877d8e44a1dc9390168ccfbb5cde14bc0edebf (mode 644)
--- /dev/null
+++ rss.xml
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml-stylesheet type="text/xsl" href="rss.xslt" ?>
+<!--
+J'ai crée ce flux RSS a partir de l'exemple de Sébastien sauvage.
+(http://www.sebsauvage.net/comprendre/rss/creer.html)
+
+Je l'ai modifié et j'utilise (comme lui) une feuille de style xslt
+pour rendre ma page lisible.
+Ce fichier est a l'adresse http://sylvain.sab.free.fr/rss/rss.xslt
+
+Vous pouvez librement reprendre ces fichiers
+
+Si vous avez une question, n'hésitez pas a me contacter.
+-->
+<rss version="2.0">
+ <channel>
+
+ <title>Flux RSS - Sylvain.sab</title>
+ <description>Les mises à jour de Sylvain.sab par Flux RSS</description>
+ <link>http://sylvain.sab.free.fr/</link>
+ <language>fr</language>
+ <ttl>30</ttl>
+
+ <image>
+ <url>http://sylvain.sab.free.fr/img/boutons/btssylvainsab.gif</url>
+ <title>la page d'accueil</title>
+ <link>http://sylvain.sab.free.fr/</link>
+ <width>123</width>
+ <height>33</height>
+ </image>
+
+ <item><title>C'est quoi Linux ?</title>
+ <link>http://sylvain.sab.free.fr/cestquoi/gnu-linux/</link>
+ <guid isPermaLink="false">linux</guid>
+ <description>Linux est un système d'exploitation libre.</description>
+ <pubDate>Sun, 09 Sep 2007 22:00:00 GMT</pubDate></item>
+
+ <item><title>C'est quoi les logiciels libres, l'open-source ?</title>
+ <link>http://sylvain.sab.free.fr/cestquoi/libre/</link>
+ <guid isPermaLink="false">libre</guid>
+ <description>Le logiciel libre n'est soumis à aucune contrainte : vous êtes libre de le distribuer, le modifier...</description>
+ <pubDate>Sun, 09 Sep 2007 22:00:00 GMT</pubDate></item>
+
+ <item><title>Configurer Thunderbird</title>
+ <link>http://sylvain.sab.free.fr/configurer/thunderbird.php</link>
+ <guid isPermaLink="false">configurer tb</guid>
+ <description>Les règles de filtrage et deux astuces.</description>
+ <pubDate>Fri, 02 Feb 2007 23:00:00 GMT</pubDate></item>
+
+ <item><title>Qu'est-ce que l'hébergement ? C'est quoi un hébergeur ?</title>
+ <link>http://sylvain.sab.free.fr/cestquoi/web/hebergement.php</link>
+ <guid isPermaLink="false">c'est quoi l'hébergement</guid>
+ <description>Après l'explication sur les serveurs, j'ai ajouté un petit article sur les hébergeurs et l'hébergement, qui permettent de stocker ses fichiers pour les mettre à disposition en ligne.</description>
+ <pubDate>Sat, 27 Jan 2007 23:50:00 GMT</pubDate></item>
+
+ </channel>
+</rss>
blob - /dev/null
blob + 7f87028ad8f03dd8a3a1725627c1b7ded3dc6ec0 (mode 644)
--- /dev/null
+++ rss.xslt
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+J'ai crée ce fichier xslt en me basant sur celui de Sébastien Sauvage
+qui s'est lui-même inspiré de celui de CCM, qui ont eux mêmes repris celui
+d'un autre site dont je ne me rapelle plus le nom.
+
+Vous pouvez librement reprendre ce fichier.
+Cependant les CSS sont adaptés a mon site,
+il est donc probable que vous devrez les modifier.
+
+Le fichier CSS que j'utilise avec cette page est a l'adresse :
+http://sylvain.sab.free.fr/autres/css/rss.css
+
+J'utilise plusieurs autres fichiers CSS
+que je vous laisse trouver si vous les voulez.
+
+Si vous avez une question, n'hésitez pas a me contacter.
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<xsl:output method="html" version="4" encoding="iso-8859-1" indent="yes" />
+<xsl:template match="channel">
+
+<html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+<title><xsl:value-of select="title" /></title>
+
+<!--metas de contenu-->
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta http-equiv="Content-Type" content="application/rss+xml;charset=iso-8859-1" />
+
+<!--links css, rss-->
+<link rel="alternate" type="application/rss+xml" title="Sylvain.sab - Flux RSS" href="/rss/rss.xml" />
+<link rel="stylesheet" type="text/css" href="/autres/css/styledefaut.css" />
+
+<!--links aide a la navigation-->
+<link rel="start" href="/" title="Page d'accueil du site Sylvain.sab" />
+<link rel="help" title="Liste des Accesskeys de ce site" href="/apropos/accesskeys.php" />
+
+<!--CSS et favicon selon IE ou autre navigateur-->
+<!--[if !IE]><-->
+<link rel="stylesheet" type="text/css" href="/autres/css/notie.css" />
+<link rel="icon" type="image/png" href="/img/mini/favicon.png" />
+<!--><![endif]-->
+<!--[if IE]>
+<link rel="shortcut icon" type="image/x-icon" href="/img/mini/favicon.ico" />
+<link rel="stylesheet" type="text/css" href="/autres/css/styledefautie.css" />
+<![endif]-->
+
+<!--les autres balises selon les pages-->
+<link rel="stylesheet" type="text/css" href="/autres/css/rss.css" />
+
+</head>
+<body>
+
+<div id="parent">
+ <a href="{image/link}" title="{image/title}">
+ <img style="width:{image/width}px;height:{image/height}px;" src="{image/url}" />
+ </a><br /><br />
+ <strong id="titresite"><xsl:value-of select="title" /></strong><br /><br />
+ <a href="http://validator.w3.org/feed/check.cgi?url=http://sylvain.sab.free.fr/rss/rss.xml">
+ <img src="/img/valide/validrss.png" alt="[Valid RSS]" style="width:88px;height:31px;" /></a><br />
+ Cette page est au format RSS 2.0. <br />
+ Elle est conçue pour être lue par des aggrégateurs de flux RSS.
+</div>
+
+<xsl:call-template name="item" />
+<hr />
+</body>
+</html>
+</xsl:template>
+
+<xsl:template match="item" name="item">
+ <xsl:for-each select="item">
+
+ <div class="item">
+ <a href="{link}" class="nomitem"><xsl:value-of select="title" /></a>
+ <br />
+ <xsl:value-of select="description" />
+ </div>
+
+ </xsl:for-each>
+ </xsl:template>
+</xsl:stylesheet>