diff --git a/ecrire/base/typedoc.php b/ecrire/base/typedoc.php index 9742da521a30584fefa62a53a9f2016cfa906140..37b00f22cabc734c6f7c2a30d13ce1bbc20d4c17 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 fe6b29fd4bb5d697013e59a5d0d013f8adcb13ef..1fdfec99ee37d4a07fa8c3973b7521dc3ea31a1d 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); }