<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.paradoxal.org/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Blog Blog - Programmation</title>
  <link>http://www.paradoxal.org/blog/</link>
  <atom:link href="http://www.paradoxal.org/blog/feed/category/Programmation/rss2" rel="self" type="application/rss+xml"/>
  <description>Blogblog vous propose  un aide mémoire d'un développeur PHP / Mysql passionné par l'administration Linux. Seza - son autheur - vous met donc à disposition ses astuces, les mauvais moments et difficultés rencontrées mais aussi ses connaissances.
Même si ce blog s'oriente très clairement vers les lignes de code illisibles pour nombreux d'entre vous, actualité, coup de gueule et information sur les technos du moment ne seront pas absentes. Bonne visite !</description>
  <language>fr</language>
  <pubDate>Thu, 21 Aug 2008 19:06:04 +0200</pubDate>
  <copyright>licence creative commons</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>PHP : PDO et ses misères...</title>
    <link>http://www.paradoxal.org/blog/post/2008/02/23/PHP-%3A-PDO-et-ses-miseres</link>
    <guid isPermaLink="false">urn:md5:5dab55f5637f7f00dba684e3025abf9b</guid>
    <pubDate>Sat, 23 Feb 2008 12:35:00 +0100</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
            
    <description>    &lt;p&gt;Petite note rapide&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;PDO pour la nième fois m'à fait des misères ce matin. Je devrais préciser PDO + driver Mysql car je ne saurait dire lequel des deux est coupable dans l'histoire.&lt;/p&gt;


&lt;p&gt;Si PDO est récent et donc sa manipulation nouvelle. Certes c'est normal que l'on se retrouve confronter à des erreurs &quot; de débutant &quot;. Mais ce matin j'ai passé une heure à cherché le pourquoi ça marche pas.&lt;/p&gt;


&lt;p&gt;Il y a peu j'avais été confronter à une requête sql qui ne retournait rien.  Après avoir cherché dans la doc PHP. l'instruction PdoStatement-&amp;gt;closeCursor() s'avérait être la solution. Autant pour moi c'était clairement indiquer dans la doc.&lt;br /&gt;
Aujourd'hui le même BUG se présente. Un select qui ne retourne rien et bien entendu il est éxécuté après une suite de select. Si je le place en tête de liste, il fonctionne mais les suivants ne fonctionnent plus. Ce coup-ci je n'ai pas fait l'idiot et j'avait bien mis des closeCursor() après chaque requête (même celle qui lise la liste complète de résultat).&lt;/p&gt;


&lt;p&gt;Alors que faire dans ce cas&amp;nbsp;? Après plus d'une heure j'ai trouver une solution. faire un unset(pdoStatement) derrière le closeCursor() et comme par magie tout est revenu dans l'ordre.&lt;/p&gt;


&lt;p&gt;J'apprécie travailler avec PDO globalement même si certaine fonctionnalité sont abstente oou d'autre parraisse fonctionner étrangement voir certainre qui diverge complètement de la doc.  Je doit avoir que je commence un peu à fatiguer de ce genre de mauvaise surprise.&lt;/p&gt;


&lt;p&gt;Pourquoi je rale&amp;nbsp;? Parceque pendant que je cherchait une solution à ce bug j'ai remis en cause réellement l'utilisation de PDO dans mon application. et après avoir trouver la solution j'ai repris tout mon code (quelques dizaine de millier de lignes) afin de rajouter des unset() après chaque requête. J'ai maintenant la crainte qu'un nouveau bug PDO m'oblige à revoir mon architecture ou changer de driver.&lt;/p&gt;


&lt;p&gt;Résultat ma confiance en PDO diminue d'un cran et c'est bien dommage.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2008/02/23/PHP-%3A-PDO-et-ses-miseres#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2008/02/23/PHP-%3A-PDO-et-ses-miseres#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/59</wfw:commentRss>
      </item>
    
  <item>
    <title>MySql - round() - déconseillé</title>
    <link>http://www.paradoxal.org/blog/post/2007/02/25/28-mysql-rand-deconseille</link>
    <guid isPermaLink="false">urn:md5:616a6ad835acaf5764cf844ef7242ec4</guid>
    <pubDate>Sun, 25 Feb 2007 02:20:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Mysql</category>    
    <description>&lt;p&gt;J'ai découvert récemment que la fonction round() dans MySql n'était pas fiable sur les ciffres exactement entre deux entiers.&lt;/p&gt;    &lt;p&gt;Explication&amp;nbsp;: pour faire un arrondi en mysql il vient tout bonnement à l'idée d'utiliser la fonction round(). Or comme j'ai pu en faire l'expérience d'un server à l'autre cette fonction peut amener à des résultats différents pour la même requête.&lt;/p&gt;
&lt;p&gt;Dixit MySql&amp;nbsp;: &lt;q&gt;Notez que le comportement de l'opérateur ROUND(), lorsque l'argument est exactement entre deux entiers, dépend de la bibliothèque C active.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Alors que faire pour être certain d'avoir un arrondi correct&amp;nbsp;? Puisqu'en france la règle veut que lorsque qu'un chiffre est exactement entre deux entiers il soit arrondi à l'entier supérieur, j'ai fait ce petit calcul&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;Pour arrondir X à Z décimal&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;FLOOR(0.5 + POW(10, Z) * X) / POW(10, Z)&lt;/p&gt;
&lt;p&gt;Voilà cette requête renverra toujours le même résultat peu importe le serveur. =)&lt;/p&gt;
&lt;p&gt;Bonne nuit.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/02/25/28-mysql-rand-deconseille#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/02/25/28-mysql-rand-deconseille#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/26</wfw:commentRss>
      </item>
    
  <item>
    <title>Java même pas.</title>
    <link>http://www.paradoxal.org/blog/post/2007/02/05/24-java-meme-pas</link>
    <guid isPermaLink="false">urn:md5:75909839d9f5658fcb4907d2f854d44d</guid>
    <pubDate>Mon, 05 Feb 2007 08:35:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Java</category>    
    <description>&lt;p&gt;Je commence ce billet par un titre sans signification ou plutôt en langage SMS à signification multiple. Ainsi on pourrait traduire ce titre en «&amp;nbsp;Java m'aime pas&amp;nbsp;» ou en «&amp;nbsp;J'en veux même pas&amp;nbsp;» et afin d'introduire donc ce petit coup de gueule et une question vous l'aurez deviner envers Java j'ai choisi une concaténation de ces deux phrases.&lt;/p&gt;    &lt;p&gt;Java m'aime pas&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Oui il faut croire que je suis malheureux avec java. Depuis mes débuts de développeur j'ai connu l'existence de Java malgré que celui-ci m'ai jamais attiré (j'aime pas Java), je me suis bien fait une raison comme quoi Java était tellement répandu qu'il faudrait bien que je m'y mette un jour.&lt;/p&gt;
&lt;p&gt;Que pensez de Java quand votre machine virtuelle souhaite se mettre à jour, télécharge la-dite mise à jour puis elle vous inflige un magnifique &lt;q&gt;«&amp;nbsp;runtime error&amp;nbsp;!&amp;nbsp;»&lt;/q&gt; (Pas pire que Dreamweaver avec son alerte&amp;nbsp;: &lt;q&gt;«&amp;nbsp;Il n'y a pas d'erreur&amp;nbsp;»&lt;/q&gt; (un jour je vous ferai une capture d'écran c'est risible)).&lt;/p&gt;
&lt;p&gt;Comme on dit ceci peut arriver à tout le monde mais moins d'un quart d'heure plus tard alors que je me décide à utiliser QuantumDB sur Eclipse, au moment de se connecter à mon serveur MySql, un nouveau message ... &lt;q&gt;«&amp;nbsp;jdbc.com.mysql.driver.chose.truc introuvable&amp;nbsp;»&lt;/q&gt;. Heureusement j'appelle mon ami Google et un petit tutoriel plus loin viens à mon aide et me renseigne sur l'histoire. Il faut donc télécharger un driver MySql sur le site de MySql bien sur ça paraissait tellement évident dans le message d'erreur... Chose faîte je retente de me connecter&amp;nbsp;: &lt;q&gt;«&amp;nbsp;Error quelque chose caractère 48 non supporté ... blablabla&amp;nbsp;».&lt;/q&gt; Vous savez quand la sauce elle commence à montée .... Bon peu importe. Je me décide à essayer du coup la nouvelle version gratuite de Sqldeveloper offert généreusement par Oracle. Paramétrage etc... connexion ... jdbc.com.mysql.driver.chose.truc introuvable. La sauce ici présent tourne au vinaigre moutarde choux de brucelles.&lt;/p&gt;
&lt;p&gt;Pour cette première conclusion je dirai que Java c'est bien, ça permet de faire des milliers de choses différentes avec le même outils mais que ce n'est pas forcément stable. Il faut quasiment être développeur Java pour pouvoir utiliser correctement un logiciel écrit en java parfois. Bien entendu je parle en tant que non développeur Java et cette parole est donc peut être un peu dure envers ce langage.&lt;/p&gt;
&lt;p&gt;J'en veux même pas&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Oui je n'en veux pas de Java. Je trouve que Java qui à la base devrai se révélé être un outils formidable autant pour les développeur que pour les utilisateurs de part sa portabilité. On peut trouvé à Java tout de même de nombreux défaut.&lt;/p&gt;
&lt;p&gt;Le premier va de soit quand on utilise des programme écrit en Java c'est sa relative lenteur. Ce manque de performance est pour moi quelques choses de vraiment prohibitif. Peut-être devrais-je plutôt accuser les développeurs plutôt que Java lui-même dans cette histoire puisque l'on trouve parfois des logiciel performant et rapide alors ma question est la suivante&amp;nbsp;: &lt;q&gt;«&amp;nbsp;Java offre t-il au développeur les moyens d'écrire un programme performant facilement&amp;nbsp;?&amp;nbsp;»&lt;/q&gt;. Personnellement je ne le pense pas.&lt;/p&gt;
&lt;p&gt;Java ne vous aide pas. Des erreurs à la Microsoft totalement incompréhensible et qui semble être difficile à dompter, un environnement empli de dépendance qui fait qu'une classe en inclus une autre etc ... c'est beau la segmentation du code mais quand il faut inclure 4 Mo de packages pour se connecter à un compte POP (j'exagère) ça entraîne forcément des oublis de fichier. Je reprends mon exemple plus haut comme transition. Qui d'un utilisateur basique, même qualifié souhaitant utiliser un logiciel ferai la liaison entre un jdbc.com.dom.xxx.yyyy et un fichier à télécharger sur un site et comment se fait-il que ce fichier ne soit pas présent&amp;nbsp;? Comment peut-t-on compiler une application en ometant un driver&amp;nbsp;? Est-ce volontaire&amp;nbsp;? Dans ce cas pourquoi l'erreur n'est elle pas gérée correctement&amp;nbsp;?&lt;/p&gt;
&lt;p&gt;Si vous êtes développeur Java il vous parait peut être évident de comprendre ce qu'est Java et son environnement. Pour monsieur tout le monde il en est autre chose. On entends parler de J2RE, J2SE, J2EE, JAVA, JSE, JRE, JVM, machine virtuelle... qui que quoi&amp;nbsp;? C'est quoi tout ça&amp;nbsp;? Personnellement je comprends pourquoi ça plante si souvent, pourquoi c'est lent et pourquoi les développeurs eux-même peuvent faire de tels oubli. C'est embrouillant avouez.&lt;/p&gt;
&lt;p&gt;Bref il reste que de toute ces annotations, bien commune dans le monde des développeurs, une machine virtuelle qui se veut être universelle se veut aussi être perdue dans tous ces termes technique qui ne devraient faire partie que du langage des développeurs et non pas de celui des utilisateurs communs. Un utilisateur qui souhaite télécharger Java sur sont poste devrai télécharger Java et non pas quelque chose appeler JRE.&lt;/p&gt;
&lt;p&gt;Maintenant que Java est passé dans le monde du libre. De nouveau code vont arriver d'un peu partout sûrement et vont encore accroître cette énorme banque de donnée de codes et je fait un lien discret avec beaucoup d'autre communauté qui ont énormément de mal à organiser et à contrôler l'évolution de leur projet. Que va devenir Java dans les prochains temps alors que des concurrents sérieux comme PHP, Ruby, Python et d'autre sont là prêt à prendre une bonne place à Java. Surtout que l'on peut trouver des problème similaires dans ces derniers langages à moindre échelle pour l'instant.&lt;/p&gt;
&lt;p&gt;Voici mon point de vu à propos de Java aujourd'hui. Java est un trousse à outils de secours majoritairement servant au développeur qui ne sait pas quel langage serait le plus efficace sur un thème précis et se retourne sur Java sachant pertinemment que ce n'est pas la meilleures solution mais que ça devrait marcher. Java vie aujourd'hui grâce au SII et entreprises notamment qui utilise cette technologie depuis bien longtemps quand à leur début d'autres technologies n'existaient pas et n'étaient pas là pour se substitué à Java et qu'il est moins onéreux de maintenir un ensemble existant tant qu'il peut évoluer plutôt que de migrer vers une nouvelle plate-forme de meilleure qualité.&lt;/p&gt;
&lt;p&gt;Est ce qu'aujourd'hui il est de bon ton d'apprendre Java ou vaut mieux apprendre plusieurs autres langages peut être moins complet mais plus facile à cerner&amp;nbsp;? C'est bien une question à laquelle je n'est pas de réponse.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/02/05/24-java-meme-pas#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/02/05/24-java-meme-pas#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/22</wfw:commentRss>
      </item>
    
  <item>
    <title>Etes-vous un pro du web ?</title>
    <link>http://www.paradoxal.org/blog/post/2007/01/22/21-etes-vous-un-pro-du-web</link>
    <guid isPermaLink="false">urn:md5:629934ce77509126d4a25a41bd56fe67</guid>
    <pubDate>Mon, 22 Jan 2007 05:08:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>CSS</category><category>Javascript</category><category>PHP</category><category>XHTML</category>    
    <description>&lt;p&gt;Alsacréations nous offre une série de Quiz pour tester ses connaissances sur l'univers de l'internet et du développement des sites. Serez vous de taille&amp;nbsp;?&lt;/p&gt;    &lt;p&gt;Rendez-vous simplement sur &lt;a title=&quot;Quiz Alsacreations&quot; href=&quot;http://blog.alsacreations.com/2007/01/21/326-mesdames-et-messieurs-les-quiz&quot; hreflang=&quot;fr&quot;&gt;cette page&lt;/a&gt; et voyez par vous même&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Je vous communique mes résultats ci-dessous, je vois que j'ai encore du progret à faire&amp;nbsp;! (On reconais quand même le développeur PHP =p)&lt;/p&gt;
&lt;p&gt;Quiz N°1&amp;nbsp;: XHTML débutant Total&amp;nbsp;: 10 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 112 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°2&amp;nbsp;: XHTML moyen Total&amp;nbsp;: 7 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 195 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°3&amp;nbsp;: XHTML difficile Total&amp;nbsp;: 8 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 201 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°4&amp;nbsp;: CSS débutant Total&amp;nbsp;: 10 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 122 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°5&amp;nbsp;: CSS moyen Total&amp;nbsp;: 8 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 290 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°6&amp;nbsp;: CSS difficile Total&amp;nbsp;: 5 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 570 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°7&amp;nbsp;: JS / DOM débutant Total&amp;nbsp;: 9 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 181 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°8&amp;nbsp;: JS / DOM moyen Total&amp;nbsp;: 7 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 215 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°9&amp;nbsp;: JS / DOM difficile Total&amp;nbsp;: 4 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 260 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°10&amp;nbsp;: Accessibilité Total&amp;nbsp;: 8 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 288 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°11&amp;nbsp;: PHP facile Total&amp;nbsp;: 10 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 143 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°12&amp;nbsp;: PHP moyen Total&amp;nbsp;: 10 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 179 secondes.&lt;/p&gt;
&lt;p&gt;Quiz N°13&amp;nbsp;: PHP difficile Total&amp;nbsp;: 10 / 10 Note&amp;nbsp;: Vous avez répondu au quiz en 234 secondes.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Backup de votre site internet</title>
    <link>http://www.paradoxal.org/blog/post/2007/01/13/18-backup-de-votre-site-internet</link>
    <guid isPermaLink="false">urn:md5:c293cde87839544d844d5768f3d64ffa</guid>
    <pubDate>Sat, 13 Jan 2007 17:30:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Linux</category><category>Mysql</category><category>Sécurité</category>    
    <description>&lt;p&gt;La procédure de sauvegarde est bien souvent oubliée de la pluspart des utilisateurs jusqu'à la catastrophe. Une mauvaise manipulation en shell et plus de site ou un mauvais clic dans phpmyadmin et plus de base. Voici un petit script pour créer une sauvegarde très simple.&lt;/p&gt;    &lt;p&gt;Bien des sites proposent des méthodes de backup avec l'utilitaire rsync mais trop souvent quand on cherche des documentations, la méthode de backup présentée est complexe puisqu'elle se fait de serveur à serveur. Personnellement je n'ai pas 36 PCs à la maison alors toutes ces méthodes ne peuvent me servir. Par contre j'ai deux disques dur sur mon serveur et ceci peut déjà servir pour palier la casse matériel d'un des disques. Vous pouvez aussi utiliser ce petit script si vous n'avez qu'un seul disque. Ceci vous protégera des mauvaises mapulations sur votre site ou votre base de données.&lt;/p&gt;
&lt;p&gt;Voici le script que j'utilise&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;pre&gt;#!/bin/sh
# date d'aujourd'hui
TODAY=$(date +%Y%m%d)
# date de la plus ancienne sauvegarde à supprimer
LASTWEEK=$(date --date '1 week ago' +%Y%m%d)
# dossier qui contiendra les sauvegardes
SAUV=/home/backup/
# dossier dans lequel est contenu le site
SITE=dossier_du_site
# adresse complete
DIR=/home/${SITE}
# fait une copie du dossier qui contient le site vers le dossier de sauvegarde
rsync -a --delete ${DIR} ${SAUV}
# compresse la copie de sauvegarde avec la date d'aujourd'hui
tar -czf ${SAUV}${SITE}_${TODAY}.tar.gz ${SAUV}${SITE}
# ajoute les droit de lecture necessaire
chown user:user ${SAUV}${SITE}_${TODAY}.tar.gz
chmod 400 ${SAUV}${SITE}_${TODAY}.tar.gz
# supprime la sauvegarde du site datant d'une semaine
# fonctionnement similaire à log rotate
if [ -f ${SAUV}${SITE}_${LASTWEEK}.tar.gz ]
then
rm -f ${SAUV}${SITE}_${LASTWEEK}.tar.gz
fi
# login de l'utilisateur de la base de données
DBU=user
# mot de passe de l'utilisateur de la base de données
DBP=password
#base de donnée à sauvegarder
#BASE=ma_base
# option du backup (tout est sur une seule ligne)
DBOPTIONS=&quot;--skip-opt --compatible=mysql40 --add-drop-table --add-locks
--create-options --quick --lock-tables --set-charset --disable-keys -c&quot;
# backup (dump) de la base de donnée vers un fichier dans le dossier de sauvgarde
mysqldump --user=${DBU} --password=${DBP} ${DBOPTIONS} ${BASE} &amp;gt; ${BASE}_${TODAY}.sql
# compresse le fichier de sauvegarde des données
gzip ${SAUV}${BASE}_${TODAY}.sql
# donne les droits d'utilisation souhaités au fichier
chown user:user ${SAUV}${BASE}_${TODAY}.sql.gz
chmod 400 ${SAUV}${BASE}_${TODAY}.sql.gz
# comme le dossier du site fait une rotation des sauvegarde sur une semaine.
if [ -f ${SAUV}${BASE}_${LASTWEEK}.sql.gz ]
then
rm -f ${SAUV}${BASE}_${LASTWEEK}.sql.gz
fi
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Il ne vous reste plus qu'à enregistrer tout ceci dans un fichier et lui fournir les droits d'éxécution nécessaire.&lt;/p&gt;
&lt;p&gt;Pour automatiser votre sauvegarde (c'est le but), ajoutez une ligne dans votre crontab pour lancer ce fichier tous les jours à 4H du matin par exemple.&lt;/p&gt;
&lt;p&gt;Je pense que le script est assez bien commenté pour que vous puissiez le modifier vous même.&lt;/p&gt;
&lt;p&gt;Pourquoi utiliser rsync plutot que l'utilitaire cp&amp;nbsp;? L'une ou l'autre méthode sont identique lors de la première sauvegarde mais différente pour les suivantes. Rsync lors des sauvegardes suivantes se basera sur la sauvegarde déjà faîte et n'appliquera que les modifications qui ont été produites sur le dossier source depuis, ce qui est beaucoup plus efficace.&lt;/p&gt;
&lt;p&gt;J'aime cette méthode car j'ai une archive journalière pendant une semaine de mon site ce qui me permet de revenir plusieurs jours en arrière en cas de problème et j'ai un dossier complet du site qui n'est pas compressé. Ce qui permet de gagner beaucoup de temps quand on souhaite récupérer un seul fichier ou parfois un ligne de code dans un fichier. En ce qui concerne le dump mysql j'ai mis toute les options du raccourcis –opt sauf l'insertion étendue car je préfère avoir un insert par ligne dans une table. Et surtout l'avantage de pouvoir laisser un dump beaucoup plus lisible si vous souhaitez le parcourir pour récupérer un enregistrement précis. D'autant plus que j'ai eu des soucis avec les insertions étendues avec des tables très très longues mais c'est au détriments des performances. Si vous préférez une restauration performante changer les options par –opt.&lt;/p&gt;
&lt;p&gt;Pour ceux qui souhaite restaurer rapidement leur sauvegarde je ferais à la demande le script de restauration de la dernière sauvegarde. Je vous conseille de télécharger vos sauvegardes sur un autre poste de temps en temps disons une fois par semaine pour garder vos sauvegardes à l'extérieur du serveur au cas ou votre serveur complet planterai.&lt;/p&gt;
&lt;p&gt;Voilà faîtes en bon usage. Pour plus de détails les commentaires sont là.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/01/13/18-backup-de-votre-site-internet#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/01/13/18-backup-de-votre-site-internet#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/16</wfw:commentRss>
      </item>
    
  <item>
    <title>Les protocoles réseaux ralentissent la communication</title>
    <link>http://www.paradoxal.org/blog/post/2007/01/11/17-les-protocoles-reseaux-ralentissent-la-communication</link>
    <guid isPermaLink="false">urn:md5:c02f7bb6822343743283cba5ad5e5553</guid>
    <pubDate>Thu, 11 Jan 2007 22:04:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Mysql</category><category>PHP</category>    
    <description>&lt;p&gt;Des protocoles réseaux nous en connaissons tous, HTTP, POP, IMAP, FTP, ETHERNET pour ne cité que ceux là. Mais savez vous qu'ils sont la cause de la lenteur de la pluspart de vos services sur internet&amp;nbsp;?&lt;/p&gt;    &lt;p&gt;C'est un peu un coup de gueule car depuis maintenant une année je me spécialise dans la performance de mes applications PHP autant en terme de rapidité d'éxécution qu'en consomation de RAM ou de CPU. Parfois je me demande à quoi peuvent servir tous ces efforts quand tous ceux-çi se retrouvent ruinés par un réseau trop lent.&lt;/p&gt;
&lt;p&gt;Aujourd'hui j'en ai un exemple assez flagrant. Souvent pour ceux qui font &lt;q&gt;runner&lt;/q&gt; leur serveur de base de données sur leur machine personnelle ou professionnelle, ou qui ont tout simplement un trafic assez fort pour causer des ralentissements sur leur machine ont peut-être déjà rencontrer cet exemple. Aujourd'hui j'ai eu donc un tranfert de table à faire entre mes serveurs MySql. Les deux tables n'étant pas constituer de la même manière et des opérations sur les enregistrements étaient nécessaire pour les rendrent conformes au nouveau format. J'ai donc requis un petit script PHP pour effectué l'export / import.&lt;/p&gt;
&lt;p&gt;Je sais déjà que&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faire un select de mes enregistrements.&lt;/li&gt;
&lt;li&gt;Boucle while pour les traiter un par un.&lt;/li&gt;
&lt;li&gt;Enregistrer les requêtes d'insertion pour la nouvelle table dans un fichier (comme un dump de sauvegarde).&lt;/li&gt;
&lt;li&gt;Compresser ce fichier.&lt;/li&gt;
&lt;li&gt;L'envoyer sur le serveur MySql hébergeant la nouvelle table.&lt;/li&gt;
&lt;li&gt;Le décompresser.&lt;/li&gt;
&lt;li&gt;Taper une ligne de commande pour lancer les insertions contenues dans le fichier.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sera plus rapide que faire&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un select des enregistrement.&lt;/li&gt;
&lt;li&gt;Une boucle while pour les traiter un par un et les insérer directement dans la nouvelle table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Déjà ce constat peut paraître étonnant, je décide de savoir dans qu'elle proportion va s'étendre cette différence.Voici les données de départ&amp;nbsp;: 1,7 million d'enregistrements à déplacer et un serveur MySql bi-Xeon double coeur à disposition qui héberge la nouvelle table.&lt;/p&gt;
&lt;p&gt;Maintenant les résultats tant attendu&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;La première méthode à durée 12 minutes, 6 pour l'export, 5 pour la compression / décompression et le tranfert de serveur et 100 % de CPU utiliser pendant la minute de réinsertion dans la nouvelle table. La seconde méthode à pris un peu plus de deux heures en consomant durant ces deux heures 10 % de CPU sur le serveur hébergeant la nouvelle table.&lt;/p&gt;
&lt;p&gt;Il faut savoir que la seconde méthode peut s'avérer utile si l'on souhaite faire un transfert peu important, étallé dans le temps en ne saturant pas la machine de destination pendant le transfert. Mais en ce qui me concerne et ce qui me révolte pas mal c'est que dans la première méthode faire l'abstraction du réseaux (encapsulation Mysql de la requête, enscapsulation ethernet, dialogue entre serveur etc...) montre avec évidence combien les protocoles réseaux sont consomateurs de temps. Alors avant d'hurler au fait que votre serveur Mysql distant est trop lent, de crier sur Apache qui ne serait pas assez rapide. Sachez que ces logiciels sont très performant et que ces performances ne sont que rarement observées car les protocoles réseaux les freinent en permanence.&lt;/p&gt;
&lt;p&gt;Si certains souhaitent apporter des solutions sur les goulots d'étranglement de la seconde méthode, sachez que la connexion au serveur Mysql hébergeant la nouvelle table était permanante sinon les performances se seraient encore plus écroulées je l'imagine.&lt;/p&gt;
&lt;p&gt;Comment remédier à tout ça je n'ai bien évidemment pas la réponse. J'espère que certains relativiseront un peu leur critique envers certain logiciel (plus précisément serveurs) s'ils ont des problèmes de déliverabilité et que ça fait aussi du bien de critiquer un peu, j'en avais envie ce soir. Alors flûte le réseau hein =)&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2007/01/11/17-les-protocoles-reseaux-ralentissent-la-communication#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2007/01/11/17-les-protocoles-reseaux-ralentissent-la-communication#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/15</wfw:commentRss>
      </item>
    
  <item>
    <title>Dotclear et Coloration syntaxique suite</title>
    <link>http://www.paradoxal.org/blog/post/2006/11/02/12-dotclear-et-coloration-syntaxique-suite</link>
    <guid isPermaLink="false">urn:md5:1b0fbc54223a98cdc0cfd185f5090a3b</guid>
    <pubDate>Thu, 02 Nov 2006 02:49:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Dotclear</category><category>PHP</category>    
    <description>&lt;p&gt;En me rendant compte de ce que donnait le code produit pour la colorisation syntaxique dans les flux rss et atom; un espèce de charabiat &lt;q&gt;&amp;lt;pre&amp;gt;[php]@?php require $code_php_lisible; php?@&amp;lt;pre&amp;gt;&lt;/q&gt;; je me suis décidé à remanié l'ensemble.&lt;/p&gt;    &lt;p&gt;J'ai donc réfléchis et entrepris de refait ce qui venais d'être fait dans le but de produire un code agréable à lire dans les flux avec le même résultat visuel. Et tant qu'à faire simple à écrire pour le blog.&lt;/p&gt;
&lt;p&gt;Pour ceux qui utilise le mode wiki pour écrire leur post ce n'est pas la peine de poursuivre, la modification impose que l'on écrive soit même ses balises &lt;q&gt;&amp;lt;pre&amp;gt;&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;Pourquoi écrire :&lt;/p&gt;
&lt;pre&gt;[xml]&amp;lt;pre&amp;gt;[php]@?php .... php?@&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Alors qu'un code ressemblant respectivement à ceci serait tellement plus élégant :&lt;/p&gt;
&lt;pre&gt;[xml]&amp;lt;pre class=&quot;colorize_php&quot;&amp;gt;[php] .... [/php]&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Qu'en pensez vous ?&lt;/p&gt;
&lt;p&gt;J'ai donc refais la même manipulation que pour le post précédent pour le fichier &lt;q&gt;ecrire/tools/syntaxhl/geshi/php.php&lt;/q&gt; en remplaçant toute mes entrée &lt;q&gt;@?php&lt;/q&gt; et &lt;q&gt;php?@&lt;/q&gt; par &lt;q&gt;[php]&lt;/q&gt; et &lt;q&gt;[/php]&lt;/q&gt;. Voilà qui sera lisible, plus facile à écrire et compréhensible facilement dans un flux.&lt;/p&gt;
&lt;p&gt;Ne nous arrêtons pas en si bon chemin. Pour faire simple j'ai changer la fonction highlight dans le fichier &lt;q&gt;ecrire/tools/syntaxhl/functions.php&lt;/q&gt; par celle-ci:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
function highlight($text)
{
// Including the GeSHi library.
include_once(dirname(__FILE__).'/geshi.php');
// Generate list of supported languages.
$language_list = array('');
if (!@$dh = opendir(dirname(__FILE__).'/geshi')) {
return $text; // Could not find rules files.
}
while (($file = readdir($dh)) !== false) {
if (filetype(dirname(__FILE__).'/geshi/'.$file) == 'file') {
$language_list[] = preg_replace('/([a-z]+)\.php/i', '\\1', $file);
}
}
closedir($dh);
// Getting the number of different PHP snipset to parse in $text
$matches = array();
$match_count = preg_match_all('#&amp;lt;pre class=&quot;colorize_([a-z]*)&quot;&amp;gt;(.*?)&amp;lt;/pre&amp;gt;#si', $text, $matches);
// For each match, parse.
for ($i = 0; $i &amp;lt; $match_count; $i++) {
// Checking requested language.
$language = $matches[1][$i];
if (!array_search($language, $language_list) || !$language) {
return $text; // Language not supported.
}
// Initialization.
$before_replace = $matches[2][$i];
$after_replace = $matches[2][$i];
$str_to_match = '&amp;lt;pre class=&quot;colorize_'.$language.'&quot;&amp;gt;'.$before_replace .'&amp;lt;/pre&amp;gt;';
// Converting HTML encoded characters back...
// We can't use html_entity_decode() because it's only available in PHP &amp;gt;= 4.3.0
$after_replace = str_replace('&amp;lt;', '&amp;lt;', $after_replace);
$after_replace = str_replace('&amp;gt;', '&amp;gt;', $after_replace);
$after_replace = str_replace('&amp;amp;', '&amp;amp;', $after_replace);
$after_replace = str_replace('&quot;', '&quot;', $after_replace);
// Using the GeSHi library to parse the code.
$geshi =&amp;amp; new GeSHi($after_replace, $language);
$geshi-&amp;gt;enable_strict_mode();
$geshi-&amp;gt;set_url_for_keyword_group(3, '');
$after_replace = $geshi-&amp;gt;parse_code();
// Replacement.
$replacement = $after_replace;
$text = str_replace($str_to_match, $replacement, $text);
}
return $text;
}&lt;/pre&gt;
&lt;p&gt;Le tour est joué ! C'est valable pour les autres langages aussi.&lt;/p&gt;
&lt;p&gt;C'est tout de même plus digne d'un bon programmeur et plus respectueux de nos lecteurs !&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2006/11/02/12-dotclear-et-coloration-syntaxique-suite#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2006/11/02/12-dotclear-et-coloration-syntaxique-suite#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/3</wfw:commentRss>
      </item>
    
  <item>
    <title>Dotclear et Coloration syntaxique</title>
    <link>http://www.paradoxal.org/blog/post/2006/11/01/11-dotclear-et-coloration-syntaxique</link>
    <guid isPermaLink="false">urn:md5:3678d5ad6f7826d95ee6f92c059dc99a</guid>
    <pubDate>Wed, 01 Nov 2006 20:45:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Dotclear</category><category>PHP</category>    
    <description>&lt;p&gt;Comment ajouter un peu de couleur pour les codeurs.&lt;/p&gt;    &lt;p&gt;Suite à mon dernier post j'ai recherché un colorisateur syntaxique pour enjolivé la présentation de ce cher petit blog. Un &lt;a href=&quot;http://www.mandor.net/2006/01/26/5-plugin-de-coloration-syntaxique&quot; hreflang=&quot;fr&quot;&gt;plugins&lt;/a&gt; existe pour dotclear magnifique donc&amp;nbsp;! Mais celui-ci me pose un problème très rapidement. Il faut absolument mettre l'ouverture et la fermeture de code php pour qu'il colorise ce fameux langage.&lt;/p&gt;
&lt;p&gt;Après une petite recherche googléenne, j'ai trouvé ce &lt;a href=&quot;http://www.vivihome.net/index.php/2006/09/09/14--dotclear-colorisation-syntaxique&quot; hreflang=&quot;fr&quot;&gt;blog&lt;/a&gt; qui parle de ce problème et d'autres.&lt;/p&gt;
&lt;p&gt;J'ai donc décider d'améliorer tout ça&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;Voici la méthode à suivre pour corrigé l'affichage des &lt;q&gt;[&amp;nbsp;]&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;il faut modifier le fichier &lt;q&gt;ecrire/tools/syntaxhl/functions.php&lt;/q&gt; ligne 33&lt;/p&gt;
&lt;pre&gt;[php]$language = preg_replace('/.*[(.*)].*/si', '\\1', $matches[1][$i]);&lt;/pre&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;pre&gt;[php]
$language = preg_replace('/.*[([a-z]*)].*/si', '\\1', $matches[1][$i]);
&lt;/pre&gt;
&lt;p&gt;Ensuite pour pouvoir coloriser le php sans avoir à mettre &lt;q&gt;&amp;lt;?php&lt;/q&gt; et &lt;q&gt;?&amp;gt;&lt;/q&gt; il faut aujouter dans le fichier &lt;q&gt;ecrire/tools/syntaxhl/geshi/php.php&lt;/q&gt; aux lignes suivantes&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;ligne 261&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;[php]
4 =&amp;gt; array(
'@?php', 'php?@'
)
&lt;/pre&gt;
&lt;p&gt;ne pas oublier la virgule dernière la paranthèse fermente ligne 260&lt;/p&gt;
&lt;p&gt;ligne 273&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
4 =&amp;gt; false
&lt;/pre&gt;
&lt;p&gt;ne pas oublier la virgule dernière false pour la ligne précédante&lt;/p&gt;
&lt;p&gt;ligne 280&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
4 =&amp;gt; 'display: none;'
&lt;/pre&gt;
&lt;p&gt;pensez toujours à la virgule...&lt;/p&gt;
&lt;p&gt;ligne 314&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
4 =&amp;gt; ''
&lt;/pre&gt;
&lt;p&gt;et notre virgule favorite&lt;/p&gt;
&lt;p&gt;ligne 345&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
4 =&amp;gt; array(
'@?php' =&amp;gt; 'php?@'
)
&lt;/pre&gt;
&lt;p&gt;sans oublier vous savez qui.&lt;/p&gt;
&lt;p&gt;et finalement ligne 354&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;colorize_php&quot;&gt;[php]
4 =&amp;gt; true
&lt;/pre&gt;
&lt;p&gt;et la dernière petite chérie juste au dessus.&lt;/p&gt;
&lt;p&gt;Voilà c'est fait&amp;nbsp;! mais qu'est ce qu'on à fait&amp;nbsp;? On a ajouter à php (pour la colorisation syntaxique !) un nouveau code d'ouverture &lt;q&gt;@?php&lt;/q&gt; et un nouveau code de fermeture &lt;q&gt;php?@&lt;/q&gt; qui ont la particularité d'avoir un style appliqué à display:none.&lt;/p&gt;
&lt;p&gt;Ainsi vous pourrez indiquer au colorisateur syntaxique de coloriser façon php tout ce qui se trouve entre &lt;q&gt;@?php&lt;/q&gt; et &lt;q&gt;php?@&lt;/q&gt; sans que ces derniers n'apparaissent à l'écran. Magnifique non&amp;nbsp;?&lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2006/11/01/11-dotclear-et-coloration-syntaxique#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2006/11/01/11-dotclear-et-coloration-syntaxique#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/10</wfw:commentRss>
      </item>
    
  <item>
    <title>Installation de PhpSecInfo</title>
    <link>http://www.paradoxal.org/blog/post/2006/11/01/10-installation-de-phpsecinfo</link>
    <guid isPermaLink="false">urn:md5:98b1646e542d7429f0f4228f1be39925</guid>
    <pubDate>Wed, 01 Nov 2006 16:09:00 +0000</pubDate>
    <dc:creator>Seza</dc:creator>
        <category>Programmation</category>
        <category>Linux</category><category>PHP</category><category>Sécurité</category>    
    <description>&lt;p&gt;Comment savoir si son Php est sécurisé&amp;nbsp;? PhpSecInfo vous indique les points cruciaux avant de vous plonger dans la lecture du php.ini.&lt;/p&gt;    &lt;p&gt;Tout comme bon développeur php et développeur en général la sécurité est un point important qu'il ne faux pas négliger. Internet étant en première ligne de mire des tentative de piratage, une question revient relativement très souvent donc&amp;nbsp;: &lt;q&gt;Comment être certain d'avoir une application php sécurisée ?&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;La base de la sécurité commence par php lui même. Bien que beaucoup de développeur connaisse bien le fichier de configuration php.ini et le configure sans problème in n'empêche qu'il peuvent passé à côté de certaine erreur de configuration, le débutant aura tout aussi besoin qu'on lui indique quel sont les points important à vérifier, tout autant que pour l'administrateur serveur qui ne connais pas forcément php mais installe celui ci pour le besoin de ses utilisateurs.&lt;/p&gt;
&lt;p&gt;Avant de se plonger dans la sécurité avancée PhpSecInfo peux déjà vous orienté sur les premier point à vérifier en procédant à un check de la configuration php et en vous affichant à la manière du phpinfo(); classique que tout le monde connait les points critiques de votre configuration.&lt;/p&gt;
&lt;p&gt;Commençont donc par le début avec l'installation de PhpSecInfo.&lt;/p&gt;
&lt;p&gt;1° Télécharger la librairie &lt;a title=&quot;PhpSecInfo&quot; href=&quot;http://phpsec.org/projects/phpsecinfo/&quot; hreflang=&quot;fr&quot;&gt;PhpSecInfo&lt;/a&gt; sur votre serveur à la racine de votre site web par exemple.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[root@machine www $] wget http://phpsec.org/projects/phpsecinfo/phpsecinfo.zip&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;2° Une fois l'archive ZIP récupérée, décompresser là&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[root@machine www $] unzip phpsecinfo.zip&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;L'archive s'est décompresser dans un dossier nommé phpsecinfo-datedelaversion. Chez moi &lt;q&gt;phpsecinfo-20061030&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;3° Maintenant que notre librairie toute neuve est installer afin de simplifier sont accès et sont adressage sur le serveur, je place un lien symbolique phpsecinfo pointant sur le véritable dossier de la librairie. Ceci est très utile pour changer de version ultérieurement sans avoir a refaire l'adressage des script utilisant cette librairie.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[root@machine www $] ln -s phpsecinfo phpsecinfo-20061030&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;4° Maintenant il faut doner les bons droits à tous ces fichiers. Repéré l'utilisateur du site ici &lt;q&gt;user&lt;/q&gt; et son groupe (généralement apache) ici &lt;q&gt;www-data&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;[root@machine www $] chown -R user:www-data phpsecinfo *&lt;/code&gt;
&lt;p&gt;voilà vous êtes un génie, phpsecinfo devrait fonctionner sur votre site. Pour l'appeler rien de plus simple appeler directement depuis votre navigateur l'adresse &lt;q&gt;http://www.monsite.org/phpsecinfo/index.php&lt;/q&gt;. Et vous devriez voir le résultat.&lt;/p&gt;
&lt;p&gt;C'est la manière la plus simple de l'appeler. vous pouvez aussi procédé dans un de vos scripts&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;[php]&lt;?php require_once $racine_de_votre_site.'phpsecinfo/PhpSecInfo/PhpSecInfo.php'; ?&gt;&lt;/pre&gt;
&lt;p&gt;Néanmoins j'ai dis tout à l'heure &lt;q&gt;devrait fonctionner&lt;/q&gt; car chez moi par exemple j'ai eu un problème dans l'inclusion des fichiers en esayant d'appeler la première fois la librairie. En effet dans les fichiers de phpsecinfo rien n'à été prévue (du moins pas utiliser) pour retrouer le bon chemin de ses propres fichiers.&lt;/p&gt;
&lt;p&gt;Dans tout les fichiers se trouvant dans le répertoire et les sous répertoire de &lt;q&gt;phpsecinfo/PhpSecInfo/Test&lt;/q&gt; on peut trouver ligne 12 ou 13 une inclusion de fichier. J'ai utliser une variable interne à phpsecinfo pour résoudre se problème de ne pas trop polluer le code source de la librairie.&lt;/p&gt;
&lt;p&gt;Voici ce qu'il faut faire dans les fichier suivant&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Cgi.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Core.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Curl.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Session.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Cgi.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test_Cgi.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/CGI/force_redirect.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/allow_url_fopen.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/display_errors.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/expose_php.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/file_uploads.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/gid.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/magic_quotes_gpc.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/memory_limit.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/open_basedir.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/post_max_size.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/register_globals.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/uid.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/upload_max_filesize.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Core/upload_tmp_dir.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Curl/file_support.php
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Session/use_trans_sid.php
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;remplacer la ligne&lt;/p&gt;
&lt;pre&gt;[php] require_once('PhpSecInfo/Test/un_fichier_exemple.php');&lt;/pre&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;pre&gt;[php] require_once($test_root-&amp;gt;path.'/un_fichier_exemple.php');&lt;/pre&gt;
&lt;p&gt;Et une petite variante dans le fichier&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/phpsecinfo/PhpSecInfo/Test/Test.php
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;remplacer la ligne&lt;/p&gt;
&lt;pre&gt;[php] require_once('PhpSecInfo/PhpSecInfo.php');&lt;/pre&gt;
&lt;p&gt;par&lt;/p&gt;
&lt;pre&gt;[php] require_once($test_root-&amp;gt;path.'/../PhpSecInfo.php');&lt;/pre&gt;
&lt;p&gt;Voilà ceci m'a fait perdre 10 minutes de temps mais à résolu le problème. J'ai pu vérifier ma configuration php et voir un petit trou de sécurité :)&lt;/p&gt;
&lt;p&gt;Il est à noté toutefois que si php peut s'avéré vulnérable, il est le plus souvent vulnérable par que le codeur laisse dans son code source une porte d'entrée vers une faille du système au pirate. Sécurisé php est un bon point mais pas une finalité en soit. Ce n'est pas parce que votre configuration php est propre que vous ne serez pas attaquer. Vous devez sécurisé aussi votre code source vérifié et testé en pirate votre propre site à la recherche de faille dans les uploads de fichier, vos sessions, vos inclusions de fichiers, etc...&lt;/p&gt;
&lt;p&gt;De nombreux outils qui s'intègrent dans les navigateur existe pour observer les cookies, les données passé en post etc... vous devez les utilisers pour vérifier que rien de votre site n'est transparent et peut laisser des informations au pirate car lui aussi utilise ces outils.&lt;/p&gt;
&lt;p&gt;Par expérience on a trop vite fait de détourner une url, de fausser une session ou de modifier un cookie.&lt;/p&gt;
&lt;p&gt;Récemment j'ai encore vu un site posé un cookie du type administrateur = 0. que se passerait-il si je mettais 1 à la place... Bien sur en honnête gens je préviens le webmaster concerner. Faîtes-en d'autant avec votre site, regarder le d'un oeil critique et dormer conscience tranquille.&lt;/p&gt;
&lt;p&gt;@ bientôt.&lt;/p&gt;
&lt;p&gt;&lt;a lang=&quot;fr&quot; title=&quot;phpsecinfo - le site&quot; href=&quot;http://phpsec.org/projects/phpsecinfo/&quot;&gt;phpsecinfo - le site&lt;/a&gt;, &lt;a lang=&quot;fr&quot; title=&quot;phpsecinfo - la documentation&quot; href=&quot;http://phpsec.org/projects/phpsecinfo/docs/&quot;&gt;phpsecinfo - la documentation&lt;/a&gt; &lt;/p&gt;</description>
    
    
    
          <comments>http://www.paradoxal.org/blog/post/2006/11/01/10-installation-de-phpsecinfo#comment-form</comments>
      <wfw:comment>http://www.paradoxal.org/blog/post/2006/11/01/10-installation-de-phpsecinfo#comment-form</wfw:comment>
      <wfw:commentRss>http://www.paradoxal.org/blog/feed/rss2/comments/9</wfw:commentRss>
      </item>
    
</channel>
</rss>