Cette fonction get_squelette_incluant
, appelée pendant le calcul d’une page, cherche dans la pile d’exécution PHP quel est le squelette incluant et la fonction qui a généré l’inclusion. Elle génère aussi des logs précisant les profondeurs.
function get_squelette_incluant () {
spip_timer('get_squelette_incluant');
$stack = debug_backtrace();
$count = count($stack);
$squelette_functions = array(
'recuperer_page', 'recuperer_fond', 'inclure_page', 'evaluer_fond', // contexte squelette
'supprimer_sessions' // pas de contexte squelette
);
for($i=6;
($i < count($stack)) and !in_array($stack[$i]['function'], $squelette_functions);
$i++);
if ($i >= count($stack)) {
spip_log ("get_squelette_incluant n'a pas trouvé de fonction indicative du squelette contexte dans la pile php\n".print_r($stack,1), 'ERREUR_get_squelette_incluant');
return null;
}
// Quand c'est pas supprimer_sessions, le 1er argument est le fond
$function = $stack[$i]['function'];
spip_log ("Trouvé à la prof $i/$count \t avec $function en ".spip_timer('get_squelette_incluant')." le squel =".$stack[$i]['args'][0], "get_squelette_incluant");
return array($function, $stack[$i]['args'][0]);
}
Exemples de logs générés :
Feb 25 23:33:26 ### Trouvé à la prof 7/13 avec inclure_page en 0.481 ms le squel =structure-admin
Feb 25 23:33:30 ### Trouvé à la prof 10/16 avec inclure_page en 0.536 ms le squel =structure-admin
Feb 25 23:36:25 ### Trouvé à la prof 7/25 avec inclure_page en 0.470 ms le squel =inclure/xray_marqueur_invisible
Feb 25 23:36:30 ### Trouvé à la prof 7/37 avec inclure_page en 0.663 ms le squel =inclure/element/article_texte
Feb 25 23:36:57 ### Trouvé à la prof 7/38 avec inclure_page en 0.627 ms le squel =inclure/element/article_texte
Feb 26 00:02:15 ### Trouvé à la prof 7/29 avec inclure_page en 0.642 ms le squel =inclure/element/article_texte