From 258371e1d85d205a1976cb627fc96d4e22edd781 Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Mon, 5 Mar 2007 22:41:36 +0000 Subject: [PATCH] meilleure heuristique de detection des formats pour les documents distants (avec plein de BoOz et d'Alexandra dedans) --- ecrire/base/typedoc.php | 3 +++ ecrire/inc/distant.php | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/ecrire/base/typedoc.php b/ecrire/base/typedoc.php index 9742da521a..37b00f22ca 100644 --- a/ecrire/base/typedoc.php +++ b/ecrire/base/typedoc.php @@ -199,6 +199,9 @@ $tables_mime = array( $mime_alias = array ( + 'audio/x-mpeg' => 'audio/mpeg', + 'application/x-ogg' => 'application/ogg', + 'video/mp4' => 'application/mp4', 'video/flv' => 'video/x-flv' ); diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php index fe6b29fd4b..1fdfec99ee 100644 --- a/ecrire/inc/distant.php +++ b/ecrire/inc/distant.php @@ -316,19 +316,39 @@ function recuperer_infos_distantes($source, $max=0) { // ca echoue l'utilisateur devra les entrer... if ($headers = recuperer_page($source, false, true, $max)) { list($headers, $a['body']) = split("\n\n", $headers, 2); - $t = preg_match(",\nContent-Type: *([^[:space:];]*),i", - "\n$headers", $regs); - if ($t) { - $mime_type = (trim($regs[1])); - // Appliquer les alias - while (isset($mime_alias[$mime_type])) - $mime_type = $mime_alias[$mime_type]; + if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) + $mime_type = (trim($regs[1])); + else + $mime_type = ''; // inconnu + + // Appliquer les alias + 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 + // ce qu'il sert ; on va tenter de detecter via l'extension de l'url + $t = null; + if (($mime_type == 'text/plain' OR $mime_type == '') + AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) { + $t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE extension=" . _q($rext[1]))); + } + // Autre mime/type (ou text/plain avec fichier d'extension inconnue) + if (!$t) $t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE mime_type=" . _q($mime_type))); + + // Toujours rien ? (ex: audio/x-ogg au lieu de application/ogg) + // On essaie de nouveau avec l'extension + if (!$t + AND $mime_type != 'text/plain' + AND preg_match(',\.([a-z0-9]+)(\?.*)?$,', $source, $rext)) { + $t = spip_fetch_array(spip_query("SELECT id_type,extension FROM spip_types_documents WHERE extension=" . _q($rext[1]))); } + + if ($t) { - spip_log("mime-type $mime_type ok"); + spip_log("mime-type $mime_type ok, extension ".$t['extension']); $a['id_type'] = $t['id_type']; $a['extension'] = $t['extension']; } else { @@ -347,7 +367,7 @@ function recuperer_infos_distantes($source, $max=0) { // Echec avec HEAD, on tente avec GET if (!$a AND !$max) { - spip_log("tente $source"); + spip_log("tenter GET $source"); $a = recuperer_infos_distantes($source, 1024*1024); } -- GitLab