Carnet Wiki

trouver_le_squelette_incluant

Version 3 — Février 2019 JLuc

Cette fonction

get_squelette_incluant</code>,  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.


<code class='php'>
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 .481 ms le squel =structure-admin
Feb 25 23:33:30 ### Trouvé à la prof 10/16 	 avec inclure_page en .536 ms le squel =structure-admin
Feb 25 23:36:25 ### Trouvé à la prof 7/25 	 avec inclure_page en .470 ms le squel =inclure/xray_marqueur_invisible
Feb 25 23:36:30 ### Trouvé à la prof 7/37 	 avec inclure_page en .663 ms le squel =inclure/element/article_texte
Feb 25 23:36:57 ### Trouvé à la prof 7/38 	 avec inclure_page en .627 ms le squel =inclure/element/article_texte
Feb 26 00:02:15 ### Trouvé à la prof 7/29 	 avec inclure_page en .642 ms le squel =inclure/element/article_texte