Pb pour forcer le telechagement

Signaler
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008
-
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008
-
Salut à tous!
J'ai fait un site pour l'école où je dois charger des fichiers que les utilisateurs peuvent télécharger. J'ai fait une page download.php qui force le téléchargement. J'arrive à télécharger les fichiers mais pas à les ouvrir.
Est-ce que quelqu'un pourrait m'aider?
Merci d'avance!

ma page upload qui se lance apres le formulaire :
    $tmp_name=$_FILES['fichier']['tmp_name'];
    $titre = $_FILES['fichier']['name'];
    $taille = $_FILES['fichier']['size'];
    $type = STRSTR($_FILES['fichier']['name'],".");
   
    $point=strrpos($titre,".");
    $titre=substr($titre,0,$point);
    $fichier = $_FILES['fichier']['name'];

ma page document :
    [dl.php?dl=<?php echo 'fichiers/'.$doc['doc_fichier']; ?> T&eacute;l&eacute;charger]</td>
    //$doc['doc_fichier'], c'est le nom du fichier avec extension

ma page download :
if(isset($_GET['dl'])){
    $fichier=$_GET['dl'];

    switch(strrchr(basename($fichier), ".")) {
        case ".gz": $type = "application/x-gzip"; break;
        case ".tgz": $type = "application/x-gzip"; break;
        case ".zip": $type = "application/zip"; break;
        case ".pdf": $type = "application/pdf"; break;
        case ".png": $type = "image/png"; break;
        case ".gif": $type = "image/gif"; break;
        case ".jpg": $type = "image/jpeg"; break;
        case ".txt": $type = "text/plain"; break;
        case ".htm": $type = "text/html"; break;
        case ".html": $type = "text/html"; break;
        default: $type = "application/octet-stream"; break;
        } 
    $fic=substr($fichier,9);  //retire le début du chemin pour prendre le nom
    header("Content-Transfer-Encoding: $type\n");
    header('Content-Disposition: attachment; filename="'.$fic.'"');
    header('Content-Length: '.filesize($fichier));
    readfile($fichier);
}

19 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Tu entends quoi par "mais pas à ées ouvrir"? Tu as un message d'erreur? rien ne se passe?

Tu ne penses pas que ce serait bêtement une histoire de répertoire ? Tu as essayé sans faire le substr sur $fic?

*****
noisy communication - wherever, be everywhere!
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

J'ai essayé de modifier les répertoires et tout mais j'y arrve pas.
En fait, quand j'ouvre les fichiers, j'ai un message qui me dit que le fichier est endommagé.
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
endommagé? Alors soit c'est une erreur de type, soit il est VRAIMENT endommagé au moment où tu l'uploades.... essaie peut-être de remplacer "Content-Transfert-Encoding" par "Content-type"

*****
noisy communication - wherever, be everywhere!
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

Ca fait la même chose.
Je pense que ce n'est pas un probleme avec l'upload parce-que j'arrive à ouvrir les fichiers qui sont dans le dossier de fichiers uploadés.
En plus, quand je retire le move_upload et que je déplace le fichier manuellement ça ne passe pas non plus.
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
peut-être que c'est une question de droits chez ton hébergeur alors. Essaie de faire un chmod en uploadant à 755 par exemple

*****
noisy communication - wherever, be everywhere!
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

Mon site n'est pas en ligne. Mes fichiers ne vont pas sur un serveur, ils vont seulement dans un dossier.
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
"je déplace le fichier manuellement ça ne passe pas non plus" <-- Y a bien un problème là qui ne concerne pas PHP!

*****
noisy communication - wherever, be everywhere!
Messages postés
79
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
19 janvier 2009

iron tu peux faire la page de telechargement juste avec du html et ça marche tu cré un repertoire qui va contenir les documents sous forme de fichier zip puis tu fais un lien simple vers le fichier et quant tu execute la pge avec "easyphp" ça affiche une fenetre qui contient ouivrir telecharger ou annuler et surtout n'oublie pas d'executer la page avec le serveur locale come wamp ou easyphp
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

nan, t'as confondu
Content-Transfer-Encoding et Content-Type.
Content-Transfer-Encoding devrait être binary.
Et dans Content-Type du dois mettre le mime-type que tu testes dans ton switch.
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

sws, en fait, c'est que mon prof m'a imposé cette methode.
Concernant les Content-Transfer-Encoding et Content-Type j'ai remodifié mais ça me fait toujours la même chose.
Maintenant, mon code donne ça:

header("Content-Type: $type");
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename="'.$fichier.'"');
header('Content-Length: '.filesize('fichiers/'.$fichier));
readfile('fichiers/'.$fichier);

Là, $fichier prend le nom du fichier avec l'extension.
Messages postés
9
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
12 janvier 2008

alors avec cette methode t'as pas besoin ni de header ni de rien seulement de html je t'explique:
1)tu cré un repertoire;dans le dossier qui contient tes page web sous www de easy php;que tu nome téléchargement par exemlpe
2) tu mets tout document a telecharger dans le repertoire telechargement il doivent etre soit avec l'extension "zip","rar","xls","doc","pdf"
3)dans ta page html des lien vers les document contenu dans telechargement
exemple:[telechargement/Nero.zip cour musique ]
4)l'execution de la page html de se faire avec easy php sois avec une alias ou dans web local www
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
Il parle de FORCER le téléchargement. Ta méthode ne fonctionnera pas avec des PDFs par exemple

*****
noisy communication - wherever, be everywhere!
Messages postés
9
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
12 janvier 2008

pour les pdf il doit les zippez
Messages postés
9
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
12 janvier 2008

pour les pdf et toute autre extension doivent être zippez
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
17
excuse moi de dire ça comme ça, mais ta propsition est débile...

*****
noisy communication - wherever, be everywhere!
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
@iron ian => chez moi, ton code fonctionne. Il doit y avoir un soucis de chemin, OU tes fichiers sont effectivement corrompus.

@mwm11 => tu es hors sujet là, ce n'est pas ce qu'il demande.
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

Je vais essayer sur un autre ordi pour voir ce que ça donne.
Peut-être que ça vient du mien.
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

J'ai essayé sur linux.
Quand j'ouvre le fichier, ça me dit que le nom du fichier indique qu'il est en pdf, alors que son contenu indique que c'est du type html.
Messages postés
13
Date d'inscription
lundi 7 mai 2007
Statut
Membre
Dernière intervention
16 janvier 2008

J'ai trouvé le probleme.
C'était tout bête.
En fait, ça chargeait le doctype dans le fichier.
Merci pour votre aide.