Forcer un téléchargement

Signaler
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009
-
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009
-
Bonjour,
Je suis en ce moment en train d'essayer de forcer le téléchargement d'un fichier sur mon site web. J'avais tout d'abord essayé en passant par une pop-up, mais ie bloquait tout. Je me suis donc pencher sur sans utiliser de pop-up, et là je suis arriver enfin à quelque chose qui marche sous IE Oui mais voilà, j'ai beau pouvoir récupérer mon fichier avec IE, sous Firefox et Opera c'est une autre histoire... Le fichier m'est proposé au téléchargement, mais ce que je télécharge ne contient pas du tout ce que ça devrait contenir... A la place j'ai juste le code html d'une jolie page d'erreur Si on pouvait me venir en aide...

Voici le contenu du fichier renvoyé par Firefox et Opera :

Warning:  filesize() [function.filesize]: stat failed for backup_BDD_eole.sql; in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 8

Warning:  Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php:8) in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 8

Warning:  Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php:8) in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 9

Warning:  Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php:8) in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 10

Warning:  Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php:8) in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 11

Warning:  readfile(backup_BDD_eole.sql;) [function.readfile]: failed to open stream: No such file or directory in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 12

Et voilà la partie du code concerné :
<?php

$Fichier_a_telecharger = $_GET['fichier'];

header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: text/plain\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($Fichier_a_telecharger));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($Fichier_a_telecharger);
   
?>
A ce que je comprend, la fonction fileSize renvoie une erreur, ce qui a pour effet de bloquer tout les header qui suivent vu que du texte est renvoyé en sortie... Maintenant pourquoi la fonction filesize plante et pourquoi seulement sur les autres navigateurs que IE, là je vous pose la question...

4 réponses

Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Essayez peut etre avec cela :

force-download.php

<?php

if(isset($_GET['file']) && !empty(trim($_GET['file'])){
    $filename = $_GET['file'];
    if(ini_get('zlib.output_compression'))
    ini_set('zlib.output_compression', 'Off');
    $file_extension = strtolower(substr(strrchr($filename,'.'),1));
}elseif (!file_exists($filename )){
    echo '<html> ERROR: File not found. USE force-download.php?file=filepath </html>';
    exit;
}else{
    echo '<html>ERROR: download file NOT SPECIFIED. USE force-download.php?file =filepath</html>';
    exit;
};

switch($file_extension){
  case "pdf": $ctype="application/pdf"; break;
  case "exe": $ctype="application/octet-stream"; break;
  case "zip": $ctype="application/zip"; break;
  case "doc": $ctype="application/msword"; break;
  case "xls": $ctype="application/vnd.ms-excel"; break;
  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  default: $ctype="application/force-download";
}

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=".basename($filename).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

?>

Vilhjálms
Sigurðsdóttir aka Frëyjá
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Oups ! ^^

Rempalcer
if(isset($_GET['file']) && !empty(trim($_GET['file'])){ par
if(isset($_GET['file']) && !empty(trim($_GET['file']))){

A chaque il m en manque une lol





Vilhjálms
Sigurðsdóttir aka Frëyjá
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

.... en fait non
J'ai essayé ton truc et ca marche toujours pas... voilà ce que j'ai maintenant dans mon fichier :

Warning:  filesize() [function.filesize]: stat failed for backup_BDD_eole.sql; in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 48

Warning:  Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php:48) in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 48

Warning:  readfile(backup_BDD_eole.sql;) [function.readfile]: failed to open stream: No such file or directory in C:\Documents and Settings\Utilisateur\Bureau\www\Eole\admin\gestionbdd\exporter.php on line 49

D'ailleurs il y avait une erreur de plus dans ce que tu m'as donné, je ne pouvais faire un test avec empty directement sur ce que me retournait la fonction trim sans passer au préalable par une variable Bref détail, ça ne marche toujours pas Enfin si, sous IE, ta méthode fonctionne aussi... Apparement se serait au niveau du chemin du fichier que ça plante... mais pk ? et pk pas sous IE ? l'inverse m'aurait pas étonné mais là... Help
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Help again ?