Carnet Wiki

trouver_le_squelette_incluant

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
JLuc - Mise à jour :26 February 2019 at 11:01