From ca7e501d5b6f9d8be057b73675da93c7f5fd2070 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Tue, 21 Sep 2004 15:35:37 +0000
Subject: [PATCH] centralisation des erreurs dans le debuger

---
 inc-admin.php3         | 100 ++++++++++--------------------------
 inc-balises.php3       |   1 -
 inc-calcul.php3        |  88 ++++++++++++++------------------
 inc-chercher.php3      |  13 ++---
 inc-compilo-index.php3 |   2 +
 inc-public-global.php3 |   8 +--
 inc-public.php3        | 112 ++++++++++++++++++++++-------------------
 7 files changed, 136 insertions(+), 188 deletions(-)

diff --git a/inc-admin.php3 b/inc-admin.php3
index 9a2db8b372..ce88a9052a 100644
--- a/inc-admin.php3
+++ b/inc-admin.php3
@@ -5,10 +5,6 @@
 if (defined("_INC_ADMIN")) return;
 define("_INC_ADMIN", "1");
 
-
-$debug_messages = '';
-
-
 //
 // Afficher un bouton admin
 //
@@ -92,10 +88,6 @@ function afficher_boutons_admin($pop='', $forcer_debug = false /* cas ou l'eval(
 				$ret .= bouton_admin(_L('Debug'), $link->getUrl());
 			}
 		}
-
-		// Messages de debug
-		global $debug_messages;
-		$ret .= $debug_messages;
 	}
 
 	$ret .= "</ul></div></div>\n";
@@ -139,7 +131,7 @@ function calcul_admin_page($cached, $texte) {
 }
 
 //
-// Leve un drapeau si le squelette donne une page generant de graves erreurs php
+// Appelee si le squelette donne une page generant des erreurs 
 //
 function spip_error_handler ($errno, $errmsg, $filename, $linenum, $vars) {
 	global $tableau_des_erreurs, $page;
@@ -169,6 +161,8 @@ function spip_error_handler ($errno, $errmsg, $filename, $linenum, $vars) {
 	}
 }
 
+// affiche qq lignes de source autour de l'erreur
+
 function affiche_contexte_erreur($texte) {
 	$tableau = explode("\n", $texte);
 	$format = "%0".strlen(count($tableau))."d";
@@ -182,23 +176,25 @@ function affiche_contexte_erreur($texte) {
 
 //
 // Si le code php produit des erreurs, on les affiche en surimpression
-//
+// sauf pour un visiteur non admin, ou on lui dit que c'est en travaux
+// ajouter &var_debug=oui pour voir les erreurs et en parler sur spip@rezo.net
+
 function affiche_erreurs_execution_page() {
-  global $tableau_des_erreurs, $page_principale, $affiche_boutons_admin;
-	echo "<div style='height: 100%; width: 100%; position: absolute; z-index: 1000; background-color: pink;'>";
+  global $tableau_des_erreurs, $affiche_boutons_admin;
+	echo "<div style='height: 100%; width: 100%; position: absolute; top: 10px; z-index: 1000; background-color: pink;'>";
 	if (!$affiche_boutons_admin)
 	  echo "<h2>",(_T('info_travaux_titre')), "</h2>";
 	else {
 	  echo "<h2>",
-	    _L("Erreur lors de l'ex&eacute;cution du squelette"),
+	    _L("Squelette invalide"),
 	    "</h2>",
 	    "<p>",
-	    _L("php a rencontr&eacute; les erreurs suivantes :"),
+	    _L("PHP a rencontr&eacute; les erreurs suivantes :"),
 	    "<code><ul>";
 	  foreach ($tableau_des_erreurs as $err) {
-		echo "<li>$err[2] $err[3]  $err[1] ($err[0])";
-		echo "<small>$err[4]</small>";
-		echo "</li>\n";
+	    echo "<li>$err[2] $err[3]  $err[1]",
+	      "<small>$err[4]</small><br><br>",
+	      "</li>\n";
 	  }
 	  echo "</ul></code>";
 	  $GLOBALS['bouton_admin_debug'] = true;
@@ -214,9 +210,6 @@ function erreur_requete_boucle($query, $id_boucle, $type) {
 	global $auteur_session, $HTTP_COOKIE_VARS, $dir_ecrire;
 	include_ecrire("inc_presentation.php3");
 
-	// Drapeau pour interdire d'ecrire les fichiers dans le cache
-	define('spip_erreur_fatale', 'requete_boucle');
-
 	// Calmer le jeu avec MySQL (si jamais on est en saturation)
 	@touch($dir_ecrire.'data/mysql_out');	// pour spip_cron
 	@touch($dir_ecrire.'data/lock');		// lock hebergeur
@@ -255,41 +248,30 @@ function erreur_requete_boucle($query, $id_boucle, $type) {
 		spip_log("Erreur MySQL BOUCLE$id_boucle (".$GLOBALS['fond'].".html)");
 	}
 
-	  spip_error_handler(1,$retour,'','','?');
+	  spip_error_handler(1,$retour,'','','');
 }
 
 
 //
-// Erreur au parsing des squelettes : afficher le code fautif
+// Erreur de syntaxe des squelettes : afficher le code fautif
 //
 function erreur_squelette($message, $lieu) {
-	global $auteur_session, $debug_messages;
+	global $auteur_session;
 	static $runs;
 	
-	// Drapeau pour interdire d'ecrire les fichiers dans le cache
-	# define('spip_erreur_fatale', 'erreur_squelette');
-	# En fait, a partir du moment ou l'erreur est dans le squelette,
-	# ca ne change rien et autant cacher quand meme !
-
 	spip_log("Erreur squelette: $message | $lieu ("
 		. $GLOBALS['fond'].".html)");
 	$GLOBALS['bouton_admin_debug'] = true;
-
-	// Pour un visiteur normal, ne rien afficher, si SPIP peut s'en sortir
-	// tant mieux, sinon l'erreur se verra de toutes facons :-(
-	// ajouter &var_debug=oui pour discuter sur spip@rezo.net
-	if ($HTTP_COOKIE_VARS['spip_admin'] OR $auteur_session
-	OR $GLOBALS['var_debug']) {
-		$message_long = "<h2>"._T('info_erreur_squelette')."</h2><p>$message</p>";
-		$message_long .= '<br /><FONT color="#FF000">' . $lieu . '</FONT>'; 
-
-		$debug_messages .= "<div style='position: fixed; top: 10px; left: 10px;
-		z-index: 10000; background-color: pink;'>$message_long</div>";
-	}
-
-	// Eviter les boucles infernales
-	if (++$runs > 4) die ($debug_messages);
 	spip_error_handler(1," $message $lieu ", '','','?');
+	// Eviter les boucles infernales
+	if (++$runs > 4) {
+		if (!$HTTP_COOKIE_VARS['spip_admin'] AND
+		    !$auteur_session AND
+		    !$GLOBALS['var_debug'])
+		  $messages =  "<h2>".(_T('info_travaux_titre')). "</h2>";
+		die ("<div style='position: fixed; top: 10px; left: 10px;
+		z-index: 10000; background-color: pink;'>$message</div>");
+	}
 }
 
 //
@@ -331,10 +313,9 @@ function boucle_debug ($id, $nom, $boucle) {
 // l'environnement graphique du debuggueur 
 function debug_dumpfile ($texte) {
 
-	global $flag_ob;
 	global $debug_objets, $debug_objet, $debug_affiche;
-
-	@header("Content-Type: text/html; charset=".lire_meta('charset'));
+	if (!headers_sent())
+	  header("Content-Type: text/html; charset=".lire_meta('charset'));
 	if (!$GLOBALS['debug_objets']['sourcefile']) return;
 	spip_setcookie('spip_debug', 'oui', time()+12*3600);
         $page = "<html><head><title>Debug</title></head>\n<body>";
@@ -401,31 +382,4 @@ function debug_dumpfile ($texte) {
 	if ($texte) exit;
 }
 
-
-/*
-function verifie_cookie_debug() {
-	global $code_activation_debug;
-
-	if ($GLOBALS['HTTP_COOKIE_VARS']['spip_debug']
-	!= $code_activation_debug) {
-		spip_setcookie('spip_debug', $code_activation_debug, time()+3600);
-		include_ecrire('inc_presentation.php3');
-		install_debut_html(_L('Bienvenue dans le debuggueur de SPIP'));
-		echo "<P>"._L("Cet outil vous permet d'analyser les pages produites par
-		SPIP. Il est parfois de lecture difficile, mais il offre en contrepartie
-		une grande capacit&eacute; de recherche des erreurs, et une meilleure
-		compr&eacute;hension du fonctionnement des boucles et balises du
-		syst&egrave;me.</p>");
-		echo "<P>"._L("Pour entrer, il vous suffit de recharger cette page,
-		apr&egrave;s avoir accept&eacute; un cookie (ce dernier permet
-		d'&eacute;carter les moteurs de recherche, et installe un bouton
-		d'administration suppl&eacute;mentaire &laquo;debug&raquo; sur
-		votre &eacute;cran, pendant une heure).</p>");
-		install_fin_html();
-		exit;
-	} else
-		return true;
-}
-*/
-
 ?>
diff --git a/inc-balises.php3 b/inc-balises.php3
index 42f22fcf59..0cd4351d32 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -776,7 +776,6 @@ function balise_distante_interdite($p) {
 	if ($p->boucles[$nom]->sql_serveur) {
 		include_local("inc-admin.php3");
 		erreur_squelette($p->nom_champ ._L(" distant interdit"), $nom);
-		exit;
 	}
 }
 
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index 00ada2a172..798b7c2d2a 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -47,7 +47,8 @@ function squelette_obsolete($skel, $squelette) {
 }
 
 
-# Charge un squelette (au besoin le compile)
+# Charge un squelette (au besoin le compile) 
+# et retoune le nom de sa fonction principale, ou '' s'il est indefini
 # Charge egalement un fichier homonyme de celui du squelette
 # mais de suffixe '_fonctions.php3' pouvant contenir:
 # - des filtres
@@ -87,37 +88,26 @@ function charger_squelette ($squelette) {
 	if (file_exists($f)) include($f);
 
 	if (function_exists($nom))  return $nom;
+
 	$skel_code = calculer_squelette($skel, $nom, $ext, $sourcefile);
+
 	// Tester si le compilateur renvoie une erreur
 
-	if (is_array($skel_code)) 
-		{
-			erreur_squelette($skel_code[0], $skel_code[1]) ; 
-			$skel_compile = '';
-			$skel_code = '';
-		  }
-	else
-		$skel_compile = "<"."?php\n" . $skel_code ."\n?".">";
-
-	// Parler au debugguer
-	if ($GLOBALS['var_debug'] AND 
-	    $GLOBALS['debug_objet'] == $nom
-	    AND $GLOBALS['debug_affiche'] == 'code')
-		debug_dumpfile ($skel_compile);
-		
-		// Evaluer le squelette
-	eval($skel_code);
-	if (function_exists($nom)) {
-		ecrire_fichier ($phpfile, $skel_compile);
-		return $nom;
+	if (!is_array($skel_code)) {
+// Parler au debugguer
+		if ($GLOBALS['var_debug'] AND 
+		    $GLOBALS['debug_objet'] == $nom AND 
+		    $GLOBALS['debug_affiche'] == 'code')
+			debug_dumpfile ($skel_code);
+		eval($skel_code);
+		if (function_exists($nom)) {
+		  ecrire_fichier ($phpfile, 
+				  "<"."?php\n" . $skel_code ."\n?".">");
+		  return $nom;
+		}
 	}
-
-		// en cas d'erreur afficher les boutons de debug
-	echo "<hr /><h2>".
-		_L("Erreur dans la compilation du squelette").
-		" $sourcefile</h2>" .
-		$GLOBALS['bouton_admin_debug'] = true;
-		debug_dumpfile ($skel_compile);
+	erreur_squelette($skel_code[0], $skel_code[1]) ; 
+	return '';
 }
 
 # Provoque la recherche du squelette $fond d'une $lang donnee,
@@ -129,7 +119,7 @@ function charger_squelette ($squelette) {
 
 # En cas d'erreur process_ins est absent et texte est un tableau de 2 chaines
 
-# La recherche est assuree par la fonction cherche_squelette,
+# La recherche est assuree par la fonction chercher_squelette,
 # definie dans inc-chercher, fichier non charge si elle est deja definie
 # (typiquement dans mes_fonctions.php3)
 
@@ -146,26 +136,25 @@ function cherche_page ($cache, $contexte, $fond, $id_rubrique, $lang='')  {
 			$lang);
 
 	// Charger le squelette et recuperer sa fonction principale
-	// (compilation automatique au besoin)
-
-	$fonc = charger_squelette($skel);
+	// (compilation automatique au besoin) et calculer
 
-	// Calculer la page a partir du main() du skel compile
-	$page =  $fonc(array('cache' => $cache), array($contexte));
+	if ($skel) {
+		if ($fonc = charger_squelette($skel));
+			$page = $fonc(array('cache' => $cache), array($contexte));
 
-	// Passer la main au debuggueur)
-	if ($GLOBALS['var_debug'] AND $GLOBALS['debug_objet'] == $fonc
-	AND $GLOBALS['debug_affiche'] == 'resultat') {
-		debug_dumpfile ($page['texte']);
+			// Passer la main au debuggueur)
+		if ($GLOBALS['var_debug'] AND 
+		    $GLOBALS['debug_objet'] == $fonc AND
+		    $GLOBALS['debug_affiche'] == 'resultat')
+			debug_dumpfile ($page['texte']);
 	}
-
 	# flag pour spip_error_handler(), cf inc-admin ??
 	$page['squelette'] = $skel;
 
 	// Nettoyer le resultat si on est fou de XML
 	if ($GLOBALS['xhtml']) {
-		include_ecrire("inc_tidy.php");
-		$page['texte'] = xhtml($page['texte']);
+		  include_ecrire("inc_tidy.php");
+		  $page['texte'] = xhtml($page['texte']);
 	}
 
 	// Entrer les invalideurs dans la base
@@ -332,7 +321,7 @@ function spip_abstract_select (
 			$d = 'inc_connect-' . $serveur .'.php3';
 			if (file_exists('ecrire/' . $d))
 				include_ecrire($d);
-			serveur_defini($f, $serveur);
+			$f = spip_abstract_serveur($f, $serveur);
 		}
 	}
 	return $f($select, $from, $where,
@@ -341,12 +330,13 @@ function spip_abstract_select (
 		  $table, $id, $serveur);
 }
 
-function serveur_defini($f, $serveur) {
+function spip_abstract_serveur($f, $serveur) {
   if (function_exists($f)) return $f;
   include_local("inc-admin.php3");
-  erreur_squelette(_T('info_erreur_squelette'),
-		   $serveur . 
-		   _L(' serveur SQL indefini'));
+  erreur_squelette(_L(' serveur SQL indefini'), $serveur);
+		   
+  // hack pour continuer la chasse aux erreurs
+  return 'array';
 }
 
 // Les 3 fonctions suivantes exploitent le resultat de la precedente,
@@ -355,21 +345,21 @@ function serveur_defini($f, $serveur) {
 function spip_abstract_fetch($res, $serveur='')
 {
   if (!$serveur) return spip_fetch_array($res);
-  $f = serveur_defini('spip_' . $serveur . '_fetch', $serveur);
+  $f = spip_abstract_serveur('spip_' . $serveur . '_fetch', $serveur);
   return $f($res);
 }
 
 function spip_abstract_count($res, $serveur='')
 {
   if (!$serveur) return spip_num_rows($res);
-  $f = serveur_defini('spip_' . $serveur . '_count', $serveur);
+  $f = spip_abstract_serveur('spip_' . $serveur . '_count', $serveur);
   return $f($res);
 }
 
 function spip_abstract_free($res, $serveur='')
 {
   if (!$serveur) return spip_free_result($res);
-  $f = serveur_defini('spip_' . $serveur . '_free', $serveur);
+  $f = spip_abstract_serveur('spip_' . $serveur . '_free', $serveur);
   return $f($res);
 }
 
diff --git a/inc-chercher.php3 b/inc-chercher.php3
index 910304f02c..eac2ee6a28 100644
--- a/inc-chercher.php3
+++ b/inc-chercher.php3
@@ -37,15 +37,10 @@ function chercher_squelette($fond, $id_rubrique, $dossier, $lang) {
 		return "$fond-dist";
 	} else {
 		// erreur webmaster : $fond ne correspond a rien
-		include_ecrire ("inc_presentation.php3");
-		install_debut_html(_T('info_erreur_squelette'));
-		echo "<p>",
-			_T('info_erreur_squelette2',
-			   array('fichier'=>$fond)),
-			"</p>";
-		spip_log("ERREUR: squelette '$fond' indisponible");
-		install_fin_html();
-		exit;
+		erreur_squelette(_T('info_erreur_squelette2',
+				    array('fichier'=>$fond)),
+				 $dossier);
+		return '';
 	}
 }
 
diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3
index 1f9bbb7d75..a2d6e3ce84 100644
--- a/inc-compilo-index.php3
+++ b/inc-compilo-index.php3
@@ -48,6 +48,8 @@ function index_pile($idb, $nom_champ, &$boucles, $explicite='') {
 		if (!$desc) {
 			include_local("inc-admin.php3");
 			erreur_squelette(_L("Table SQL \"$r\" inconnue"), "'$idb'");
+			# continuer pour chercher l'erreur suivante
+			return  "'#" . $r . ':' . $nom_champ . "'";
 		}
 		$excep = $exceptions_des_tables[$r][$c];
 		if ($excep) {
diff --git a/inc-public-global.php3 b/inc-public-global.php3
index 2d3f6c80bc..b313dc0261 100644
--- a/inc-public-global.php3
+++ b/inc-public-global.php3
@@ -20,8 +20,8 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
 
 		spip_timer('calculer_page');
 		$page = calculer_page($chemin_cache,
-			array('fond' => $fond,
-				'contexte' => $contexte),
+				      array('fond' => $fond,
+					    'contexte' => $contexte),
 			$delais,
 			$inclusion);
 
@@ -37,9 +37,11 @@ function obtenir_page ($contexte, $chemin_cache, $delais, $use_cache, $fond, $in
 		// qu'il faut changer d'invalideur a la prochaine lecture et donner
 		// un invalideur 't' dans 1 heure
 		// NB: cet invalideur connait aussi la taille du fichier
-		if ($fichier = addslashes($chemin_cache)) {
+		spip_log("cache" . $page['process_ins']);
+		if (file_exists($chemin_cache)) {
 			$bedtime = time() + 3600;
 			$taille = @filesize($chemin_cache);
+			$fichier = addslashes($chemin_cache);
 			spip_query("INSERT IGNORE INTO spip_caches (fichier,id,type,taille)
 			VALUES ('$fichier','$bedtime','t','$taille')");
 			@touch($chemin_cache.'.NEW');
diff --git a/inc-public.php3 b/inc-public.php3
index 73c66f106e..ec1c808112 100644
--- a/inc-public.php3
+++ b/inc-public.php3
@@ -3,11 +3,16 @@
 // Page inclue ?
 if (defined("_INC_PUBLIC")) {
 	$page = inclure_page($fond, $delais, $contexte_inclus, $fichier_inclus);
-
+	$contenu = $page['texte'];
+	// Traiter var_recherche pour surligner les mots
+	if ($GLOBALS['var_recherche']) {
+	  include_ecrire("inc_surligne.php3");
+	  $contenu = surligner_mots($contenu, $var_recherche);
+		}
 	if ($page['process_ins'] == 'php') {
-		eval('?' . '>' . $page['texte']); // page 'php'
+		eval('?' . '>' . $contenu); // page 'php'
 	} else
-		echo $page['texte']; // page tout 'html'
+		echo $contenu; // page tout 'html'
 
 	if ($page['lang_select'])
 		lang_dselect();
@@ -93,81 +98,82 @@ else {
 	$tableau_des_erreurs = array();
 	$page = afficher_page_globale ($fond, $delais, $use_cache);
 
-	// Afficher la page ; le cas PHP est assez rigolo avec le traitement
-	// d'erreurs
-	if ($page['process_ins'] == 'php') {
+		// Interdire au client de cacher un login, un admin ou un recalcul
+	if ($flag_dynamique OR ($recalcul == 'oui')
+			OR $HTTP_COOKIE_VARS['spip_admin']) {
+			@header("Cache-Control: no-cache,must-revalidate");
+			@header("Pragma: no-cache");
+		// Pour les autres donner l'heure de modif
+		} else if ($lastmodified)
+			@Header ("Last-Modified: ".http_gmoddate($lastmodified)." GMT");
+
+		@header("Content-Type: text/html; charset=".lire_meta('charset'));
+ #entre gzip et debug, faut revoir
+		#@header('Content-Length: '.strlen($contenu));
+#		@header('Connection: close');
+
+		$contenu = $page['texte'];
+		spip_log($page['process_ins'] . strlen($contenu));
+		// Traiter var_recherche pour surligner les mots
+		if ($var_recherche) {
+			include_ecrire("inc_surligne.php3");
+			$contenu = surligner_mots($contenu, $var_recherche);
+		}
+
+		// Ajouter les boutons admins (les normaux)
+		if ($affiche_boutons_admin)
+			$contenu = calcul_admin_page($use_cache, $contenu);
+		spip_log($page['process_ins'] . $contenu);
+
+		if ($page['process_ins'] == 'html') 
+		  {if (!$var_debug) echo $contenu;}
+		else {
 
 		// Ici on va ruser pour intercepter les erreurs (meme les FATAL)
 		// dans le eval : on envoie le bouton debug, et on le supprime
 		// de l'autre cote ; de cette facon, si on traverse sans encombre,
 		// on est propre, et sinon on a le bouton
 
-		if ($affiche_boutons_admin) {
+			if ($affiche_boutons_admin) {
 
-			// recuperer les parse errors etc., type "FATAL" (cf. infra)
-			if ($auteur_session['statut'] == '0minirezo') {
+		// recuperer les parse errors etc., type "FATAL" (cf. infra)
+			  if ($auteur_session['statut'] == '0minirezo') {
 				$page_principale = $page;
 				if (function_exists('set_error_handler'))
 					set_error_handler('spip_error_handler');
+			  }
+			  
 			}
 
-		}
-
 		//
 		// Evaluer la page php
 		//
-		if (!$var_debug)
-		  $res = eval('?' . '>' . $page['texte']); 
-		else {
-		  	ob_start(); 
-			$res = eval('?' . '>' . $page['texte']);
-		  	$contenu = ob_get_contents(); 
-			ob_end_clean();
-		}
+			if (!$var_debug)
+			  $res = eval('?' . '>' . $contenu); 
+			else {
+			  ob_start(); 
+			  $res = eval('?' . '>' . $contenu);
+			  $contenu = ob_get_contents(); 
+			  ob_end_clean();
+			}
                       
 		// en cas d'erreur afficher un message + demander les boutons de debug
-		if ($affiche_boutons_admin
-			AND $auteur_session['statut'] == '0minirezo') {
-			if (function_exists('restore_error_handler'))
-		  		restore_error_handler();
-			if ($res === false)
-			  spip_error_handler(1,'erreur de compilation','','','');
+			if ($affiche_boutons_admin
+			    AND $auteur_session['statut'] == '0minirezo') {
+			  if (function_exists('restore_error_handler'))
+			    restore_error_handler();
+			  if ($res === false)
+			    spip_error_handler(1,'erreur de compilation','','','');
+			}
+			
 		}
-
-	} else $contenu = $page['texte'];
-
 	// Passer la main au debuggueur le cas echeant 
 	if ($var_debug)	
 	  debug_dumpfile('');
 	else {
 		if (count($tableau_des_erreurs) > 0)
 			affiche_erreurs_execution_page ();
-
-		// Traiter var_recherche pour surligner les mots
-		if ($var_recherche) {
-			include_ecrire("inc_surligne.php3");
-			$contenu = surligner_mots($contenu, $var_recherche);
-		}
-
-		// Ajouter les boutons admins (les normaux)
-		if ($affiche_boutons_admin)
-			$contenu = calcul_admin_page($use_cache, $contenu);
-
-		// Interdire au client de cacher un login, un admin ou un recalcul
-		if ($flag_dynamique OR ($recalcul == 'oui')
-			OR $HTTP_COOKIE_VARS['spip_admin']) {
-			@header("Cache-Control: no-cache,must-revalidate");
-			@header("Pragma: no-cache");
-		// Pour les autres donner l'heure de modif
-		} else if ($lastmodified)
-			@Header ("Last-Modified: ".http_gmoddate($lastmodified)." GMT");
-
-		// Afficher (pour de vrai)
-		@header('Content-Length: '.strlen($contenu)); # ca donne quoi en gzip ?
-		@header('Connection: close');
-		echo $contenu;
 	}
-
 	terminer_public_global($use_cache, $page['cache']);
 }
 
-- 
GitLab