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

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

Marsh Posté le 17-09-2002 à 09:09:33    

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é.
Reply

Marsh Posté le 17-09-2002 à 09:09:33   

Reply

Marsh Posté le 17-09-2002 à 11:10:12    

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. }

Reply

Marsh Posté le 17-09-2002 à 12:27:11    

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é.
Reply

Marsh Posté le 17-09-2002 à 13:00:52    

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.

Reply

Marsh Posté le 17-09-2002 à 18:09:22    

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 :)

Reply

Marsh Posté le 18-09-2002 à 09:01:13    

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é.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed