diff --git a/ecrire/public.php b/ecrire/public.php
index 1be36db8bc57d53b1e9fd71c7f10815193cb8f8d..560b6e7b9aba669456ef4182bf3fd38f2475502e 100644
--- a/ecrire/public.php
+++ b/ecrire/public.php
@@ -149,7 +149,14 @@ if (isset($GLOBALS['_INC_PUBLIC']) AND $GLOBALS['_INC_PUBLIC']) {
 	include _ROOT_RESTREINT."public/evaluer_page.php";
 	envoyer_entetes($page['entetes']);
 	if ($res === false) {
-		$msg = array('zbug_erreur_execution_page');
+		include_spip('inc/autoriser');
+		$err = _T('zbug_erreur_execution_page');
+		if (autoriser('webmestre')) {
+			$err .= "\n<hr />\n"
+				.highlight_string($page['codephp'],true)
+				."\n<hr />\n";
+		}
+		$msg = array($err);
 		erreur_squelette($msg);
 	}
 
diff --git a/ecrire/public/evaluer_page.php b/ecrire/public/evaluer_page.php
index 85f56110975ccd168cadc12d08291c906f6cf317..775df1807e3bae80b2c1db176835c27ac7600bb3 100644
--- a/ecrire/public/evaluer_page.php
+++ b/ecrire/public/evaluer_page.php
@@ -53,9 +53,19 @@ if ($page['process_ins'] != 'html') {
 		$page['texte'] = str_replace('<'.'?xml', "<\1?xml", $page['texte']);
 
 	$res = eval('?' . '>' . $page['texte']);
-	$page['texte'] = ob_get_contents();
+	$eval = ob_get_contents();
 	ob_end_clean();
 
+	// erreur d'exécution ?
+	// enregistrer le code pour afficher zbug_erreur_execution_page
+	if (false === $res) {
+		$page['codephp'] = $page['texte'];
+		$page['texte'] = '<!-- erreur -->';
+	}
+	else {
+		$page['texte'] = $eval;
+	}
+
 	$page['process_ins'] = 'html';
 
 	if (strpos($page['texte'],'?xml')!==false)