From 963f1f08cb8ae66e014c62b78b9dd9f792661153 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Tue, 21 Sep 2004 21:11:16 +0000 Subject: [PATCH] =?UTF-8?q?un=20peu=20de=20nettoyage=20de=20tout=20=C3=A7a?= =?UTF-8?q?=20(d=C3=A9buggueur,=20parcours=20du=20code,=20var=5Frecherche?= =?UTF-8?q?=20et=20codes=20php,=20etc.)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La gestion de certaines erreurs php (parse errors) dans les squelettes a disparu (code mangé par ESJ qui avait très faim de bugs-frites) --- inc-admin.php3 | 41 +++++++------ inc-balises.php3 | 5 -- inc-calcul.php3 | 36 ++++++----- inc-compilo-index.php3 | 1 - inc-formulaires.php3 | 8 --- inc-html-squel.php3 | 6 -- inc-public.php3 | 134 ++++++++++++++++++----------------------- 7 files changed, 97 insertions(+), 134 deletions(-) diff --git a/inc-admin.php3 b/inc-admin.php3 index 10c7f04da1..01f93ce2bc 100644 --- a/inc-admin.php3 +++ b/inc-admin.php3 @@ -137,18 +137,14 @@ function spip_error_handler ($errno, $errmsg, $filename, $linenum, $vars) { global $tableau_des_erreurs, $page; // On ne veut intercepter que les erreurs des $page['texte'], - // si le code avait ete développé proprement dès le départ - // ce serait moins approximatif que ci-dessous - - if (($errno & (E_ERROR | E_WARNING | E_PARSE)) && - (!strpos($filename, 'ecrire/'))) - { - -# si $filename = inc-public + eval, dénoncer le squelette, -# sinon c'est un appel du handler explicitement par le compilateur -# qui donne les bons arguments tout de suite, mais avec linenum = '' - $tableau_des_erreurs[] - = array($errno, + // et pas celles de SPIP :^) + if (($errno & (E_ERROR | E_WARNING | E_PARSE)) + && (!strpos($filename, 'ecrire/'))) { + + # si $filename = inc-public + eval, denoncer le squelette, + # sinon c'est un appel du handler explicitement par le compilateur + # qui donne les bons arguments tout de suite, mais avec linenum = '' + $tableau_des_erreurs[] = array($errno, $errmsg, ($linenum ? "ligne $linenum" : ''), ((!strpos($filename, 'inc-public.php3(')) ? @@ -183,19 +179,24 @@ function affiche_erreurs_execution_page() { global $tableau_des_erreurs, $affiche_boutons_admin; if ($affiche_boutons_admin) { - echo "<div style='position: absolute; top: 10px; - z-index: 1000; background-color: pink;'>"; - echo "<h2>", + include_ecrire('inc_presentation.php3'); + + echo "<div id='spip-debug' style='position: absolute; top: 20;", + " z-index: 1000;'><ul><li>", _L("Erreur(s) dans le squelette"), - "</h2>", - "<code><ul>"; + +## aide locale courte a ecrire, avec lien vers une grosse page de documentation +# aide('erreur_compilation'), + + "<br /></li>", + "<ul>"; foreach ($tableau_des_erreurs as $err) { echo "<li>$err[2] $err[3] $err[1]", - "<small>$err[4]</small><br><br>", + "<small>$err[4]</small><br />", "</li>\n"; } - echo "</ul></code>"; - echo "</div>"; + echo "</ul>"; + echo "</ul></div>"; $GLOBALS['bouton_admin_debug'] = true; } } diff --git a/inc-balises.php3 b/inc-balises.php3 index 0cd4351d32..c044c0ac17 100644 --- a/inc-balises.php3 +++ b/inc-balises.php3 @@ -255,7 +255,6 @@ function balise_RECHERCHE_dist($p) { function balise_COMPTEUR_BOUCLE_dist($p) { if ($p->id_mere === '') { - include_local("inc-admin.php3"); erreur_squelette(_L("Champ #COMPTEUR_BOUCLE hors boucle"), $p->id_boucle); $p->code = "''"; } else { @@ -267,7 +266,6 @@ function balise_COMPTEUR_BOUCLE_dist($p) { function balise_TOTAL_BOUCLE_dist($p) { if ($p->id_mere === '') { - include_local("inc-admin.php3"); erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), $p->id_boucle); $p->code = "''"; } else { @@ -297,7 +295,6 @@ function balise_POINTS_dist($p) { $b = $p->boucles[$b]->id_parent; } if (!$p->code) { - include_local("inc-admin.php3"); erreur_squelette(_L("Champ #POINTS hors d'une recherche"), $p->id_boucle); } $p->statut = 'php'; @@ -329,7 +326,6 @@ function balise_EXPOSER_dist($p) { $type_boucle = $p->type_requete; $primary_key = $table_primary[$type_boucle]; if (!$primary_key) { - include_local("inc-admin.php3"); erreur_squelette(_L("Champ #EXPOSER hors boucle"), $p->id_boucle); } $on = 'on'; @@ -774,7 +770,6 @@ function balise_FORMULAIRE_SITE_dist($p) { function balise_distante_interdite($p) { $nom = $p->id_boucle; if ($p->boucles[$nom]->sql_serveur) { - include_local("inc-admin.php3"); erreur_squelette($p->nom_champ ._L(" distant interdit"), $nom); } } diff --git a/inc-calcul.php3 b/inc-calcul.php3 index 15256e0989..78c9b5956a 100644 --- a/inc-calcul.php3 +++ b/inc-calcul.php3 @@ -16,9 +16,7 @@ include_ecrire("inc_lang.php3"); include_ecrire("inc_documents.php3"); include_local("inc-forum.php3"); include_local("inc-calcul-outils.php3"); - -#include_local("inc-calcul_html"); # anciens noms des fichiers -#include_local("inc-calcul_mysql"); +include_local("inc-admin.php3"); // Ce fichier peut contenir une affectation de $dossier_squelettes indiquant @@ -142,19 +140,17 @@ function cherche_page ($cache, $contexte, $fond, $id_rubrique, $lang='') { 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') + // 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 @@ -283,6 +279,8 @@ function calculer_page($chemin_cache, $elements, $delais, $inclusion=false) { return $page; } + +## tout ce qui suit devrait etre ailleurs : ecrire/inc_db_(mysql|pgsql).php3 // Cette fonction est systematiquement appelee par les squelettes // pour constuire une requete SQL de type "lecture" (SELECT) a partir // de chaque boucle. @@ -331,12 +329,13 @@ function spip_abstract_select ( } function spip_abstract_serveur($f, $serveur) { - if (function_exists($f)) return $f; - include_local("inc-admin.php3"); - erreur_squelette(_L(' serveur SQL indefini'), $serveur); - - // hack pour continuer la chasse aux erreurs - return 'array'; + if (function_exists($f)) + return $f; + + 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, @@ -363,8 +362,7 @@ function spip_abstract_free($res, $serveur='') return $f($res); } -# une composition tellement fréquente... - +# une composition tellement frequente... function spip_abstract_fetsel( $select = array(), $from = array(), $where = '', $groupby = '', $orderby = '', $limit = '', diff --git a/inc-compilo-index.php3 b/inc-compilo-index.php3 index c2a5f14406..fc86a254e3 100644 --- a/inc-compilo-index.php3 +++ b/inc-compilo-index.php3 @@ -46,7 +46,6 @@ function index_pile($idb, $nom_champ, &$boucles, $explicite='') { # spip_log("Go: idb='$idb' r='$r' c='$c' nom='$nom_champ' s=$s"); $desc = $tables_des_serveurs_sql[$s][$t]; 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 . "'"; diff --git a/inc-formulaires.php3 b/inc-formulaires.php3 index e18c83199f..8ce3e7f806 100644 --- a/inc-formulaires.php3 +++ b/inc-formulaires.php3 @@ -542,13 +542,5 @@ function formulaire_ecrire_auteur($id_auteur, $email_auteur) { return $res; } -function formulaire_admin() { - if (!$GLOBALS['flag_preserver'] && ($GLOBALS['HTTP_COOKIE_VARS']['spip_admin'])) { - include_local('inc-admin.php3'); - global $page, $cle, $fraicheur; - return afficher_boutons_admin($page, $cle, $fraicheur); - } - return ''; -} ?> diff --git a/inc-html-squel.php3 b/inc-html-squel.php3 index 4c3bf4f976..97fd95605b 100644 --- a/inc-html-squel.php3 +++ b/inc-html-squel.php3 @@ -47,7 +47,6 @@ function parser_texte($texte) { $champ->params = ''; else { if (!(ereg('^\\{(.*)\\}$', $p, $params))) { - include_local("inc-admin.php3"); erreur_squelette(_L("Paramètres d'inclusion incorrects"), $s); } else @@ -210,7 +209,6 @@ function parser_param($params, &$result) { } if ($params) { - include_local("inc-admin.php3"); erreur_squelette(($result->id_boucle . _L(": Paramètre $i (ou suivants) incorrect")), $params); @@ -241,7 +239,6 @@ function parser($texte, $id_parent, &$boucles, $nom) { $debut = substr($texte, 0, $p); $milieu = substr($texte, $p); if (!ereg(BALISE_DE_BOUCLE, $milieu, $match)) { - include_local("inc-admin.php3"); erreur_squelette((_T('erreur_boucle_syntaxe')), $milieu); } $id_boucle = $match[1]; @@ -281,7 +278,6 @@ function parser($texte, $id_parent, &$boucles, $nom) { } $milieu = substr($milieu, strlen($match[0])); if (strpos($milieu, $s)) { - include_local("inc-admin.php3"); erreur_squelette(_T('erreur_boucle_syntaxe'), $id_boucle . _L(' : balise B en aval')); @@ -293,7 +289,6 @@ function parser($texte, $id_parent, &$boucles, $nom) { $s = "</BOUCLE$id_boucle>"; $p = strpos($milieu, $s); if ($p === false) { - include_local("inc-admin.php3"); erreur_squelette(_T('erreur_boucle_syntaxe'), _T('erreur_boucle_fermant', array('id'=>$id_boucle))); @@ -329,7 +324,6 @@ function parser($texte, $id_parent, &$boucles, $nom) { $all_res = array_merge($all_res, parser_champs_etendus($debut)); $all_res[] = $result; if ($boucles[$id_boucle]) { - include_local("inc-admin.php3"); erreur_squelette(_T('erreur_boucle_syntaxe'), _T('erreur_boucle_double', array('id'=>$id_boucle))); diff --git a/inc-public.php3 b/inc-public.php3 index ec1c808112..ea2d199da3 100644 --- a/inc-public.php3 +++ b/inc-public.php3 @@ -3,16 +3,11 @@ // 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('?' . '>' . $contenu); // page 'php' - } else - echo $contenu; // page tout 'html' + + if ($page['process_ins'] == 'html') + echo $page['texte']; + else + eval('?' . '>' . $page['texte']); if ($page['lang_select']) lang_dselect(); @@ -73,13 +68,12 @@ else { reponse_confirmation($id_article, $val_confirm); } + include_local ('inc-public-global.php3'); // demande de debug ? if ($var_debug AND ($code_activation_debug == $var_debug - OR ($code_activation_debug == '' - AND $auteur_session['statut'] == '0minirezo') + OR $auteur_session['statut'] == '0minirezo' )) { - include_local('inc-admin.php3'); $recalcul = 'oui'; $var_debug = true; spip_log('debug !'); @@ -88,17 +82,15 @@ else { // Faut-il preparer les boutons d'admin ? $affiche_boutons_admin = (!$flag_preserver - AND ($HTTP_COOKIE_VARS['spip_admin'] - OR $HTTP_COOKIE_VARS['spip_debug'])); - - // inc-admin contient aussi le traitement d'erreur - include_local('inc-admin.php3'); - include_local ("inc-public-global.php3"); + AND ($HTTP_COOKIE_VARS['spip_admin'] + OR $HTTP_COOKIE_VARS['spip_debug'])); + if ($affiche_boutons_admin) + include_local('inc-admin.php3'); $tableau_des_erreurs = array(); $page = afficher_page_globale ($fond, $delais, $use_cache); - // Interdire au client de cacher un login, un admin ou un recalcul + // 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"); @@ -108,12 +100,52 @@ else { @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)); + // Faudra-t-il post-traiter la page ? + define('spip_active_ob', $flag_ob AND + ($var_debug OR $var_recherche OR $affiche_boutons_admin)); + + // Cas d'une page contenant uniquement du HTML : + if ($page['process_ins'] == 'html') { + if (!spip_active_ob) { + echo $page['texte']; + $contenu = ''; + } else + $contenu = $page['texte']; + } + + // Cas d'une page contenant du PHP : + else { + + // Evaluer la page + if (!spip_active_ob) { + $res = eval('?' . '>' . $page['texte']); + $contenu = ''; + } else { + ob_start(); + $res = eval('?' . '>' . $page['texte']); + $contenu = ob_get_contents(); + ob_end_clean(); + } + + // en cas d'erreur afficher un message + demander boutons 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','','',''); + } + + } + + // Passer la main au debuggueur le cas echeant + if ($var_debug) { + debug_dumpfile(''); + exit; + } 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"); @@ -123,58 +155,10 @@ else { // 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) { - - // 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'); - } - - } + echo $contenu; - // - // Evaluer la page php - // - 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','','',''); - } - - } - // Passer la main au debuggueur le cas echeant - if ($var_debug) - debug_dumpfile(''); - else { - if (count($tableau_des_erreurs) > 0) - affiche_erreurs_execution_page (); - } - terminer_public_global($use_cache, $page['cache']); + terminer_public_global($use_cache, $page['cache']); } ?> -- GitLab