[ Index ]
 

Code source de SPIP 1.9.2c

Accédez au Source d'autres logiciels libres

title

Body

[fermer]

/ecrire/inc/ -> getdocument.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  if (!defined("_ECRIRE_INC_VERSION")) return;
  14  
  15  include_spip('inc/minipres');
  16  
  17  // Creer IMG/pdf/
  18  // http://doc.spip.org/@creer_repertoire_documents
  19  function creer_repertoire_documents($ext) {
  20      $rep = sous_repertoire(_DIR_DOC, $ext);
  21  
  22      if (!$ext OR !$rep) {
  23          spip_log("creer_repertoire_documents interdit");
  24          exit;
  25      }
  26  
  27      if ($GLOBALS['meta']["creer_htaccess"] == 'oui') {
  28          include_spip('inc/acces');
  29          verifier_htaccess($rep);
  30      }
  31  
  32      return $rep;
  33  }
  34  
  35  // Efface le repertoire de maniere recursive !
  36  // http://doc.spip.org/@effacer_repertoire_temporaire
  37  function effacer_repertoire_temporaire($nom) {
  38      $d = opendir($nom);
  39      while (($f = readdir($d)) !== false) {
  40          if (is_file("$nom/$f"))
  41              @unlink("$nom/$f");
  42          else if ($f <> '.' AND $f <> '..'
  43          AND is_dir("$nom/$f"))
  44              effacer_repertoire_temporaire("$nom/$f");
  45      }
  46      @rmdir($nom);
  47  }
  48  
  49  // http://doc.spip.org/@copier_document
  50  function copier_document($ext, $orig, $source) {
  51  
  52      $dir = creer_repertoire_documents($ext);
  53      $dest = ereg_replace("[^.a-zA-Z0-9_=-]+", "_", 
  54              translitteration(ereg_replace("\.([^.]+)$", "", 
  55                                ereg_replace("<[^>]*>", '', basename($orig)))));
  56  
  57      // ne pas accepter de noms de la forme -r90.jpg qui sont reserves
  58      // pour les images transformees par rotation (action/documenter)
  59      $dest = preg_replace(',-r(90|180|270)$,', '', $dest);
  60  
  61      // Si le document "source" est deja au bon endroit, ne rien faire
  62      if ($source == ($dir . $dest . '.' . $ext))
  63          return $source;
  64  
  65      // sinon tourner jusqu'a trouver un numero correct
  66      $n = 0;
  67      while (@file_exists($newFile = $dir . $dest .($n++ ? ('-'.$n) : '').'.'.$ext));
  68  
  69      return (deplacer_fichier_upload($source, $newFile)) ? $newFile : '';
  70  }
  71  
  72  //
  73  // Deplacer un fichier
  74  //
  75  
  76  // http://doc.spip.org/@deplacer_fichier_upload
  77  function deplacer_fichier_upload($source, $dest, $move=false) {
  78      // Securite
  79      ## !! interdit pour le moment d'uploader depuis l'espace prive (UPLOAD_DIRECT)
  80      if (strstr($dest, "..")) {
  81          spip_log("stop deplacer_fichier_upload: '$dest'");
  82          exit;
  83      }
  84  
  85      if ($move)    $ok = @rename($source, $dest);
  86      else                $ok = @copy($source, $dest);
  87      if (!$ok) $ok = @move_uploaded_file($source, $dest);
  88      if ($ok)
  89          @chmod($dest, _SPIP_CHMOD & ~0111);
  90      else {
  91          $f = @fopen($dest,'w');
  92          if ($f) {
  93              fclose ($f);
  94          } else {
  95              include_spip('inc/headers');
  96              redirige_par_entete(generer_url_action("test_dirs", "test_dir=". dirname($dest), true));
  97          }
  98          @unlink($dest);
  99      }
 100      return $ok;
 101  }
 102  
 103  
 104  // Erreurs d'upload
 105  // renvoie false si pas d'erreur
 106  // et true si erreur = pas de fichier
 107  // pour les autres erreurs affiche le message d'erreur et meurt
 108  // http://doc.spip.org/@check_upload_error
 109  function check_upload_error($error, $msg='') {
 110      global $spip_lang_right;
 111      switch ($error) {
 112          case 0:
 113              return false;
 114          case 4: /* UPLOAD_ERR_NO_FILE */
 115              return true;
 116  
 117          # on peut affiner les differents messages d'erreur
 118          case 1: /* UPLOAD_ERR_INI_SIZE */
 119              $msg = _T('upload_limit',
 120              array('max' => ini_get('upload_max_filesize')));
 121              break;
 122          case 2: /* UPLOAD_ERR_FORM_SIZE */
 123              $msg = _T('upload_limit',
 124              array('max' => ini_get('upload_max_filesize')));
 125              break;
 126          case 3: /* UPLOAD_ERR_PARTIAL  */
 127              $msg = _T('upload_limit',
 128              array('max' => ini_get('upload_max_filesize')));
 129              break;
 130          
 131          default: /* autre */
 132              $msg = _T('pass_erreur').' '. $error
 133              . '<br />' . propre("[->http://php.net/manual/fr/features.file-upload.errors.php]");
 134              break;
 135      }
 136  
 137      spip_log ("erreur upload $error");
 138  
 139    if(_request("iframe")=="iframe") {
 140      echo "<div class='upload_answer upload_error'>$msg</div>";
 141      exit;
 142    }
 143    
 144   #ici method='post' permet d'aller au bon endroit, alors qu'en GET on perd les variables... mais c'est un hack sale.
 145      echo minipres($msg, "<form method='post' action='" .    rawurldecode($GLOBALS['redirect']) . "'><div align='$spip_lang_right'><input type='submit' class='fondl'  value='".    _T('ecrire:bouton_suivant') . " &gt;&gt;' /></div></form>");
 146      exit;
 147  }
 148  
 149  // Erreur appelee depuis public.php (la precedente ne fonctionne plus
 150  // depuis qu'on est sortis de spip_image.php, apparemment).
 151  // http://doc.spip.org/@erreur_upload_trop_gros
 152  function erreur_upload_trop_gros() {
 153      include_spip('inc/filtres');
 154      
 155      $msg =         "<p>"
 156          .taille_en_octets($_SERVER["CONTENT_LENGTH"])
 157          .'<br />'
 158          ._T('upload_limit',
 159          array('max' => ini_get('upload_max_filesize')))
 160          ."</p>";
 161      
 162    echo minipres(_T('pass_erreur'),"<div class='upload_answer upload_error'>".$msg."</div>");
 163      exit;
 164  }
 165  
 166  //
 167  // Gestion des fichiers ZIP
 168  //
 169  // http://doc.spip.org/@accepte_fichier_upload
 170  function accepte_fichier_upload ($f) {
 171      if (!ereg(".*__MACOSX/", $f)
 172      AND !ereg("^\.", basename($f))) {
 173          $ext = corriger_extension((strtolower(substr(strrchr($f, "."), 1))));
 174          $row =  @spip_fetch_array(spip_query("SELECT extension FROM spip_types_documents WHERE extension=" . _q($ext) . " AND upload='oui'"));
 175          return $row;
 176      }
 177  }
 178  
 179  # callback pour le deballage d'un zip telecharge
 180  # http://www.phpconcept.net/pclzip/man/en/?options-pclzip_cb_pre_extractfunction
 181  // http://doc.spip.org/@callback_deballe_fichier
 182  function callback_deballe_fichier($p_event, &$p_header) {
 183      if (accepte_fichier_upload($p_header['filename'])) {
 184          $p_header['filename'] = _tmp_dir . basename($p_header['filename']);
 185          return 1;
 186      } else {
 187          return 0;
 188      }
 189  }
 190  
 191  ?>


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