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 :11 April 2025 at 18:01