[PhP] Piti soucis avec telechargement forcé... - Resolu... Merci Sans-Nom :)

Hello tout le monde,

J’ai creer un page nommée “down.php” avec ceci dedans

<?php

 
$id = $_GET['id'];
if ($id == '001'){
$file = 'emplacement de mon fichier';
};

elseif etc avec ts les autres fichiers...

header('Content-Transfer-Encoding: none');
header('Content-Type: application/octetstream; name="'.$file.'"');
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Content-length: '.$file);
?>

Sous firefox, je tape l’adresse de mon site ( http://monsite/down.php?id=001 ) le telechargement debute sans probleme et se termine sans problemes non plus.

Par contre, sous internet explorer (bien que je n’aime pas ce navigateur, bon nombre d’internautes l’utilisent encore [et je ne veux pas relancer de debat sans fin "i.explorer VS firefox ^^]) quand je tape la meme url, j’ai bien la fenetre de telechargement mais le probleme… c’est que ce n’est pas le fichier demandé qui arrive mais un fichier vide de 0 octet qui s’appelle “down” sans extension ni rien…

D’ou cela peut il venir ?

merci :jap:

PS: Je suis debutant en PHP donc un piti peu d’indulgence merci :slight_smile:

Il est bizarre ton code. A aucun moment tu ne fais un echo file_get_contents($file) histoire d’envoyer le contenu du fichier. Moralité? IE charge bien un fichier de 0 octets, comme devrait sûrement le faire Firefox.

Ton problème est simple : tu n’envoie pas le fichier :slight_smile: donc IE ne peut pas le récupérer. Logique non?

Si j’ai bien compris je dois faire deci

<?php


$id = $_GET['id'];
if ($id == '001'){
$file = 'emplacement de mon fichier';
};

elseif etc avec ts les autres fichiers...

header('Content-Transfer-Encoding: none');
header('Content-Type: application/octetstream; name="'.$file.'"');
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Content-length: '.$file);
echo file_get_contents($file);
?>

et ca devrais rouler ?

J’ai ajouté la ligne que tu m’as dis… il y a du mieux…

Sous firefox ca fonctionne toujours
Sous internet explorer, le fichier fait la bonne taille ce coup ci (il ne fait plus 0 octets) mais par contre il s’appelle toujours down et sans extension… alors que sous firefox j’ai le bon nom et la bonne extension :neutre:

Pitite precision: j’ai vidé le cache de mes 2 navigateurs avant de refaire mes essais :slight_smile:

Ca ensuite, c’est du ressort des capacités des navigateurs. IE ne doit pas gérer le name ou filename dans le fichier.

huhu i.explorer power powa :smiley: lol

Mais ce que je ne comprend pas… ca doit etre moi qui fait pas comme tout le monde parce que de mon jeune temps ou du lycée j’ai deja telechargé des fichiers via une url en bla bla.php?blabla=machintruc

Je dois pas faire la meme methode que eux alors… snif

Merci Sans-Nom :slight_smile:

Je vais continuer mes recherches sur google pour essayer de trouver une meilleure methode :slight_smile:

J’ai trouvé :slight_smile:

En truc c’est que le chemin du fichier contient des antislashs. or dans un nom de fichier c’est invalide.

Comme la variable $file etait aussi utilisée dans le nom, i.explorer ne le supportait pas ! Firefox remplacait les \ par – ce qui fait que j’avais un nom à rallonge.

J’ai donc juste rajouté une variable apres mon if (qui je vais faire pour chaque fichiers) => $nom en mettant uniquement le nom du fichier et son extension puis j’ai remplacé $file par $nom dans ces deux lignes

header(‘Content-Type: application/octetstream; name="’.$nom.’"’);
header(‘Content-Disposition: attachment; filename="’.$nom.’"’);

et maintenant ca roule :slight_smile:

Merci merci :slight_smile:

y’a une ligne fausse je crois…

header('Content-length: '.$file);

En longueur du fichier, tu donnes le nom du fichier… Essaie plutôt ça

header('Content-length: '.filesize($file));

Merci :slight_smile: