X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins-dist%2Fsvp%2Fteleporter%2Fhttp.php;fp=www%2Fplugins-dist%2Fsvp%2Fteleporter%2Fhttp.php;h=ada3d45c1f816670818bce099a2fcda48b3ca8f1;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=3da9589231db08880f4024336c122f5a6e3b3460;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git diff --git a/www/plugins-dist/svp/teleporter/http.php b/www/plugins-dist/svp/teleporter/http.php index 3da95892..ada3d45c 100644 --- a/www/plugins-dist/svp/teleporter/http.php +++ b/www/plugins-dist/svp/teleporter/http.php @@ -1,15 +1,18 @@ $extension)); + list($fichier, $extension) = $res; + if (!$deballe = charger_fonction("http_deballe_" . preg_replace(",\W,", "_", $extension), "teleporter", true)) { + return _T('svp:erreur_teleporter_format_archive_non_supporte', array('extension' => $extension)); + } $old = teleporter_nettoyer_vieille_version($dest); - if (!$target = $deballe($fichier, $dest, $tmp)){ + if (!$target = $deballe($fichier, $dest, $tmp)) { // retablir l'ancien sinon - if ($old) - rename($old,$dest); - return _T('svp:erreur_teleporter_echec_deballage_archive',array('fichier' => $fichier)); + if ($old) { + rename($old, $dest); + } + + return _T('svp:erreur_teleporter_echec_deballage_archive', array('fichier' => $fichier)); } return true; @@ -55,6 +62,8 @@ function teleporter_http_dist($methode,$source,$dest,$options=array()){ /** * Récupérer la source et détecter son extension * + * @uses teleporter_http_extension() + * * @param string $source * URL de la source HTTP * @param string $dest_tmp @@ -63,11 +72,12 @@ function teleporter_http_dist($methode,$source,$dest,$options=array()){ * - Texte d'erreur si une erreur survient, * - Liste sinon (répertoire de destination temporaire, extension du fichier source) */ -function teleporter_http_recuperer_source($source,$dest_tmp){ +function teleporter_http_recuperer_source($source, $dest_tmp) { # securite : ici on repart toujours d'une source neuve - if (file_exists($dest_tmp)) + if (file_exists($dest_tmp)) { spip_unlink($dest_tmp); + } $extension = ""; @@ -78,66 +88,77 @@ function teleporter_http_recuperer_source($source,$dest_tmp){ include_spip('inc/distant'); $head = recuperer_page($source, false, true, 0); - if (preg_match(",^Content-Type:\s*?(.*)$,Uims",$head,$m) - AND include_spip('base/typedoc')){ + if (preg_match(",^Content-Type:\s*?(.*)$,Uims", $head, $m) + and include_spip('base/typedoc') + ) { $mime = $m[1]; // passer du mime a l'extension ! - if ($e = array_search($mime,$GLOBALS['tables_mime'])) + if ($e = array_search($mime, $GLOBALS['tables_mime'])) { $extension = $e; + } } if (!$extension - // cas des extensions incertaines car mime-type ambigu - OR in_array($extension,array('bin','gz'))){ - if (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)['\"]?$,Uims",$head,$m) - AND $e=teleporter_http_extension($m[1])){ + // cas des extensions incertaines car mime-type ambigu + or in_array($extension, array('bin', 'gz')) + ) { + if (preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)['\"]?$,Uims", $head, $m) + and $e = teleporter_http_extension($m[1]) + ) { $extension = $e; } // au cas ou, si le content-type n'est pas la // mais que l'extension est explicite - else{ + else { $extension = teleporter_http_extension($source); } } # format de fichier inconnu if (!$extension) { - spip_log("Type de fichier inconnu pour la source $source","teleport"._LOG_ERREUR); - return _T('svp:erreur_teleporter_type_fichier_inconnu',array('source' => $source)); + spip_log("Type de fichier inconnu pour la source $source", "teleport" . _LOG_ERREUR); + + return _T('svp:erreur_teleporter_type_fichier_inconnu', array('source' => $source)); } - $dest_tmp = preg_replace(";\.[\w]{2,3}$;i","",$dest_tmp).".$extension"; + $dest_tmp = preg_replace(";\.[\w]{2,3}$;i", "", $dest_tmp) . ".$extension"; - if (!defined('_SVP_PAQUET_MAX_SIZE')) define('_SVP_PAQUET_MAX_SIZE', 67108864); // 64Mo + if (!defined('_SVP_PAQUET_MAX_SIZE')) { + define('_SVP_PAQUET_MAX_SIZE', 67108864); + } // 64Mo include_spip('inc/distant'); - $dest_tmp = copie_locale($source,'force',$dest_tmp,_SVP_PAQUET_MAX_SIZE); + $dest_tmp = copie_locale($source, 'force', $dest_tmp, _SVP_PAQUET_MAX_SIZE); if (!$dest_tmp - OR !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) { - spip_log("Chargement impossible de la source $source","teleport"._LOG_ERREUR); - return _T('svp:erreur_teleporter_chargement_source_impossible',array('source' => $source)); + or !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp) + ) { + spip_log("Chargement impossible de la source $source", "teleport" . _LOG_ERREUR); + + return _T('svp:erreur_teleporter_chargement_source_impossible', array('source' => $source)); } - return array($dest_tmp,$extension); + return array($dest_tmp, $extension); } /** - * Retrouve l'extension d'un fichier + * Retrouve l'extension d'un fichier * * @note * Retourne tgz pour un fichier .tar.gz - * + * * @param string $file * Chemin du fichier * @return string * Extension du fichier, sinon vide -**/ -function teleporter_http_extension($file){ + **/ +function teleporter_http_extension($file) { $e = pathinfo($file, PATHINFO_EXTENSION); // cas particuliers : redresser .tar.gz - if ($e=='gz' - AND preg_match(',tar\.gz,i',$file)) + if ($e == 'gz' + and preg_match(',tar\.gz,i', $file) + ) { $e = 'tgz'; + } return $e; } @@ -149,35 +170,43 @@ function teleporter_http_extension($file){ * Liste de chemin de fichiers * @return string * Chemin commun entre tous les fichiers -**/ -function http_deballe_recherche_racine($list){ + **/ +function http_deballe_recherche_racine($list) { // on cherche la plus longue racine commune a tous les fichiers // pour l'enlever au deballage $max_n = 999999; $paths = array(); - foreach($list as $n) { + foreach ($list as $n) { $p = array(); - foreach(explode('/', $n['filename']) as $n => $x) { - if ($n>$max_n) + foreach (explode('/', $n['filename']) as $n => $x) { + if ($n > $max_n) { continue; - $sofar = join('/',$p); + } + $sofar = join('/', $p); + if (!isset($paths[$n])) { + $paths[$n] = array(); + } + if (!isset($paths[$n][$sofar])) { + $paths[$n][$sofar] = 0; + } $paths[$n][$sofar]++; $p[] = $x; } - $max_n = min($n,$max_n); + $max_n = min($n, $max_n); } $total = $paths[0]['']; $i = 0; while (isset($paths[$i]) - AND count($paths[$i]) <= 1 - AND array_values($paths[$i]) == array($total)) + and count($paths[$i]) <= 1 + and array_values($paths[$i]) == array($total)) { $i++; + } $racine = ''; - if ($i){ - $racine = array_keys($paths[$i-1]); - $racine = array_pop($racine).'/'; + if ($i) { + $racine = array_keys($paths[$i - 1]); + $racine = array_pop($racine) . '/'; } return $racine;