Apache - Action : la magie de l'interception

En utilisant Apache et avec des clients IE on tombe parfois sur des abérations à la MiKro$oft!
Par exemple ce fichier pdf qui plantait IE alors qu'il s'ouvre parfaitement bien dans
Get Firefox!
Firefox le même genre de mésaventure pouvant se produire avec des fichiers tiff, et qui n'a pas connu la joie du rennomage d'un fichier CGI sur un serveur web de Programme.pl ou Programme.cgi en Programme.txt afin que IE veuille bien ne pas tenter le download mais se contenter d'afficher le texte retourné....
Bien souvent tout cela est souvent du à la méthode pour le moins peu ortodoxe de Microsoft de traiter les headers Content-type (voici une excelente page explique la saga IE sur ce point...)
Quand je dit traiter comprenez ignorer , ainsi sur MSDN Microsoft nous explique que :
..If the server-provided MIME type is either known or ambiguous, the buffer is scanned in an attempt to verify or obtain a MIME type from the actual content. If a positive match is found (one of the hard-coded tests succeeded), this MIME type is immediately returned as the final determination, overriding the server-provided MIME type ...

Ben voyons ! normal quoi ! On va quand même pas faire confiance aux webmasters qui configure un content-type correct, da'illeurs il n'y a que chez Kro$oft qu'on sait ce qui est correct et bon pour le gentil utilisateur de IE. Accessoirement Mikro$oft recommande de ne pas utiliser Adobe PDF comme ça point de soucis...

Enfin bref, il se trouve que tout ceci est du vécu. Et en recherchant un moyen de contourner le problème (comme d'hab) j'ai constaté qu'avec un simple php de trois ligne et Apache on pouvait faire des miracles .
en utilisant ce code php :

 
1 < ?php
2 // on veut sortir du PDF
3 header('Content-type: application/pdf');
4
5 // On veut appeller le fichier test.pdf et FORCER le download
6 header('Content-Disposition: attachment; filename="test.pdf"');
7
8 // The PDF d'origine est dans original.pdf
9 readfile('original.pdf');
10 ?>


On peut à l'aise blaise forcer l'ouverture de la case de dialogue Ouvrir/enregistrer dans le fameux IE dont il est question, ce qui bien souvent aide déj à pas mal. Le gag c'est que sans la ligne 6 il se trouve que dans mon cas le fichier passait aussi comme une fleur, alors qu'en ouvrant le fichier d'origine sans passer par du php c'était «BigBadaBoum�»�.
HuHummm ... Il faudrait un moyen de dire a Apache :
Si on te demande un fichier de type .xxx alors passe donc par la case de l'oncle Tom qui va te servir ce fichier à la sauce du Sud...

Et bien il se trouve que cela existe dans la config apache du répertoire au vous voulez faire ce test il faut que vous ajoutier :

AddHandler cgil-pdf .xxx
Action cgil-pdf "/temp/cgpdf.php?pdffile="

puis il faut créer votre fichier cgpdf.php avec qqchose du style de :

1 < ?php
2 header('Content-type: application/pdf');
3 $pdffile=$_SERVER["DOCUMENT_ROOT"] . $_REQUEST["pdffile"];
4 readfile($pdffile);
5 ?>


Et voila !!!
en cliquant sur un fichier pdf qui s'appelle MonBofichier.pdf.xxx on le voit qui s'affiche sous nos yeux émerveillés.
et le gag c'est qu'avec la ligne :

AddHandler cgil-pdf .pdf

On traite le pdf avant de le balancer au IE récalcitrant

C'est Bô Apache

Commentaires

Posts les plus consultés de ce blog

Comment extraire les fichiers disques en raw d'un backup proxmox vma

Find the lists of disks of your Proxmox VM stored in a ceph cluster

Comment copier une machine virtuelle kvm en raw sur un Volume Group LVM2 se trouvant sur un disque en DRBD