From 5157ff930f9dc7059a8176bd892206e5281ecad8 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 4 Nov 2011 11:33:23 +0000 Subject: [PATCH] Type de fichier distant : lorsque le mime-type est non discriminant (text/plain ou application/octet-stream) ou absent, mais qu'un en-tete Content-Disposition: attachment; filename=... est present, s'en servir pour identifier l'extension et le type du fichier si possible (et si l'url n'a pas d'extension elle meme) --- ecrire/inc/distant.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index c53c5b7cf1..63b1b0d9b7 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -448,12 +448,22 @@ function recuperer_infos_distantes($source, $max=0, $charger_si_petite_image = t while (isset($mime_alias[$mime_type])) $mime_type = $mime_alias[$mime_type]; - // Si on a text/plain, c'est peut-etre que le serveur ne sait pas + // Si on a un mime-type insignifiant + // text/plain,application/octet-stream ou vide + // c'est peut-etre que le serveur ne sait pas // ce qu'il sert ; on va tenter de detecter via l'extension de l'url + // ou le Content-Disposition: attachment; filename=... $t = null; - if (($mime_type == 'text/plain' OR $mime_type == '') - AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) { - $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1])); + if (in_array($mime_type,array('text/plain','','application/octet-stream'))){ + if (!$t + AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) { + $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1])); + } + if (!$t + AND preg_match(",^Content-Disposition:\s*attachment;\s*filename=(.*)$,Uims",$headers,$m) + AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $m[1], $rext)){ + $t = sql_fetsel("extension", "spip_types_documents", "extension=" . sql_quote($rext[1])); + } } // Autre mime/type (ou text/plain avec fichier d'extension inconnue) -- GitLab