Page 1 sur 1

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

Posté : 12 févr. 2006, 16:19
par Nico128
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

Posté : 12 févr. 2006, 16:25
par Cyrano
Avec un str_replace sur le nom du fichier:
$nom_fichier = str_replace(" ", "%20", $nom_fichier);

Posté : 12 févr. 2006, 16:32
par Nico128
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...

Posté : 12 févr. 2006, 17:01
par Cyrano
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.

Posté : 12 févr. 2006, 17:07
par Nico128
Ok.

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

Posté : 12 févr. 2006, 17:12
par Cyrano
À quoi ressemble l'url type en question ?

Posté : 12 févr. 2006, 17:17
par Nico128
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.

Posté : 12 févr. 2006, 17:32
par Nico128
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.