Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

MadMatt

parce qu'ensemble, c'est moins plus dur que tout seul

Forcer l'actualisation d'une image

Si vous développez des captcha, graphiques en tous genres etc... en PHP (ou autre langage serveur), vous avez peut-être été confronté à ce problème : l'image précédemment générée reste en cache dans le navigateur et si le script génère une image différente, celle-ci n'est pas réactualisée.

Voici une solution, tordue mais simple, quand vous ne voulez pas (ou pouvez pas) toucher aux Headers de l'image : rendre le nom de l'image aléatoire.
Comment ? En insérant simplement un nombre aléatoire dans l'url en paramètre GET, comme ça ça n'influe sur rien d'autre que l'appel à l'image. Voici un exemple tout simple :

<img src="histogramme.php?random=<?php echo rand(); ?>" alt="Chargement de l'histogramme..." />

T_PAAMAYIM_NEKUDOTAYIM

Ahaha, voilà une erreur PHP assez sympa :

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting ',' or ')' in xxx on line 20

Apparemment, ça serait une histoire de "::"... J'en sais pas plus j'ai fait une erreur de frappe et je crois qu'il n'a pas aimé mon code PHP.

Disparition de variables de session PHP après une redirection ?
Aujourd'hui, je viens d'apprendre quelque chose que j'ai trouvé vraiment intéressant, et surtout piégeur !

Je développe actuellement un site web tout simple avec stockage de la connexion des utilisateurs en variable de session. Seulement, j'ai remarqué des phénomènes limites paranormaux : de temps en temps, après une redirection avec la fonction PHP header(), on se retrouvait déconnecté sans raison. Et impossible de reproduire le bug à coup sur, et surtout : ça n'arrivait jamais en local.

La raison est assez simple, mais tordue (merci aux commentaires dans les fonctions PHP du site php.net !) :
Si le script A ouvre une session (pour voir si l'internaute est connecté), puis redirige avec header() vers le script B, et que le script B ouvre lui aussi rouvre la session pour voir si l'utilisateur est connecté, il peut y avoir un problème.

En effet, normalement la session PHP est refermée à la fin du script. Donc quand A redirige vers B, on fait die() (ou exit) dans A et A termine son exécution.
Mais le serveur peut être tellement rapide que le script B est déjà appelé par le navigateur client
avant même que A ait fini son exécution, et donc le serveur exécute le script B qui demande d'ouvrir la session. Il y'a donc un conflit et B (en tout cas c'est ce que j'ai constaté avec mes tests approximatifs) voit bien le tableau de session, mais celui-ci est vide. Et donc boum -> l'internaute est déconnecté.

La parade ?
Utiliser session_write_close().
Soit après en avoir finit avec la session, c'est plus sur, soit juste avant l'appel à la fonction header(). Comme ça on est certain d'avoir fini de travailler sur la session et le script B peut l'ouvrir sans problème.

PS : je pense que ça n'arrivait jamais en local car mon PC n'a pas du tout la même puissance que le serveur, bien que les temps de réponses soient bien plus infimes, mais ça n'est que mon interprétation.
Résoudre le bug de BigDump sous Windows

J'ai récemment rencontré un bug facheux sur le script BigDump.
Ce script PHP sert à importer des gros fichiers de bases de données sans se soucier des limitations de tailles imposées par phpMyAdmin ou de la nécessité d'avoir un shell linux pour executer des commandes mysql (que généralement on a pas sur notre hébergeur).
Il est très sympa, simple (1 seul fichier), rapide et configurable, joli (avec interface AJAX), mais a un gros défaut :
il ne fonctionne pas avec les fichiers Windows.

L'erreur en question commence par :
Error at the line 3001: INSERT INTO table (xxx)
xxx représente un peu n'importe quoi, le script de découpage du fichier ayant un bug, c'est une chaine de caractère un peu aléatoire qui en sort.
La ligne 3001, c'est parce que le script traite les lignes par paquets, et donc au 2è paquet de ligne à traiter, la il y a erreur. C'est du aux retours à la ligne différents sous Windows (\r\n) et sous UNIX (\n).

C'est ce que j'ai eu le malheur de découvrir en l'utilisant, et j'ai remarqué que je n'étais pas le seul à avoir cette erreur. J'ai fouillé dans le script et je me suis rendu compte qu'en fait l'auteur a rajouté quelques lignes pour rendre son script compatible avec Windows mais qu'il ne l'a jamais testé (et ça ne marche pas bien sur :( ). Donc la solution la plus simple, c'est d'ouvrir le fichier csv à importer dans votre base de données avec Notepad ++, de le convertir en fichier UNIX, et de relancer le chargement.
Je n'ai trouvé cette solution nulle part ailleurs, alors j'espère que ça pourra en aider quelques uns.

Petit casse-tête du soir

Un super casse-tête qui m'a empeché de dormir pendant un certain temps Big Smile


Le principe est simple, vous avez 2 triangles composés exactement des mêmes "morceaux". Seulement sur le triangle du bas, un "trou" apparaît... Où est l'erreur ?


Afficher la barre de favoris sur plusieurs lignes dans Firefox

Si vous êtes comme moi : vous voulez que le moindre espace de l'écran, le moindre clic de souris soit optimisé, alors vous cherchez surement à afficher votre barre de favoris (ou plutôt de marques-pages devrais-je dire) sur plusieurs lignes.

J'ai longtemps cherché sur internet, trouvé difficilement quelques codes sur des sites anglais, jusqu'à en trouver un qui marche.. à peu près : je ne pouvais plus redimensionner ma fenêtre. J'ai donc fait un petit mix des codes que j'ai pu trouvé et le résultat fonctionne.

Voilà la méthode : vous devez éditer le fichier userChrome.css qui se trouve dans C:\Documents and Settings\VotreNom\Application Data\Mozilla\Firefox\Profiles\id.du.profile\chrome\ (ici le chemin d'accès sur ma machine sous XP, à adapter pour vous...).
Attention : pensez à fermer Firefox ;-)
Rajoutez les lignes suivantes à la fin du fichier :
/* Toolbar de marques-pages multilignes */
#bookmarks-ptf {
    display:block;
    line-height:25px;
}
#bookmarks-ptf toolbarbutton {
    margin: 0 1px !important;
}
#bookmarks-ptf toolbarseparator {
    display:inline
}
#bookmarks-stack {
overflow: visible !important;
}


C'est du CSS, vous pouvez rajouter quelques trucs, enlever quelques balises qui vous semblent peut importantes, rajouter du style, bref je vous donne juste la base (et encore y'a surement des lignes qu'on peut supprimer).
Enregistrez et relancez Firefox pour tester.

Voilà j'espère que ça vous sera utile.

MadMatt

Installer PHP5 sous EasyPHP 1.8

Si comme moi vous avez complètement la flème de réinstaller EasyPHP entièrement pour pouvoir profiter de PHP5 (c'est à dire passer de EasyPHP 1.8 à EasyPHP 2), voici la marche à suivre pour remplacer PHP4 par PHP5 sous la version 1.8.

Déjà, téléchargez les binaires pour windows de PHP 5.25 ici :
http://sourceforge.net/project/showfiles.php?group_id=14045

Ensuite, arrêtez EasyPHP et dans son répertoire d'installation renommez le dossier /php/ en /php4/ par exemple. Dézipper ce que vous avez téléchargé et renommez le répertoire d'extraction en /php.

Dans le dossier /conf_files/, ouvrez le fichier httpd.conf et à la ligne 198 changez :
LoadModule php4_module "${path}/php/php4apache.dll"
par :
LoadModule php5_module "${path}/php/php5apache.dll"

Puis à la ligne 245 :
AddModule mod_php4.c
à remplacer par :
AddModule mod_php5.c

Faites ensuite les mêmes modifications dans le fichier /apache/conf/httpd.conf. (ce deuxième fichier est généré automatiquement par EasyPHP à partir du premier, mais je ne sais pas comment 'provoquer' volontairement sa mise à jour). Attention : ${path} est remplacé par le vrai chemin d'accès sur votre machine pour le fichier du répertoire /apache/conf/, c'est pour ça qu'il y'a 2 fichiers...

Ensuite, PHP5 n'est pas configuré par défaut pour fonctionner avec MySql. (essayez http://127.0.0.1/mysql/ pour vous en rendre compte).
Pour cela, il faut également éditer le fichier php.ini, présent (comme pour httpd.conf) dans /conf_files/ et dans le répertoire /apache/.
Ajoutez l'extension mysql à la fin du fichier :
extension=php_mysql.dll

Dernier détail : le dossier des extensions a changé entre les deux versions, il faut donc également modifier la ligne (445) :
; Directory in which the loadable extensions (modules) reside.
extension_dir = "${path}\php\extensions\"

en :
; Directory in which the loadable extensions (modules) reside.
extension_dir = "${path}\php\ext\"


Même remarque que précédemment :
${path} est remplacé par le vrai chemin d'accès sur votre machine dans le fichier qui se trouve dans le répertoire /apache/


Et voilà, un beau PHP 5 tout neuf ;-)

Générer un jeux de couleurs pour un site web

Voici quelques liens d'outils très sympa quand on est en train de définir des élements graphiques d'un site web.
Ce sont des générateurs de jeux de couleurs. Vous leurs donnez une couleur ou une image et ils vous sortent une liste de couleurs associées.

Celui la est très sympa et efficace, les couleurs générées sont assez cohérentes tout en restant variées.
http://www.colorblender.com/

Ces deux vous plus loin, ils proposent de choisir le mode de génération des couleurs : le choix est plus varié, mais plus forcément cohérent dans certains cas (enfin je pense que c'est une affaire de gouts avant tout).
http://wellstyled.com/tools/colorscheme2/index-en.html
http://www.siteprocentral.com/html_color_code.html

Et le dernier extrait les couleurs principales d'une image, ce qui peut être utile dans certains cas :
http://www.degraeve.com/color-palette/index.php

Si vous en cherchez d'autres vous pourrez trouver une liste bien complète d'outils (pas tous forcément intéressants c'est pour cela que j'en ai sélectionné que quelques uns) ici :
http://www.korben.info/generateurspartie-224.html

Faire fonctionner Dotclear sur un sous-domaine

Bonjour à tous,

    J'ai récemment constaté à grand regret que la plateforme de blog Dotclear ne "fonctionnait" pas quand elle était installée sur un sous-domaine.
Il s'agit tout simplement d'un problème de CSS, Dotclear utilise en effet l'adresse absolue des feuilles de style dans ses pages.

Donc la page
http://www.monsite.com/blog/ marche très bien, mais est moins facile à retenir et est, entre autre, différente au niveau du référencement (un sous-domaine est considéré comme un site à part entière par google, au contraire des sous-dossiers).
Si on veut son blog à l'adresse :
http://blog.monsite.com/
il faut un peu tricher.

Rendez-vous dans le panneau de configuration de Dotclear, et remplissez le champ "URL vers le weblog : depuis http://www.monsite.com/" par un "/" (Dotclear n'accepte pas une adresse vide).
Et il ne faut pas se soucier du "depuis http://www.monsite.com/", ça n'a aucun impact pour la suite.

Ensuite, plus bas, videz le champ "Emplacement de l'application", et remplissez les suivants en ne mettant pas de sous-dossier "/blog/"
ex : - "/images/"
       - "/rss.php"
       - etc...

Sauvegardez les modifications et rafraichissez la page de votre blog (maintenant http://blog.monsite.com/)

Toutefois l'adresse http://www.monsite.com/blog/ est toujours accessible et donne un résultat dont on se passerait bien (même problème que précédemment : les CSS ne sont pas trouvées).
Une petite redirection par URL Rewriting fait donc très bien l'affaire.

En espérant que ça puisse faire gagner du temps à certains intéressés ;-)

Je veux bosser dans cette boite !

Une vidéo bien délirante :

http://www.vimeo.com/173714

ça donne envie d'aller y bosser.


(le meilleur est à la fin)

Les nouvelles API Recovery & Restart de Windows Vista et Serveur 2008
J'ai récemment fait la découverte d'un article d'Eric Vernié sur les nouvelles API introduites dans Windows Vista et Serveur 2008.
Il y'en a une certaine liste :
  • Application Recovery and Restart
  • Boot Configuration Data
  • Common Log File System
  • Condition Variables
  • Debug Help Library 6.6
  • Kernel Transaction Manager (KTM)
  • Multimedia Class Scheduler Service
  • Object Namespaces
  • One-Time Initialization
  • Performance Logs and Alerts
  • Restart Manager
  • Thread Ordering Service
  • Thread Pool
  • Transactional NTFS (TxF)
  • Wait Chain Traversal
  • Windows Error Reporting
(certaines ont vraiment l'air intéressantes)
Mais l'article détaille l'utilisation des API "Application Recovery and Restart"

Voici le principe simplifié :
- Lors de l'execution de notre application, on définit quelle données doivent être récupérables en cas de plantage
- On définit également quelle sera la fonction de callback appelée par Windows Error Reporting lors du redémarrage après plantage
- Si l'application plante, le WER va proposer à l'utilisateur de redémarrer l'application
- En cas de redémarrage, le WER va alors appeler la fonction de Callback en lui passant en argument le fichier temporaire contenant les données sauvegardées avant plantage
On peut donc récupérer nos données

Et c'est l'utilisateur qui va être content.


Plus d'infos sur l'article :
http://msdn2.microsoft.com/fr-fr/visualc/bb870268.aspx
Un exemple est même donné en téléchargement
Un ptit nouveau
Salut à tous !

Je rejoint à mon tour avec ce blog la grande famille des bloggeurs ! (faut vivre avec son temps ^^)

Je connais déjà certain membres mais c'est avec plaisir que je compte en rencontrer d'autres.Donc pour ceux qui ne me connaissent pas, je me présente rapidement. Je suis Matthieu Napoli, vous pouvez me retrouver au nom de MadM@tt sur CS, je suis étudiant en école d'ingé (INSA de lyon si y'en a qui connaissent ;) et bien entendu dans la filière Informatique ^^.Bref, cette année est l'année des grandes découvertes, des grands projets et des rencontres pour moi, alors je compte en profiter et rapporter sur ce blog quoi que ce soit qui puisse être intéressant (à vous de me dire de me taire :p)

Voilà, j'espère que vous serez gentils avec moi ;), et je tiens bien entendu à remercier Nix et tous les admins CS, grace à qui j'ai tant appris depuis tant d'année !



Les 10 derniers blogs postés

- [Silverlight] En attendant Silverlight 2 RTW par Blog Technique d'Audrey PETIT le il y a 10 heures et 11 minutes

- Le nouveau Gojira, c’est pour lundi… par CoqBlog le 10-11-2008, 01:18

- SharePoint : nouvel article sur la mise en place des Scopes dans MOSS Searchs par Blog Technique de Romelard Fabrice le 10-10-2008, 17:52

- Hello CS par Le Blog de julz le 10-10-2008, 12:26

- MSDN/TechNet/Microsoft Days Tour 2008 à Lille les 13 et 14 Octobre ! par RedoBlog - The .NET Gentleman !!! le 10-10-2008, 09:35

- MVC Pratique #07 - Un projet concret et le transfert des objets avec les ModelBinders par #Rui le 10-09-2008, 23:39

- SQL Server 2008 : Certifié - TS Admin (70-432) par SQL Server vu par Christian Robert le 10-09-2008, 10:58

- [WPF] Comment changer la couleur utilisée pour sélectionner les éléments d’un ItemsControl ? par Thomas Lebrun le 10-09-2008, 10:49

- Hello World! par Hamid's Place le 10-08-2008, 23:38

- SQL Profiler - Configuration pour un développeur - tracer les requêtes SQL de votre application par Atteint de JavaScriptite Aiguë [Cyril Durand] le 10-08-2008, 15:52