1 jour, 1 bug…
15 02 2010
C’est pas le premier bug que je rencontre et certainement pas le dernier. Mais celui-ci était plutôt mesquin car assez discret mais aux conséquences assez radicales : pas d’indexation dans Google!
Mon site est à présent en ligne depuis vendredi, mais on va dire en version alpha. Pour l’instant je m’assure que tout va bien. Et tout avait l’air de bien aller : le site s’affichait correctement et se comportait comme en local sur ma machine. En voulant passer ma page d’accueil au validateur W3C, je m’aperçois qu’il ne scanne pas ma page, mais une page d’erreur… ? J’essaye aussi de faire un partage de lien sur la fan page Facebook associée au site : il associe une page d’erreur! J’ai l’impression que la lecture de mon site par des robots ne fonctionne pas et je fais le lien avec l’impossibilité d’ajouter dans Google Reader les flux RSS que je génère alors que le XML m’apparaissait comme il fallait. Mais surtout, je me suis rendu compte en utilisant Google Webmaster Tools, que le robot de Google ne voyait aussi qu’une page d’erreur! En effet, dans Webmaster Tools, il est possible de demander une analyse tel que Googlebot le fait. En utilisant ça, j’ai débuggué petit à petit à coup d’affichage.
Le message d’erreur indiquait qu’un require_once échouait car le fichier n’existait pas. Or quand moi j’affichais le site dans un navigateur il existait bien! Le fichier en question est celui où je stocke tous mes textes (pour gérer plus facilement différentes langues par la suite).
require_once(realpath(dirname(__FILE__).'/../message/'.$_SESSION[LOCALE].'/message.php'));
En débuggant donc, je me suis aperçu que $_SESSION[LOCALE] existait bien, mais était vide! D’où l’erreur. Pourquoi était-elle vide alors? Parce qu’auparavant, j’exécute le code suivant :
$locale = DEFAULT_LOCALE;
$clientLocaleTab = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($clientLocaleTab as $clientLocale) {
if (is_dir(realpath(dirname(__FILE__).'/../message/'.$clientLocale))) {
$locale = $clientLocale;
break;
}
}
setInSession(LOCALE, $locale);
Et que pour les robots, $_SERVER['HTTP_ACCEPT_LANGUAGE'] est vide! Sauf que explode me retourne un tableau à un élément… vide! Du coup le test isDir est valide, $locale vaut ”, …
Du coup, j’ai juste rajouté un test qui vérifie que la valeur n’est pas nulle! Tout ça pour ça :
if (strcmp($clientLocale, '')!=0 && is_dir(realpath(dirname(__FILE__).'/../message/'.$clientLocale))) {









Ah les petits bugs mesquins … ils nous prennent bien la tête mais quelle joie quand on trouve finalement la raison qui souvent est toute bête.
Bon courage pour la suite
C’est juste la poussière du début.
Bon courage pour la suite mais je crois que tu as de l’énergie à revendre !
[...] j’ai encore passé presque 2 jours à me prendre la tête, cette fois-ci ça n’est pas à cause d’un bug. Non, tout allait très bien jusqu’à ce que je tombe par hasard sur un article parlant [...]