septembre
2010
Je vais pour une fois utiliser ce blog pour communiquer un petit billet d’humeur sur une mésaventure qui m’est arrivé ce jour. Pour la première fois depuis longtemps, je suis resté bloqué plusieurs heures sur un bug, dans un simple fichier de configuration…
Situons le contexte. L’autre jour, je farfouillais les logs d’erreurs d’un projet en quête d’un problème, et suis tombé sur quatre notices qui revenaient constamment : des notices dues à des variables indéfinies, bref, un grand classique. Je note le problème pour plus tard, et j’y reviens cet après-midi, convaincu d’en avoir pour cinq minutes.
Le problème est survenu après la mise en place d’un, disons, meta-fichier de configuration. Pour résumer le problème, nous utilisons conjointement phpBB et d’autres outils, lesquels sont parfois assez fortement couplés : des informations de configuration, comme le nom d’une base de données, sont donc amenées parfois à transiter en différent endroit, il a donc été décidé de centraliser en un endroit un fichier de configuration qui rassemblerait les éléments des différentes applications, pour qu’ils puissent être réutilisés en plusieurs endroit sans créer de redondance.
Le problème se pose au niveau du fichier de configuration de phpBB : pour ceux qui n’ont pas eut l’occasion de mettre les mains dedans, il faut savoir que ce fichier de configuration se compose simplement de variables PHP, il faut donc inclure le fichier et utiliser les variables qui sont définies dedans…
Seulement voilà, la force de l’habitude, le fichier a été inclus en utilisant require_once. La plupart du temps, il n’y avait aucun problème, mais sur certaines pages, le fort couplage entre les différentes applications faisait que d’une manière ou d’une autre, le fichier avait déjà été inclus en amont : le require_once n’avait donc aucun effet dans mon meta-fichier, et surtout les variables de configuration étaient hors de portée… d’où les notices.
Pas vraiment de leçon à tirer de tout ça : on est parfois obligé de composer avec des applications pas toujours totalement bien pensées sur tous les plans, et le facteur « historique » peut entraîner certain couplages pourtant évitables qui provoquent ce genre de cauchemar à débugger.
Au moins, l’expérience aura permis de bénéficier d’une jolie leçon d’humilité : des erreurs très simples peuvent parfois bloquer pendant longtemps les développeurs, même expérimentés.