[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/ -> public.php (source)

   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  ?>


Généré le : Wed Nov 21 10:20:27 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics