Dotclear

Ticket #923 (closed defect: fixed)

Opened 14 years ago

Last modified 14 years ago

template:getData ou la mort silencieuse des pages publiques

Reported by: bruno Owned by: xave
Priority: high Milestone: 2.2
Component: module:clearbricks Version: 2.1
Severity: normal Keywords:
Cc:

Description

Il arrive parfois que les pages publiques d'un blog s'arrêtent brutalement à un endroit donné, sans lever le moindre message d'erreur coté serveur, même avec un error_reporting au maximum.

Exemple flagrant : générer via une balise du code invalide (parse error) dans un fichier inclus : ajouter dans _head.html par exemple : {{tpl:InvalidCode}}

et dans le _public.php du thème :

$core->tpl->addValue('InvalidCode',array('tplTest','invalid'));

class tplTest 
{
	public static function invalid($attr) {
		return '<?php parse_error { ?>';
	}
}

Conséquence : tout le blog affichera page blanche, sans plus râler...

Le coupable : la méthode getData de clearbricks (class.template.php) qui ignore silencieusement toute erreur dans le fichier inclus.

Supprimer le "@" ligne 215 de ce fichier aiderait grandement les gens qui mettent au point leur thème/plugin...

Change History

comment:1 Changed 14 years ago by xave

Ca ne serait pas plus propre avec un Try/Catch? ?

comment:2 Changed 14 years ago by bruno

Pourquoi pas, mais dans ce cas il faudrait définir un errorhandler particulier ( http://fr.php.net/manual/en/class.errorexception.php) pour intercepter une éventuelle erreur, la directive include ne levant pas nativement d'exception.

Par contre, je ne suis pas certain que cela prémunisse de toutes les erreurs. Je pense notamment aux parse error

comment:3 Changed 14 years ago by bruno

Confirmation :

"E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT" will never reach your custom error handler, and therefore will not be converted into ErrorExceptions.  Plan accordingly.

comment:4 Changed 14 years ago by xave

Ah ué. Vivi avait raison : PHP, c'est tout pourri. On peut peut-être simplement se permettre ta première idée alors. Après tout, ça ne sert pas tous les jours. Et en l'occurrence, moins propre, ça fait moins de traitement.

comment:5 Changed 14 years ago by bruno

C'est toi qui a les clefs du svn clearbricks... je te laisse commiter la modif ?

comment:6 Changed 14 years ago by xave

Bon, au plus j'y réfléchis, au moins je suis convaincu. On prend le risque d'afficher des erreurs en front en production, et ça, c'est mal.

comment:7 Changed 14 years ago by bruno

A défaut le permettre via un mode debug ? C'est énormément frustrant de ne pas pouvoir mettre au point un plugin quand on n'a aucune information sur l'erreur qui empêche l'affichage de la page...

comment:8 Changed 14 years ago by xave

Je comprends bien (tu noteras que je n'ai pas fermé le ticket.)

J'ai pensé au mode debug, mais je ne sais pas trop comment faire redescendre le debug de Dotclear dans Clearbricks.

comment:9 Changed 14 years ago by bruno

J'opterais bien pour un paramètre supplémentaire à getData, du type $verbose_output, par défaut à false...

comment:10 Changed 14 years ago by xave

  • Status changed from new to closed
  • Resolution set to fixed

done in Clearbricks commit 240

Note: See TracTickets for help on using tickets.

Sites map