Télécharger avec un lien download.php?id=

Eléphant du PHP | 246 Messages

12 févr. 2006, 16:19

Salut à tous !

J'ai fait un script pour pouvoir télécharger avec un lien de ce genre : download.php?id=x

Mais le problème, c'est que si le fichier a un espace, le nom du fichier sera coupé a cet espace. Le fichier sera bien téléchargement, mais cest juste son nom qui sera pas en entier, et cela me dérange.

Voilà la partie qui force a télécharger le fichier :
header('Content-disposition: attachment; filename='.$filename);
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: fichier');  
header('Content-Length: '.filesize($chemin));
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($chemin);
Quand je fais un echo sur $filename j'obtien bien le nom du fichier en entier.

Et je viens de remarqué avec IE ce qui se télécharge est download.php?id=x et ca mets erreur quand jessaye de le télecharger.

Alors comment faire ?

Merci d'avance

Mammouth du PHP | 19672 Messages

12 févr. 2006, 16:25

Avec un str_replace sur le nom du fichier:
$nom_fichier = str_replace(" ", "%20", $nom_fichier);
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

12 févr. 2006, 16:32

Merci de m'avoir répondu.

Mais enfaite ce que je veux, cest ne pas afficher de %20 dans le nom du fichier, je préférerais un espace.

Et avec IE, je comprend toujours pas pourquoi ça ne télécharge pas le fichier...

Mammouth du PHP | 19672 Messages

12 févr. 2006, 17:01

Que toi tu préfères un espace, c'est une chose, mais pour le navigateur, ça donne une url invalide et dans ton code, ça crée une rupture intempestive dans la chaine.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

12 févr. 2006, 17:07

Ok.

Par contre avec IE ça ne marche toujours pas :? On me propose de télécharger la page. Mais avec Mozila, tout marche !

Mammouth du PHP | 19672 Messages

12 févr. 2006, 17:12

À quoi ressemble l'url type en question ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 246 Messages

12 févr. 2006, 17:17

Au départ j'avais fait une url avec id pour selectioner un fichier dans la base de donné.

Mais après pour essayé de voir d'ou vient le problème j'ai simplement faire une page "dl2.php" avec comme contenue dedant :
$filename = '4111.jpg';
$chemin = '../../../fiches-jeux/images-jaquettes-etiquettes/etiquettes-ngc/Metal-Gear-Solid-The-Twin-S.gif';

header('Content-disposition: attachment; filename='.$filename);
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: fichier');  
header('Content-Length: '.filesize($chemin));
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($chemin);
l'url est http://www.legend-nintendo.com/download ... pt/dl2.php

Avec mozila ca télécharge bien l'image. Avec IE ça essaye de télécharger la page. Mais après avoir mis "télécharger" un message d'erreur intervient et ferme la boite de dialogue.

Eléphant du PHP | 246 Messages

12 févr. 2006, 17:32

Oh finalement j'ai fait d'une autre manière. Elle est peut être moin bien, mais au moin elle marche.

Au lieu d'utiliser le header() j'utilise une iframe qui est invisible.