function chrono_requete($temps) { $total = 0; $hors = "<i>" . _T('zbug_hors_compilation') . "</i>"; $t = $q = $n = $d = array(); // Totaliser les temps et completer le Explain foreach ($temps as $key => $v) { list($dt, $nb, $boucle, $query, $explain, $res, $contexte) = $v; if (is_array($contexte)) { $k = $contexte[0] . " {$boucle}"; include_spip('public/compiler'); $env = reconstruire_contexte_compil($contexte); } else { $k = $env = $boucle; } $total += $dt; $t[$key] = $dt; $q[$key] = $nb; $d[$k] += $dt; if ($k) { @++$n[$k]; } if (!is_array($explain)) { $explain = array(); } foreach ($explain as $j => $v) { $explain[$j] = "<tr><th>{$j}</th><td>" . str_replace(';', '<br />', $v) . "</td></tr>"; } $e = "<table class='explain'>" . "<caption>" . $query . "</caption>" . "<tr><th>Time</th><td>{$dt}</td></tr>" . "<tr><th>Order</th><td>{$nb}</td></tr>" . "<tr><th>Res</th><td>{$res}</td></tr>" . join('', $explain) . "</table>"; $temps[$key] = array($e, $env, $k); } // Trier par temps d'execution decroissant array_multisort($t, SORT_DESC, $q, $temps); arsort($d); $i = 1; $t = array(); // Fabriquer les liens de navigations dans le tableau des temps foreach ($temps as $k => $v) { $titre = strip_tags($v[2]); $href = quote_amp($GLOBALS['REQUEST_URI']) . "#req{$i}"; $t[$v[2]][] = "<span class='spip-debug-arg'> " . "<a title='{$titre}' href='{$href}'>{$i}</a>" . '</span>' . (count($t[$v[2]]) % 10 == 9 ? "<br />" : ''); $i++; } if ($d['']) { $d[$hors] = $d['']; $n[$hors] = $n['']; $t[$hors] = $t['']; } unset($d['']); // Fabriquer le tableau des liens de navigation dans le grand tableau foreach ($d as $k => $v) { $d[$k] = $n[$k] . "</td><td>{$k}</td><td class='time'>{$v}</td><td class='liste-reqs'>" . join('', $t[$k]); } $navigation = _T('zbug_statistiques') . "<table style='text-align: left; border: 1px solid;'><tr><td>" . join("</td></tr>\n<tr><td>", $d) . "</td></tr>\n" . ("<tr><td>" . count($temps) . "</td><td>" . _T('info_total') . '</td><td class="time">' . $total . "</td><td></td></tr>") . "</table>"; return array($temps, $navigation); }
/** * Génère une erreur de squelette * * Génère une erreur de squelette qui sera bien visible par un * administrateur authentifié lors d'une visite de la page en erreur * * @param bool|string|array $message * - Message d'erreur (string|array) * - false pour retourner le texte des messages d'erreurs * - vide pour afficher les messages d'erreurs * @param string|array|object $lieu * Lieu d'origine de l'erreur * @return null|string * - Rien dans la plupart des cas * - string si $message à false. **/ function erreur_squelette($message = '', $lieu = '') { $debusquer = charger_fonction('debusquer', 'public'); if (is_array($lieu)) { include_spip('public/compiler'); $lieu = reconstruire_contexte_compil($lieu); } return $debusquer($message, $lieu); }