IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec le téléchargement forcé d'un fichier


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut Problème avec le téléchargement forcé d'un fichier
    Bonjour,

    Grace à un script php je force le téléchargement de fichier. Ce script reçoit deux arguments, le nom du fichier ex : toto.avi et l'url absolue du fichier ex : www.toto.com/video/toto.avi.
    Lorsque je clique sur mon lien, une boite de dialogue s'ouvre effectivement, m'indique le bon nom de fichier et me télécharge un fichier de 0 ko !

    Si quelqu'un pouvait m'aider

    En vous remerciant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    <?php
     
    $name = $_GET['name'];
    $location = $_GET['location'];
    $type = "video/x-msvideo";
     
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Type: $type");    
    $header="Content-Disposition: attachment; filename=".$name.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    @readfile($location); 
     
    ?>

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Est-ce que tu testes si la $location est correcte/valide/existante/... [rayer la mention inutile] ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    Salut,

    J'ai fait des test avec des echo de mes variables et elles sont correctes.
    Je ne m'explique donc pas ce comportement, en même temps je ne suis pas un habitué de php.
    Verrais tu une autre possibilités d'erreur ?

    Merci

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Es tu sûr de ta synthaxe concernant ton type de téléchargement ? Tu sais, dans les Header, tout comme dans ce type de gestion de télémchargement, une majuscule à la place d'une minuscule, et c'est la grouille.

    Je te conseil de vérifier minutieusement la synthaxe de tes header : espaces, casses, etc....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    J'avoue ne pas voir d'erreur, peut etre dû à mon niveau, mais tout de même je n'en vois pas. J'ai testé d'ecrire en dur l'url du fichier, ca me fait le même problème, c'est à dire me télécharge un fichier de 0 ko.

    Je deviens fou, sauvez mon esprit

    Merci

  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Pourquoi tu ne mettrais pas simplement un lien sur ton téléchargement dans une page HTML, ? Tu n'as pas besoin de gérer le téléchargement, si ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="<?php echo $location; ?>">téléchargement</a>

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par sunshine33
    J'ai fait des test avec des echo de mes variables et elles sont correctes.
    Je ne m'explique donc pas ce comportement, en même temps je ne suis pas un habitué de php.
    Verrais tu une autre possibilités d'erreur ?
    as-tu essayer is_file() ou file_exists() ?

    Et je viens de voir un truc qui m'horripile :
    Enlève-moi ce satané @
    On ne désactive jamais les erreurs !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    Je ne peux pas faire ça, car j'appelle le fichier php depuis une apply flash.
    Je ne peux donc pas faire un simple lien, surtout qu'un simple lien ne force pas le download, or c'est ce que je recherche.

    En te remerciant.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    J'ai testé d'enlever le readfile pour bien comprendre son rôle. Dans mon cas, son abscence ne change rien, ca lance la boite de dialogie et telecharge un fichier vide.

    Inversement j'ai laissé uniquement le readfile, et là erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: readfile() [function.readfile]: php_network_getaddresses: getaddrinfo failed: Hôte inconnu. in C:\wamp\www\****\www\php\****\****\downloadVideo.php on line 49
     
    Warning: readfile(*****/*****/*****/****/****/video/liste2/demoreel.mov) [function.readfile]: failed to open stream: No error in C:\wamp\www\****\www\php\****\****\downloadVideo.php on line 49
    Les numéros de lignes sont plus importante que le coed que je vous ai transmi car j'ai laissé pas mal de code de test en commentaire, donc c'est normal.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    Bon je fais mon mea culpa !
    L'erreur venait du fait que le readfile n'acceptait pas d'url absloue, ex http://www.toto.com..... , j'ai remanié çà en adresse relative et le readfile fonctionne nickel

    J'aurais jsute une dernière demande, lors du téléchargement le poids du fichier à télécharger ne s'affiche pas, ca met inconnue. Or je calcul correctement son poids, j'ai vérifié avec un echo, et je crée ce qui me semble être l'header aproprié :

    header("Content-Length:".$size);

    Voila l'intégralité de mon code, ca ne fait pas beaucoup de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?php
     
    $name = $_GET['name'];
    $location = "../../../" . $_GET['location'];
    $type = "video/x-msvideo";
    $size = filesize($location);
     
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header("Content-Type: $type");  
    $header="Content-disposition: attachment; filename=".$name.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length:".$size);
    @readfile($location);
     
    ?>
    Si vous pouviez m'aider sur ce dernier point, je vous en serez reconnaissant.
    Merci

  11. #11
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    manque p'tet un petit espace

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    Salut !

    J'ai essayé en rajoutant un espace :
    header("Content-Length: ".$size);

    Mais cela n'y a rien changé

    Une autre idée ?

    PS : J'en profite pour exposer un autre problème mais qui ne survient que sous IE, sous FF non : Sous IE le nom du fichier à télécharger est toujours le nom de ma page php ! ! ! Je ne comprends pas pourquoi, comme s'il ne tenait pas compte de la variable $name. Or sous FF ca fonctionne nickel à ce niveau là.

    Merci pour votre aide en tout cas.

  13. #13
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Essaie peut-etre de remplacer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $header="Content-disposition: attachment; filename=".$name.";";
    header($header );
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Disposition: attachement; filename="'. $name .'"');
    Si ca marche toujours pas essaie de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: $type");
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: '. $type .'; name="'. $name .'"');

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    Non cela n'a pas réglé mon problème de nom de fichier. J'en suis vraiment déçu, en effet c'est encore plus important que la taille du fichier à mes yeux. Car un mauvais nom de fichier veut aussi dire une mauvaise extension, il me met toujours .avi alors que ca pourrait être autre chose. Resultat, une fois le fichier téléchargé on ne peut pas le lire directement car ce n'est pas forcément la bonne appli qui se lance pour le lire ...

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 120
    Points : 50
    Points
    50
    Par défaut
    En fait, le code que tu m'as donné ne change rien sous FF, par contre sous IE ca ne force plus le téléchargement, ca tente d'ouvrir directement le fichier avec windows media player. Surement car il se trompe sur le nom du fichier et son extension.

Discussions similaires

  1. [WB17] problème avec de téléchargement de fichiers
    Par zamti dans le forum WebDev
    Réponses: 0
    Dernier message: 22/10/2013, 11h02
  2. Problème avec logiciel de sauvegarde TapeWare et fichier Mac
    Par boleduch dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 18/04/2008, 08h10
  3. téléchargement forcé, taille du fichier nulle
    Par manaboko dans le forum Langage
    Réponses: 8
    Dernier message: 30/11/2005, 11h45
  4. Réponses: 6
    Dernier message: 17/11/2005, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo