[ Index ] |
|
Code source de SPIP 1.9.2c |
1 <?php 2 3 /***************************************************************************\ 4 * SPIP, Systeme de publication pour l'internet * 5 * * 6 * Copyright (c) 2001-2007 * 7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * 8 * * 9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * 10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * 11 \***************************************************************************/ 12 13 14 // Distinguer une inclusion d'un appel initial 15 if (defined('_INC_PUBLIC')) { 16 17 // $fond passe par INCLURE(){fond=...} 18 if (isset($contexte_inclus['fond'])) 19 $fond = $contexte_inclus['fond']; 20 $subpage = inclure_page($fond, $contexte_inclus); 21 22 if ($subpage['process_ins'] == 'html') 23 echo $subpage['texte']; 24 else 25 eval('?' . '>' . $subpage['texte']); 26 27 if ($subpage['lang_select'] === true) 28 lang_dselect(); 29 30 } else { 31 define ('_INC_PUBLIC', 1); 32 33 // 34 // Discriminer les appels 35 // 36 37 // Faut-il initialiser SPIP ? (oui dans le cas general) 38 if (!defined('_DIR_RESTREINT_ABS')) 39 if (defined('_DIR_RESTREINT') 40 AND @file_exists(_DIR_RESTREINT.'inc_version.php')) { 41 include_once _DIR_RESTREINT.'inc_version.php'; 42 } 43 else 44 die('stupid death...'); 45 46 47 // Est-ce une action ? 48 if ($action = _request('action')) { 49 include_spip('inc/autoriser'); // chargement systematique pour les actions 50 include_spip('inc/headers'); 51 $var_f = charger_fonction($action, 'action'); 52 $var_f(); 53 if (isset($redirect) && $redirect) redirige_par_entete(urldecode($redirect)); 54 exit; 55 } 56 57 // cas normal, $fond defini dans le fichier d'appel 58 // note : securise anti-injection par inc/utils.php 59 else if (isset($fond)) { } 60 61 // page=xxxx demandee par l'url 62 else if (isset($_GET['page'])) { 63 $fond = $_GET['page']; 64 // Securite 65 if (strstr($fond, '/')) { 66 include_spip('inc/minipres'); 67 echo minipres(); 68 exit; 69 } 70 71 # par defaut 72 } else { 73 // traiter le cas pathologique d'un upload de document ayant echoue 74 // car trop gros 75 if (empty($_GET) AND empty($_POST) AND empty($_FILES) 76 AND strlen($_SERVER["CONTENT_LENGTH"]) >= 7 77 AND strstr($_SERVER["CONTENT_TYPE"], "multipart/form-data;")) { 78 include_spip('inc/getdocument'); 79 erreur_upload_trop_gros(); 80 } 81 82 // mais plus probablement nous sommes dans le cas 83 $fond = 'sommaire'; 84 } 85 86 // Particularites de certains squelettes 87 if ($fond == 'login') 88 $forcer_lang = true; 89 90 91 // 92 // Aller chercher la page 93 // 94 95 $tableau_des_erreurs = array(); 96 $assembler = charger_fonction('assembler', 'public'); 97 $page = $assembler($fond); 98 99 if (isset($page['status'])) { 100 include_spip('inc/headers'); 101 http_status($page['status']); 102 } 103 104 // Content-Type ? 105 if (!isset($page['entetes']['Content-Type'])) { 106 $page['entetes']['Content-Type'] = 107 "text/html; charset=" . $GLOBALS['meta']['charset']; 108 $html = true; 109 } else { 110 $html = preg_match(',^\s*text/html,',$page['entetes']['Content-Type']); 111 } 112 113 if ($var_preview AND $html) { 114 include_spip('inc/minipres'); 115 $page['texte'] .= afficher_bouton_preview(); 116 } 117 118 // est-on admin ? 119 if ($affiche_boutons_admin = ( 120 isset($_COOKIE['spip_admin']) 121 AND !$flag_preserver 122 AND ($html OR ($var_mode == 'debug') OR count($tableau_des_erreurs)) 123 AND !_request('var_fragment') 124 )) 125 include_spip('balise/formulaire_admin'); 126 127 // Execution de la page calculee 128 129 // decomptage des visites, on peut forcer a oui ou non avec le header X-Spip-Visites 130 // par defaut on ne compte que les pages en html (ce qui exclue les js,css et flux rss) 131 $spip_compter_visites = $html?'oui':'non'; 132 if (isset($page['entetes']['X-Spip-Visites'])){ 133 $spip_compter_visites = in_array($page['entetes']['X-Spip-Visites'],array('oui','non'))?$page['entetes']['X-Spip-Visites']:$spip_compter_visites; 134 unset($page['entetes']['X-Spip-Visites']); 135 } 136 137 // 0. xml-hack 138 if ($xml_hack = isset($page['entetes']['X-Xml-Hack'])) 139 unset($page['entetes']['X-Xml-Hack']); 140 141 // 1. Cas d'une page contenant uniquement du HTML : 142 if ($page['process_ins'] == 'html') { 143 foreach($page['entetes'] as $k => $v) @header("$k: $v"); 144 } 145 146 // 2. Cas d'une page contenant du PHP : 147 // Attention cette partie eval() doit imperativement 148 // etre declenchee dans l'espace des globales (donc pas 149 // dans une fonction). 150 else { 151 // Si la retention du flux de sortie est impossible 152 // envoi des entetes 153 if (!$flag_ob) { 154 foreach($page['entetes'] as $k => $v) @header("$k: $v"); 155 156 // si un fragment est demande, on le provoque ici 157 // (mais ca peut planter) 158 if (($var_fragment=_request('var_fragment'))!==NULL) { 159 preg_match(',<div id="'.preg_quote($var_fragment) 160 .'" class="fragment">(.*)<!-- /'.preg_quote($var_fragment) 161 .' --></div>,Uims', $page['texte'], $r); 162 $page['texte'] = $r[1]; 163 } 164 165 eval('?' . '>' . $page['texte']); 166 $page['texte'] = ''; 167 } 168 169 // sinon, inclure_balise_dynamique nous enverra peut-etre 170 // quelques en-tetes de plus (voire qq envoyes directement) 171 else { 172 ob_start(); 173 $res = eval('?' . '>' . $page['texte']); 174 $page['texte'] = ob_get_contents(); 175 ob_end_clean(); 176 177 foreach($page['entetes'] as $k => $v) @header("$k: $v"); 178 // en cas d'erreur lors du eval, 179 // la memoriser dans le tableau des erreurs 180 // On ne revient pas ici si le nb d'erreurs > 4 181 if ($res === false AND $affiche_boutons_admin 182 AND $auteur_session['statut'] == '0minirezo') { 183 include_spip('public/debug'); 184 erreur_squelette(_T('zbug_erreur_execution_page')); 185 } 186 } 187 } 188 189 // Passer la main au debuggueur le cas echeant 190 if ($var_mode == 'debug') { 191 include_spip('public/debug'); 192 debug_dumpfile($var_mode_affiche== 'validation' ? $page['texte'] :"", 193 $var_mode_objet,$var_mode_affiche); 194 } 195 196 if (count($tableau_des_erreurs) AND $affiche_boutons_admin) 197 $page['texte'] = affiche_erreurs_page($tableau_des_erreurs) 198 . $page['texte']; 199 200 // 201 // Post-traitements et affichage final 202 // 203 204 // si un fragment est demande, l'isoler 205 if (($var_fragment=_request('var_fragment'))!==NULL) { 206 preg_match(',<div id="'.preg_quote($var_fragment) 207 .'" class="fragment">(.*)<!-- /'.preg_quote($var_fragment) 208 .' --></div>,Uims', $page['texte'], $r); 209 $page['texte'] = $r[1]; 210 } 211 212 // Report du hack pour <?xml (cf. public/compiler.php) 213 if ($xml_hack) 214 $page['texte'] = str_replace("<\1?xml", '<'.'?xml', $page['texte']); 215 216 // (c'est ici qu'on fait var_recherche, tidy, boutons d'admin, 217 // cf. public/assembler.php) 218 echo pipeline('affichage_final', $page['texte']); 219 220 // Gestion des statistiques du site public 221 if (($GLOBALS['meta']["activer_statistiques"] != "non") 222 AND $spip_compter_visites!='non') { 223 $stats = charger_fonction('stats', 'public'); 224 $stats(); 225 } 226 227 // Effectuer une tache de fond ? 228 // si #SPIP_CRON est present, on ne le tente que pour les navigateurs 229 // en mode texte (par exemple), et seulement sur les pages web 230 if ($html 231 AND !strstr($page['texte'], '<!-- SPIP-CRON -->') 232 AND !preg_match(',msie|mozilla|opera|konqueror,i', $_SERVER['HTTP_USER_AGENT'])) 233 cron(); 234 } 235 236 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Wed Nov 21 10:20:27 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |