Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3057 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][PDF][HTTP][IE] ! Pourquoi IE demande-t-il le fichier 2 fois ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP][PDF][HTTP][IE] ! Pourquoi IE demande-t-il le fichier 2 fois ?

n°215422
Mara's dad
Yes I can !
Posté le 17-09-2002 à 09:09:33  profilanswer
 

Bonjour,
 
Notre application gérère des états au format PDF à partir de données XML fournies par Oracle et d'une feuille de style XSL.
 
La transformation est réalisée par FOP qui génère un fichier PDF.
 
Le tout est piloté par PHP.
 
Le script php envoie le fichier au client de la manière suivante :
 

Code :
  1. ...
  2. $len = filesize( $tmpfile );
  3. header("Content-type: application/pdf" );
  4. header("Content-Length: $len" );
  5. header("Content-Disposition: attachement; filename=foo.pdf" );
  6. readfile( $tmpfile );
  7. exit;


Le problème, c'est que IE 6+ demande 2 fois le fichier !
 
Comme le script est assez lourd, c'est assez génant de faire 2 fois le boulot.
D'autre part, le script PHP utilise des variables passées en POST, et IE fait un GET la deuxième fois, ce qui bien sûr empèche le script de fonctionner correctement.
 
Vive Mozilla 1.1 !


Message édité par Mara's dad le 17-09-2002 à 09:13:18

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 17-09-2002 à 09:09:33  profilanswer
 

n°215497
Stligar
Posté le 17-09-2002 à 11:10:12  profilanswer
 

Moi j'utilise ça et j'ai pas de probleme :
 

Code :
  1. if (!@file_exists($fichier))
  2. {
  3. fichier " '.$fichier.' " n\'existe pas');
  4. }
  5. else {
  6. header("Content-Type: application/x-octet-stream\n" );
  7. header( "Content-Disposition: attachment;filename=$fichier" );
  8. header('Pragma: no-cache');
  9. header('Expires: 0');
  10. readfile($fichier);
  11. }

n°215559
Mara's dad
Yes I can !
Posté le 17-09-2002 à 12:27:11  profilanswer
 

Merci beaucoup de t'interesser à mon problème !
 
Dans ton cas, tu fait un "Content-Disposition: attachment" ce qui te propose d'enregistrer ou d'ouvrir le fichier.
Moi, je fais un "Content-Disposition: inline", parce-que le document doit s'afficher dans une frame du site.
 
D'autre part, j'ai un peu avancé dans la recherche des causes...
 
Le problème ne se produit que dans le cas suivant :
IE 5.5 -> 6.0
et PHP configuré avec un "auto_prepend_file=pgsession.php".
 
pgsession.php est un script qui se charge de gérer les sessions en utilisant une base postgresql.
 
Si je désactive "auto_prepend_file", je n'ai plus le problème ! ! !
 
Franchement, je ne vois pas le rapport entre "auto_prepend_file" et IE ? ? ?
 
Rappel, avec mozilla, je n'ai pas le problème.
 
J'utilise Apache 2.0.40 et PHP 4.2.4-dev.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°215591
omega2
Posté le 17-09-2002 à 13:00:52  profilanswer
 

Mara's dad a écrit a écrit :

Merci beaucoup de t'interesser à mon problème !
 
Dans ton cas, tu fait un "Content-Disposition: attachment" ce qui te propose d'enregistrer ou d'ouvrir le fichier.
Moi, je fais un "Content-Disposition: inline", parce-que le document doit s'afficher dans une frame du site.
 
D'autre part, j'ai un peu avancé dans la recherche des causes...
 
Le problème ne se produit que dans le cas suivant :
IE 5.5 -> 6.0
et PHP configuré avec un "auto_prepend_file=pgsession.php".
 
pgsession.php est un script qui se charge de gérer les sessions en utilisant une base postgresql.
 
Si je désactive "auto_prepend_file", je n'ai plus le problème ! ! !
 
Franchement, je ne vois pas le rapport entre "auto_prepend_file" et IE ? ? ?
 
Rappel, avec mozilla, je n'ai pas le problème.
 
J'utilise Apache 2.0.40 et PHP 4.2.4-dev.



Il me semble que apr défaut, IE6 n'accepte pas les cookies de n'importe quel site.
Il faut avoir créé je sais plus quel fichier décrivant a quoi vont servir le contenu des cookies (c'est normalisé alors on peut pas le faire n'importe comment) et ils seront alors autorisé automatiquement, sinon, ca dépendra du niveau de sécurité choisit par le visiteur.
 
C'est une piste à vérifier.

n°215847
Stligar
Posté le 17-09-2002 à 18:09:22  profilanswer
 

Mara's dad a écrit a écrit :

Dans ton cas, tu fait un "Content-Disposition: attachment" ce qui te propose d'enregistrer ou d'ouvrir le fichier.



 
Ah vi désolé j'avais lu un peu trop rapidement :)

n°216065
Mara's dad
Yes I can !
Posté le 18-09-2002 à 09:01:13  profilanswer
 

Problème résolu grâce à la réactivité de l'équipe de PHP !
 
En gros, c'est un problème de cache.
 
Quand on ouvre une session avec session_start(), par défaut, PHP envoie un header au navigateur du genre : "Cache-control: no-cache".
 
Le problème vient d'IE, qui applique trop bien la politique du no-cache. C'est à dire qu'il se dépèche d'oublier le fichier qu'on vient de lui envoyer au lieu de le passer au plug-in, ce qui fait qu'il est obligé de le redemander.
 
La solution, vient donc du paramètre de gestion du cache pour les sessions:
 
AVANT le session_start(), il faut faire:
session_cache_limiter('private';);
 
Merçi à tout ceux qui se sont senti concerné :)
 
http://bugs.php.net/bug.php?id=19450&edit=2


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP][PDF][HTTP][IE] ! Pourquoi IE demande-t-il le fichier 2 fois ?

 

Sujets relatifs
help PHP sur les dates ?definir le type de fichier sous Windows
[PHP] Ecrire un fichier sur le disque dur du client...[Java] Lire un double dans un fichier ecrit par C++ ?
[PHP] Mettre un cadre de couleur dans INPUT...?[ Php / Html ] Php et balise "Object"
Loader un fichier utilisateur en local (http ou e-mail) ![PHP] Un nom de variable variable ?
Plus de sujets relatifs à : [PHP][PDF][HTTP][IE] ! Pourquoi IE demande-t-il le fichier 2 fois ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR