8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème de compatibilité entres IE7 et FF / IE6 :

J'ai un script de téléchargement de fichiers qui fonctionne avec IE6 et Firefox mais pas avec IE7 :


  if (strstr($HTTP_USER_AGENT,"MSIE"))
   $attachment="";
  else
   $attachment=" attachment;";



Avec IE6 et FF je télécharge bien le fichier, avec IE7, j'obtiens une page d'erreur (Internet Explorer ne peut pas afficher cette page Web).

Quelqu'un aurait une idée pour rendre ce bout de code compatible entres tous les navigateurs ?

Merci !
Modifié par webcrea (28 Aug 2007 - 17:27)
Salut,

c'est à priori une mauvaise idée de faire des scripts qui ont besoin de déterminer le navigateur Smiley ohwell .

Si ton but est de forcer le téléchargement d'un fichier, il me semble que le code suivant est générique :
...
header("Content-disposition: attachment; filename=\"$named\"");
header("Content-Type: $fichier_mime");
...

A+
Pour faire quelque chose de plus propre, on m'a proposé à la place de l'ancien bout de code :


if (file_exists($FICHIER_LOCAL)==true) 
 {
Header("Location: $FICHIER_LOCAL");
  exit;
 }


$FICHIER_LOCAL est le fichier à télécharger.
Mais toujours le même problème : ok sur FF mais pas sur IE7
Heu... Pas tout compris Smiley rolleyes !

Tu pourrais mettre ton code complet et éventuellement préciser ce que tu veux faire ?
Modifié par Heyoan (28 Aug 2007 - 15:33)
C'est le script fourni par le prestataire de paiement Allopass.
Ce script est fait pour acceder au téléchargement d'un fichier après vérification d'un code obtenu par téléphone (valide ou non) :

<?php
 $RECALL=$HTTP_GET_VARS["RECALL"];
 if (trim($RECALL)=="") 
 {
  // La variable RECALL est vide, renvoi de l'internaute
  //vers une page d'erreur
  header("Location: erreur.html");
  exit;
 }

 // $RECALL contient le code d'accès
 $RECALL = urlencode($RECALL); 

 // $AUTH doit contenir l'identifiant de VOTRE document
 $AUTH = urlencode("54/75/456");
 
 // $FICHIER_LOCAL doit contenir le chemin et le nom du fichier
 //à téléchargé présent sur votre site
 $FICHIER_LOCAL = "mes_fichiers/monfichier.zip";

 // $FICHIER_INTERNAUTE doit contenir le nom du fichier qui sera créé sur
 //l'ordinateur de l'internaute
 // Ce nom ne doit pas être forcément le même que le nom du fichier local !
 $FICHIER_INTERNAUTE = "lefichier.zip";

 // envoi de la requête vers le serveur AlloPAss
 // afin de vérifier le code d'accès de l'internaute.
 // Dans la variable $r[0] on aura la réponse du serveur
 $r=@file("http://www.allopass.com/check/vf.php4?CODE=$RECALL&AUTH=$AUTH");

 // on test la réponse du serveur
 if (ereg("ERR",$r[0]) || ereg("NOK",$r[0])) 
 {
  // Le serveur a répondu ERR ou NOK : l'accès est donc refusé
  header("Location: erreur.html");
  exit;
 }

 // Le code est valide : on lance le téléchargement du fichier
 if (file_exists($FICHIER_LOCAL)==true) 
 {
  if (strstr($HTTP_USER_AGENT,"MSIE"))
   $attachment="";
  else
   $attachment=" attachment;";

  header( "Content-type: application/octet-stream" );
  header( "Content-Disposition:$attachment filename=$FICHIER_INTERNAUTE");
  header( "Content-Description: File Transfert" );
  header( "Content-Length: ".filesize($FICHIER_LOCAL).""); 
  readfile($FICHIER_LOCAL);
  exit;
 }
?>


Le fichier que je souhaite faire télécharger est une vidéo au format .avi.
Peut-être que le pb se situe au niveau de mon navigateur, ou de mon hébergeur ou du format...

Je ne comprends pas....
Re',

tu as essayé en ne mettant que ça ?
if (file_exists($FICHIER_LOCAL)==true) 
{
header( "Content-type: application/octet-stream" );
header( "Content-Disposition: [b]attachment;[/b] filename=$FICHIER_INTERNAUTE");
header( "Content-Description: File Transfert" );
header( "Content-Length: ".filesize($FICHIER_LOCAL).""); 
readfile($FICHIER_LOCAL);
exit;
}
ça me dirige vers l'adresse exacte du fichier tout en m'affichant "Internet Explorer ne peut pas afficher cette page Web" et en ne téléchargeant donc pas le fichier.
Restesté : ça marche !
C'était sans doute une ancienne version dans le cache.
Merci bien Heyoan Smiley smile