From 34966dfcf9eb491228999a0254557027c9cf4bbc Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Fri, 22 Oct 2004 11:12:21 +0000 Subject: [PATCH] =?UTF-8?q?fonctions=20de=20debug=20SQL=20dans=20un=20fich?= =?UTF-8?q?ier=20s=C3=A9par=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc_db_mysql.php3 | 7 +- ecrire/inc_debug_sql.php3 | 224 ++++++++++++++++++++++++++++++++++++++ inc-admin.php3 | 218 +------------------------------------ 3 files changed, 229 insertions(+), 220 deletions(-) create mode 100644 ecrire/inc_debug_sql.php3 diff --git a/ecrire/inc_db_mysql.php3 b/ecrire/inc_db_mysql.php3 index 02b33ea632..8decc96a8e 100644 --- a/ecrire/inc_db_mysql.php3 +++ b/ecrire/inc_db_mysql.php3 @@ -74,11 +74,10 @@ function spip_mysql_select($select, $from, $where, . ", COUNT(".$sousrequete.") AS compteur " . $q .") AS S_$table WHERE compteur=" . $cpt; - // Erreur ? C'est du debug, ou une erreur du serveur - // il faudrait mettre ici le déclenchement du message MySQL - // actuellement dans erreur_requete_boucle + // Erreur ? C'est du debug de squelette, ou une erreur du serveur + if (!($res = @spip_query($q))) { - include_local('inc-admin.php3'); + include_ecrire('inc_debug_sql.php3'); echo erreur_requete_boucle($q, $id, $table); } diff --git a/ecrire/inc_debug_sql.php3 b/ecrire/inc_debug_sql.php3 new file mode 100644 index 0000000000..fa9d8910ae --- /dev/null +++ b/ecrire/inc_debug_sql.php3 @@ -0,0 +1,224 @@ +<?php + +// +// Ce fichier ne sera execute qu'une fois +if (defined("_INC_DEBUG_SQL")) return; +define("_INC_DEBUG_SQL", "1"); + +// Si le code php produit des erreurs, on les affiche en surimpression +// sauf pour un visiteur non admin (lui ne voit rien de special) +// ajouter &var_debug=oui pour voir les erreurs et en parler sur spip@rezo.net +function affiche_erreurs_page($tableau_des_erreurs) { + 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"), + +## 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[0], + ", <small>".$err[1]."</small><br />", + "</li>\n"; + } + echo "</ul>"; + echo "</ul></div>"; + $GLOBALS['bouton_admin_debug'] = true; +} + +// +// Si une boucle cree des soucis, on peut afficher la requete fautive +// avec son code d'erreur +// +function erreur_requete_boucle($query, $id_boucle, $type) { + + include_ecrire("inc_presentation.php3"); + + // Calmer le jeu avec MySQL (si jamais on est en saturation) + @touch(_FILE_MYSQL_OUT); // pour spip_cron + @touch(_FILE_LOCK); // lock hebergeur + spip_log('Erreur MySQL: on limite les acces quelques minutes'); + $GLOBALS['bouton_admin_debug'] = true; + + $erreur = spip_sql_error(); + $errno = spip_sql_errno(); + if (eregi('err(no|code):?[[:space:]]*([0-9]+)', $erreur, $regs)) + $errsys = $regs[2]; + else if (($errno == 1030 OR $errno <= 1026) + AND ereg('[^[:alnum:]]([0-9]+)[^[:alnum:]]', $erreur, $regs)) + $errsys = $regs[1]; + + // Erreur systeme + if ($errsys > 0 AND $errsys < 200) { + $retour .= "<tt><br><br><blink>" + . _T('info_erreur_systeme', array('errsys'=>$errsys)) + . "</blink><br>\n" + . _T('info_erreur_systeme2'); + spip_log("Erreur systeme $errsys"); + } + // Requete erronee + else { + $retour .= "<tt><blink><BOUCLE".$id_boucle.">(" + . $type . ")</blink><br>\n" + . "<b>"._T('avis_erreur_mysql')."</b><br>\n" + . htmlspecialchars($query) + . "<br><font color='red'><b>".htmlspecialchars($erreur) + . "</b></font><br>" + . "<blink></BOUCLE".$id_boucle."></blink></tt>\n"; + + include_ecrire('inc_lang.php3'); + utiliser_langue_visiteur(); + $retour .= aide('erreur_mysql'); + spip_log("Erreur MySQL BOUCLE$id_boucle (".$GLOBALS['fond'].".html)"); + } + + erreur_squelette($retour); +} + + +// +// Erreur de syntaxe des squelettes : memoriser le code fautif +// +function erreur_squelette($message='', $lieu='') { + global $tableau_des_erreurs; + global $auteur_session; + static $runs; + + if (is_array($message)) list($message, $lieu) = $message; + + spip_log("Erreur squelette: $message | $lieu (" + . $GLOBALS['fond'].".html)"); + $GLOBALS['bouton_admin_debug'] = true; + $tableau_des_erreurs[] = array($message, $lieu); + // Eviter les boucles infernales + if (++$runs > 4) { + if ($HTTP_COOKIE_VARS['spip_admin'] OR + $auteur_session['statut'] == '0minirezo' OR + $GLOBALS['var_debug']) { + die(affiche_erreurs_page($tableau_des_erreurs)); + } + } +} + +// +// Le debugueur v2 +// + +// appelee a chaque sortie de boucle (inc-compilo) +function boucle_debug_resultat ($nom, $resultat) { + global $debug_objets; + + // ne pas memoriser plus de 3 tours d'une meme boucle + if (count($debug_objets['resultats'][$nom]) < 3) + $debug_objets['resultats'][$nom][] = $resultat; +} + +// appelee a chaque compilation de boucle (inc-compilo) +function boucle_debug_compile ($id, $nom, $pretty, $sourcefile, $code) { + global $debug_objets; + + $debug_objets['code'][$nom.$id] = $code; + $debug_objets['pretty'][$nom.$id] = $pretty; +} + +// appelee a chaque compilation de squelette (inc-compilo) +function squelette_debug_compile($nom, $sourcefile, $squelette) { + global $debug_objets; + + $debug_objets['squelettes'][$nom] = $squelette; + $debug_objets['sourcefile'][$nom] = $sourcefile; +} + +// appelee a chaque parsing de squelette (inc-parser) +function boucle_debug ($id, $nom, $boucle) { + global $debug_objets; + + $debug_objets['boucle'][$nom.$id] = $boucle; +} + +// l'environnement graphique du debuggueur +function debug_dumpfile ($texte) { + + global $debug_objets, $debug_objet, $debug_affiche; + 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>"; + echo calcul_admin_page('', $page), + "<div id='spip-debug' style='position: absolute; top: 20; z-index: 1000;'><ul>\n"; + + foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) { + echo "<li><b>".$sourcefile."</b>"; + $link = new Link; + $link->addvar('debug_objet', $nom_skel); + $link->delvar('debug_affiche'); + echo " <a href='".$link->getUrl()."&debug_affiche=resultat'>resultat</a>"; + echo " <a href='".$link->getUrl()."&debug_affiche=code'>code</a>"; + echo "<ul>\n"; + + if (is_array($debug_objets['pretty'])) + foreach ($debug_objets['pretty'] as $nom => $pretty) + if (substr($nom, 0, strlen($nom_skel)) == $nom_skel) { + echo "<li>"; + $aff = "<".$pretty.">"; + if ($debug_objet == $nom) + $aff = "<b>$aff</b>"; + echo $aff; + $link = new Link; + $link->addvar('debug_objet', $nom); + $link->delvar('debug_affiche'); + echo " <a href='".$link->getUrl()."&debug_affiche=boucle' class='debug_link_boucle'>boucle</a>"; + echo " <a href='".$link->getUrl()."&debug_affiche=resultat' class='debug_link_resultat'>resultat</a>"; + echo " <a href='".$link->getUrl()."&debug_affiche=code' class='debug_link_code'>code</a>"; + echo "</li>\n"; + } + echo "</ul>\n</li>\n"; + } + echo "</ul>\n"; + + if ($debug_objet AND $debug_affiche == 'resultat' AND ($res = $debug_objets['resultats'][$debug_objet])) { + echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; + echo "<p class='spip-admin-bloc'>les premiers appels à cette boucle ont donné :</p>"; + foreach ($res as $view) + echo "<ul><fieldset>".interdire_scripts($view)."</fieldset></ul>"; + echo "</fieldset></div>"; + + } else if ($debug_objet AND $debug_affiche == 'code' AND $res = $debug_objets['code'][$debug_objet]) { + echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; + highlight_string("<"."?php\n".$res."\n?".">"); + echo "</fieldset></div>"; + } else if ($debug_objet AND $debug_affiche == 'boucle' AND $res = $debug_objets['boucle'][$debug_objet]) { + echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; + highlight_string($res); + echo "</fieldset></div>"; + } + + if ($texte) { + echo "<div id=\"debug_boucle\"><fieldset><legend>".$GLOBALS['debug_affiche']."</legend>"; + ob_start(); + highlight_string($texte); + $s = ob_get_contents(); + ob_end_clean(); + if (substr($s,0,6) == '<code>') { $s=substr($s,6); echo '<code>';} + $tableau = explode("<br />", $s); + $format = "<br />\n<span style='color: black'>%0". + strlen(count($tableau)). + "d </span>"; + $format10=str_replace('black','pink',$format); + $i=1; + foreach ($tableau as $ligne) + echo sprintf(($i%10) ? $format :$format10, $i++), $ligne ; + + + echo "</fieldset></div>"; + } + echo "\n</div></body>"; + if ($texte) exit; +} + +?> diff --git a/inc-admin.php3 b/inc-admin.php3 index 031ded0ad9..3c07c48c6b 100644 --- a/inc-admin.php3 +++ b/inc-admin.php3 @@ -5,6 +5,8 @@ if (defined("_INC_ADMIN")) return; define("_INC_ADMIN", "1"); +include_ecrire('inc_debug_sql.php3'); + // // Afficher un bouton admin // @@ -131,220 +133,4 @@ function calcul_admin_page($cached, $texte) { } -// Si le code php produit des erreurs, on les affiche en surimpression -// sauf pour un visiteur non admin (lui ne voit rien de special) -// ajouter &var_debug=oui pour voir les erreurs et en parler sur spip@rezo.net -function affiche_erreurs_page($tableau_des_erreurs) { - 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"), - -## 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[0], - ", <small>".$err[1]."</small><br />", - "</li>\n"; - } - echo "</ul>"; - echo "</ul></div>"; - $GLOBALS['bouton_admin_debug'] = true; -} - -// -// Si une boucle cree des soucis, on peut afficher la requete fautive -// avec son code d'erreur -// -function erreur_requete_boucle($query, $id_boucle, $type) { - - include_ecrire("inc_presentation.php3"); - - // Calmer le jeu avec MySQL (si jamais on est en saturation) - @touch(_FILE_MYSQL_OUT); // pour spip_cron - @touch(_FILE_LOCK); // lock hebergeur - spip_log('Erreur MySQL: on limite les acces quelques minutes'); - $GLOBALS['bouton_admin_debug'] = true; - - $erreur = spip_sql_error(); - $errno = spip_sql_errno(); - if (eregi('err(no|code):?[[:space:]]*([0-9]+)', $erreur, $regs)) - $errsys = $regs[2]; - else if (($errno == 1030 OR $errno <= 1026) - AND ereg('[^[:alnum:]]([0-9]+)[^[:alnum:]]', $erreur, $regs)) - $errsys = $regs[1]; - - // Erreur systeme - if ($errsys > 0 AND $errsys < 200) { - $retour .= "<tt><br><br><blink>" - . _T('info_erreur_systeme', array('errsys'=>$errsys)) - . "</blink><br>\n" - . _T('info_erreur_systeme2'); - spip_log("Erreur systeme $errsys"); - } - // Requete erronee - else { - $retour .= "<tt><blink><BOUCLE".$id_boucle.">(" - . $type . ")</blink><br>\n" - . "<b>"._T('avis_erreur_mysql')."</b><br>\n" - . htmlspecialchars($query) - . "<br><font color='red'><b>".htmlspecialchars($erreur) - . "</b></font><br>" - . "<blink></BOUCLE".$id_boucle."></blink></tt>\n"; - - include_ecrire('inc_lang.php3'); - utiliser_langue_visiteur(); - $retour .= aide('erreur_mysql'); - spip_log("Erreur MySQL BOUCLE$id_boucle (".$GLOBALS['fond'].".html)"); - } - - erreur_squelette($retour); -} - - -// -// Erreur de syntaxe des squelettes : memoriser le code fautif -// -function erreur_squelette($message='', $lieu='') { - global $tableau_des_erreurs; - global $auteur_session; - static $runs; - - if (is_array($message)) list($message, $lieu) = $message; - - spip_log("Erreur squelette: $message | $lieu (" - . $GLOBALS['fond'].".html)"); - $GLOBALS['bouton_admin_debug'] = true; - $tableau_des_erreurs[] = array($message, $lieu); - // Eviter les boucles infernales - if (++$runs > 4) { - if ($HTTP_COOKIE_VARS['spip_admin'] OR - $auteur_session['statut'] == '0minirezo' OR - $GLOBALS['var_debug']) { - die(affiche_erreurs_page($tableau_des_erreurs)); - } - } -} - -// -// Le debugueur v2 -// - -// appelee a chaque sortie de boucle (inc-compilo) -function boucle_debug_resultat ($nom, $resultat) { - global $debug_objets; - - // ne pas memoriser plus de 3 tours d'une meme boucle - if (count($debug_objets['resultats'][$nom]) < 3) - $debug_objets['resultats'][$nom][] = $resultat; -} - -// appelee a chaque compilation de boucle (inc-compilo) -function boucle_debug_compile ($id, $nom, $pretty, $sourcefile, $code) { - global $debug_objets; - - $debug_objets['code'][$nom.$id] = $code; - $debug_objets['pretty'][$nom.$id] = $pretty; -} - -// appelee a chaque compilation de squelette (inc-compilo) -function squelette_debug_compile($nom, $sourcefile, $squelette) { - global $debug_objets; - - $debug_objets['squelettes'][$nom] = $squelette; - $debug_objets['sourcefile'][$nom] = $sourcefile; -} - -// appelee a chaque parsing de squelette (inc-parser) -function boucle_debug ($id, $nom, $boucle) { - global $debug_objets; - - $debug_objets['boucle'][$nom.$id] = $boucle; -} - -// l'environnement graphique du debuggueur -function debug_dumpfile ($texte) { - - global $debug_objets, $debug_objet, $debug_affiche; - 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>"; - echo calcul_admin_page('', $page), - "<div id='spip-debug' style='position: absolute; top: 20; z-index: 1000;'><ul>\n"; - - foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) { - echo "<li><b>".$sourcefile."</b>"; - $link = new Link; - $link->addvar('debug_objet', $nom_skel); - $link->delvar('debug_affiche'); - echo " <a href='".$link->getUrl()."&debug_affiche=resultat'>resultat</a>"; - echo " <a href='".$link->getUrl()."&debug_affiche=code'>code</a>"; - echo "<ul>\n"; - - if (is_array($debug_objets['pretty'])) - foreach ($debug_objets['pretty'] as $nom => $pretty) - if (substr($nom, 0, strlen($nom_skel)) == $nom_skel) { - echo "<li>"; - $aff = "<".$pretty.">"; - if ($debug_objet == $nom) - $aff = "<b>$aff</b>"; - echo $aff; - $link = new Link; - $link->addvar('debug_objet', $nom); - $link->delvar('debug_affiche'); - echo " <a href='".$link->getUrl()."&debug_affiche=boucle' class='debug_link_boucle'>boucle</a>"; - echo " <a href='".$link->getUrl()."&debug_affiche=resultat' class='debug_link_resultat'>resultat</a>"; - echo " <a href='".$link->getUrl()."&debug_affiche=code' class='debug_link_code'>code</a>"; - echo "</li>\n"; - } - echo "</ul>\n</li>\n"; - } - echo "</ul>\n"; - - if ($debug_objet AND $debug_affiche == 'resultat' AND ($res = $debug_objets['resultats'][$debug_objet])) { - echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; - echo "<p class='spip-admin-bloc'>les premiers appels à cette boucle ont donné :</p>"; - foreach ($res as $view) - echo "<ul><fieldset>".interdire_scripts($view)."</fieldset></ul>"; - echo "</fieldset></div>"; - - } else if ($debug_objet AND $debug_affiche == 'code' AND $res = $debug_objets['code'][$debug_objet]) { - echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; - highlight_string("<"."?php\n".$res."\n?".">"); - echo "</fieldset></div>"; - } else if ($debug_objet AND $debug_affiche == 'boucle' AND $res = $debug_objets['boucle'][$debug_objet]) { - echo "<div id=\"debug_boucle\"><fieldset><legend>".$debug_objets['pretty'][$debug_objet]."</legend>"; - highlight_string($res); - echo "</fieldset></div>"; - } - - if ($texte) { - echo "<div id=\"debug_boucle\"><fieldset><legend>".$GLOBALS['debug_affiche']."</legend>"; - ob_start(); - highlight_string($texte); - $s = ob_get_contents(); - ob_end_clean(); - if (substr($s,0,6) == '<code>') { $s=substr($s,6); echo '<code>';} - $tableau = explode("<br />", $s); - $format = "<br />\n<span style='color: black'>%0". - strlen(count($tableau)). - "d </span>"; - $format10=str_replace('black','pink',$format); - $i=1; - foreach ($tableau as $ligne) - echo sprintf(($i%10) ? $format :$format10, $i++), $ligne ; - - - echo "</fieldset></div>"; - } - echo "\n</div></body>"; - if ($texte) exit; -} - ?> -- GitLab