[ 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 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') . " >>' /></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 ?>
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 |
![]() |