J'ai un script qui prend une clé à partir de $ _GET ['Key'], lève l'emplacement dans une base de données et utilise le fichier ReadFile avec quelques en-têtes pour présenter un téléchargement pour l'utilisation. Cela fonctionne dans Firefox mais pas IE8, n'a pas été capable de le tester sur un autre IE. Je reçois l'erreur suivante dans IE: "Internet Explorer ne peut pas télécharger Télécharger.php à partir de www.example.com". Comme s'il tente de télécharger le script PHP.
$the_query = "SELECT * FROM `files` WHERE `user_id`=" . $_SESSION['user_id'] . " AND `key`='" . $key . "'"; $result = mysql_query($the_query); $row = mysql_fetch_array($result); $file = '/var/www/vhosts/www.example.com/httpsdocs/uploads/' . $row['id'] . '/' . $row['file']; header("Content-type: application/octet-stream"); header("Content-length: ".filesize($file)); header('Content-Description: File Transfer'); header("Cache-control: private"); header('Content-Disposition: attachment; filename=' . rawurlencode(basename($file))); readfile($file);
6 Réponses :
Remplacer ceci: Selon ce POST , c'est-à-dire Normalement écouter à vos en-têtes, et se rapproche plutôt de ce que vous envoyez. p>
en-tête ("Type de contenu: application / octet-flux"); code>
avec ceci:
Rubrique ("Type de contenu: Application / Force-télécharger"); code> p>
J'ai déjà essayé cela avant la même erreur malheureusement, merci.
Application / Octet-Stream Code> est le type de média mime officiel pour les données destinées à être téléchargées (voir RFC 2046).
réussi à obtenir ce travail en utilisant le premier exemple de php.net
http://us3.php.net/manual/fr/function.readfile.php p>
Juste un indice, si quelqu'un (comme moi) est confronté à des problèmes d'entrée directement dans une connexion FileDownload dans la barre d'adresse à l'aide d'une demande HTTPS sécurisée. Il y a un bogue IE qui cause que ce téléchargement échoue: P>
Pour résoudre l'erreur: "Internet Explorer ne peut pas télécharger Télécharger.php à partir de www.example.com", Ajoutez ces en-têtes à votre script: p>
Le code supprimera la commande cache des en-têtes qui fait le problème de téléchargement. P>
Le code ci-dessus doit être ajouté en haut du fichier. P>
Cela fonctionne bien pour nous. P> en-tête ("pragma:"); code> p>
en-tête ("Cache-contrôle:"); code> p>
Merci à un million de sauver ma vie des bugs extraterrestres provenant de Planet Mars ... Je n'ai jamais su ce que je peux faire mais que votre armure de vôtre m'a aidé à tuer ce très très gros bug ... Bug est mort ... yay! !.. Merci :-)
Nous sommes retournés avec ce problème. Essayé tant de recommandations des poteaux de blogs, etc. C'était celui qui l'a réparé!
Ne remplacez jamais ceci: tête ("Type de contenu: application / octet-flux"); p>
avec ceci: Header ("Type de contenu: Application / Force-Download"); P>
"Application / octet-Stream" est simplement le plus universel et fonctionne sur la plupart des navigateurs. P>
J'ai essayé d'utiliser "Application / Zip" dans l'un de mes tests depuis que je traiterais techniquement un fichier zip, mais IE6.0 corrompt le téléchargement! Tout le reste s'est comporté normalement. Mais oui, devait revenir à "Application / Octet-Stream" de sorte que tout code qui essaie de détecter l'extension de fichier et de passer à d'autres types de contenu spécifiques à l'extension sont risqués! Vous ferez mieux d'utiliser "Application / octet-Stream" pour tous les fichiers binaires! P>
Définissez l'en-tête de disposition de contenu sur "Pièce jointe", comme (en PHP): où la pièce jointe a été scriptée.
<FilesMatch "\.(txt|pdf|csv|xls|xlsx|xlam|xlsb|xlsm|msg|doc|docx|mpg|jpg|png)"> Header set Content-Disposition attachment </FilesMatch>
Jetez un coup d'œil à SQL Injection et mysql_real_escape_string. Ce code est vulnérable.
Oh Seigneur Oui S'il vous plaît utiliser mysql_real_escape_string
Je ne sais pas grand chose à ce sujet, mais cela peut avoir quelque chose à voir avec l'extension de fichier en $ fichier
Si vous voulez dire sur la variable $ clé, alors oui, je l'utilise déjà, juste pas dans le code ci-dessus.