Nous étions en train de tester la gestion des fichiers de l'ENT lorsque mon collègue m'a fait part d'une erreur sur les fichiers MS Office Excel de version postérieur à l'Office 2003. En effet, lorsque nous mettions un fichier xlsx en ligne, MS Office nous renvoyait le message d'erreur :
The file you are trying to open, MonFichier.xlsx.xls, is in a different format than specified by the file extension. Verify the file is not corrupted and is from trusted source before opening the file. Do you want to open the file now?
Le problème ne se pose pas avec Internet Explorer, ni avec Google Chrome et pas plus avec Safari. Nous ne le rencontrions qu'avec Firefox (actuellement la version 18.0.2) et si le document était enregistré au préalable sur le disque dur puis ouvert, il n'y avait pas d'erreur non plus. J'en ai donc conclu que cela venait de la gestion des types MIME MS Office.
En regardant le code d’Agora-Project, j'ai conclu que les fonctions de traitement des types MIME des fichiers se trouvaient dans le fichier ./fonctions/fichier.inc.php
Pour corriger l'erreur, j’ai donc modifié ce fichier en me basant sur ce document :
http://blogs.msdn.com/b/vsofficedevelop ... types.aspx
J’ai remplacé les lignes 9, 10 et 11 :
Code : Tout sélectionner
($type=="word" && preg_match("/(\.doc|\.docx|\.docm|\.dotx|\.dotm)$/i",$nom_fichier)) ||
($type=="excel" && preg_match("/(\.xls|\.xlsx|\.xlsm|\.xltx|\.xltm)$/i",$nom_fichier)) ||
($type=="powerpoint" && preg_match("/(\.ppt|\.pptx|\.pptm|\.potx|\.potm|\.pps|\.ppsx)$/i",$nom_fichier)) ||
Code : Tout sélectionner
($type=="word" && preg_match("/(\.doc|\.dot)$/i",$nom_fichier)) ||
($type=="word2007" && preg_match("/(\.docx)$/i",$nom_fichier)) ||
($type=="word2007t" && preg_match("/(\.dotx)$/i",$nom_fichier)) ||
($type=="word2007m" && preg_match("/(\.docm)$/i",$nom_fichier)) ||
($type=="word2007tm" && preg_match("/(\.dotm)$/i",$nom_fichier)) ||
($type=="excel" && preg_match("/(\.xls|\.xlt|\.xla)$/i",$nom_fichier)) ||
($type=="excel2007" && preg_match("/(\.xlsx)$/i",$nom_fichier)) ||
($type=="excel2007t" && preg_match("/(\.xltx)$/i",$nom_fichier)) ||
($type=="excel2007m" && preg_match("/(\.xlsm)$/i",$nom_fichier)) ||
($type=="excel2007tm" && preg_match("/(\.xltm)$/i",$nom_fichier)) ||
($type=="excel2007am" && preg_match("/(\.xlam)$/i",$nom_fichier)) ||
($type=="excel2007b" && preg_match("/(\.xlsb)$/i",$nom_fichier)) ||
($type=="powerpoint" && preg_match("/(\.ppt|\.pot|\.pps|\.ppa)$/i",$nom_fichier)) ||
($type=="powerpoint2007" && preg_match("/(\.pptx)$/i",$nom_fichier)) ||
($type=="powerpoint2007t" && preg_match("/(\.potx)$/i",$nom_fichier)) ||
($type=="powerpoint2007s" && preg_match("/(\.ppsx)$/i",$nom_fichier)) ||
($type=="powerpoint2007am" && preg_match("/(\.ppam)$/i",$nom_fichier)) ||
($type=="powerpoint2007tm" && preg_match("/(\.pptm|\.potm)$/i",$nom_fichier)) ||
($type=="powerpoint2007sm" && preg_match("/(\.ppsm)$/i",$nom_fichier)) ||
Code : Tout sélectionner
if(controle_fichier("word",$nom_fichier)) { $content_type = "application/msword"; }
elseif(controle_fichier("excel",$nom_fichier)) { $content_type = "application/vnd.ms-excel"; }
elseif(controle_fichier("powerpoint",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint"; }
Code : Tout sélectionner
if(controle_fichier("word",$nom_fichier)) { $content_type = "application/msword"; }
elseif(controle_fichier("word2007",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; }
elseif(controle_fichier("word2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; }
elseif(controle_fichier("word2007m",$nom_fichier)) { $content_type = "application/vnd.ms-word.document.macroEnabled.12"; }
elseif(controle_fichier("word2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-word.template.macroEnabled.12"; }
elseif(controle_fichier("excel",$nom_fichier)) { $content_type = "application/vnd.ms-excel"; }
elseif(controle_fichier("excel2007",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; }
elseif(controle_fichier("excel2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; }
elseif(controle_fichier("excel2007m",$nom_fichier)) { $content_type = "application/vnd.ms-excel.sheet.macroEnabled.12"; }
elseif(controle_fichier("excel2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-excel.template.macroEnabled.12"; }
elseif(controle_fichier("excel2007am",$nom_fichier)) { $content_type = "application/vnd.ms-excel.addin.macroEnabled.12"; }
elseif(controle_fichier("excel2007b",$nom_fichier)) { $content_type = "application/vnd.ms-excel.sheet.binary.macroEnabled.12"; }
elseif(controle_fichier("powerpoint",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint"; }
elseif(controle_fichier("powerpoint2007",$nom_fichier)) { $content_type = "application/application/vnd.openxmlformats-officedocument.presentationml.presentation"; }
elseif(controle_fichier("powerpoint2007t",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.presentationml.template"; }
elseif(controle_fichier("powerpoint2007s",$nom_fichier)) { $content_type = "application/vnd.openxmlformats-officedocument.presentationml.slideshow"; }
elseif(controle_fichier("powerpoint2007am",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.addin.macroEnabled.12"; }
elseif(controle_fichier("powerpoint2007tm",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.presentation.macroEnabled.12"; }
elseif(controle_fichier("powerpoint2007sm",$nom_fichier)) { $content_type = "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"; }
Afin d’avoir l’icône correspondante aux documents de type texte, tableur ou présentation sous le gestionnaire de fichiers, j’ai également modifié le fichier ./module_fichier/commun.inc.php.
J’ai remplacé les lignes 185 et 186 :
Code : Tout sélectionner
elseif(controle_fichier("word",$fichier_nom) || controle_fichier("ootext",$fichier_nom) || controle_fichier("text",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("excel",$fichier_nom) || controle_fichier("oocalc",$fichier_nom)) { return "tableur"; }
Code : Tout sélectionner
elseif(controle_fichier("word",$fichier_nom) || controle_fichier("ootext",$fichier_nom) || controle_fichier("text",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("word2007",$fichier_nom) || controle_fichier("word2007t",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("word2007m",$fichier_nom) || controle_fichier("word2007tm",$fichier_nom)) { return "texte"; }
elseif(controle_fichier("excel",$fichier_nom) || controle_fichier("oocalc",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007",$fichier_nom) || controle_fichier("excel2007t",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007m",$fichier_nom) || controle_fichier("excel2007tm",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("excel2007am",$fichier_nom) || controle_fichier("excel2007b",$fichier_nom)) { return "tableur"; }
elseif(controle_fichier("powerpoint",$fichier_nom) || controle_fichier("oopresent",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007",$fichier_nom) || controle_fichier("powerpoint2007t",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007s",$fichier_nom) || controle_fichier("powerpoint2007am",$fichier_nom)) { return "presentation"; }
elseif(controle_fichier("powerpoint2007tm",$fichier_nom) || controle_fichier("powerpoint2007sm",$fichier_nom)) { return "presentation"; }