Téléchargement forcé en échec sur IE

Petit nouveau ! | 1 Messages

27 août 2010, 10:24

Bonjour,

J'utilise un script de dowload classique de fichier du serveur vers un client PC (downlaod.php):

Code : Tout sélectionner

<? if( isset($_POST['download']) ){ $s_PathD = $_SERVER['DOCUMENT_ROOT'] . '/upload/' . $_POST['valC']; $s_FileD = $_POST['ListeFileD']; $s_GlobPath = $s_PathD . "/" . $s_FileD; if( !$s_FileD ) exit; /* Calcul de la taille */ $i_Taille = filesize( $s_GlobPath ); $type = "application/octet-stream"; break; header("Content-Type: application/force-download;name=$s_GlobPath "); header("Content-Transfer-Encoding:$type\n"); header("Content-Disposition: attachment;filename=$s_FileD"); header("Content-Length:$i_Taille"); header("Pragma: no-cache"); header("Cache-Control: no-cache, must-revalidate"); header("Expires: 0"); readfile($s_GlobPath ); } ?>
Ce code fonctionne sur Firefox, chrome, mais pas sur IE.
IE s'entete à vouloir télécharger le script (download.php) :
"Internet Explorer ne peut pas télécharger download.php de ...."

J'ai essayé divers pistes sans succés (chemins différents, changement de répertoire, ... ).
Les autres restent fonctionnels (???).
Quelqu'un aurait une idée ?
Merci d'avance pour vos retours.

Eléphant du PHP | 86 Messages

27 août 2010, 14:39

Salut, tu devrais essayer de cette façon :
ob_end_clean();
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.urlencode($s_FileD));
header('Content-Transfer-Encoding: none');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $i_Taille);
ob_clean();
flush();
readfile($s_GlobPath);

Invité
Invité n'ayant pas de compte PHPfrance

27 août 2010, 15:42

Bonjour,

D'abord merci pour ta réponse. Cela m'a beaucoup aidé.
A l'étude de ce que tu m'as envoyé, je vois que le problème était issu des deux headers (pragma et cache-control).
En les enlevant et en laissant IE gérer, cela a fonctionné (j'ai virer l'expire par la même occasion avec un résultat concluant) sans me faire de dégradation sur les autres plateformes.

Merci.