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

PHP & Base de données Discussion :

Forcer le téléchargement d'un fichier [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut Forcer le téléchargement d'un fichier
    Bonjour,

    Je travaille sur un petit script maison pour me permettre d'écouter ma playlist où que je sois où il y a internet, sur un petit site perso.

    Je souhaite pouvoir récupérer les fichiers aussi, j'ai donc mon arborescence de fichier pour naviguer dans mes dossiers pour choisir les musiques à lire et les fichiers à récuperrer, et j'ai un lien vers une page download.php utilisant des variables GET $dir et $file, qui doit forcer le téléchargement du fichier en question.

    En voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    function download($dir, $file) {
     
    	header("Content-type: application/force-download");
    	header("Content-Disposition: attachment; filename=".$file);
    	readfile($dir . $file);
     
    }
     
    $dir  = '../root'.$_GET['dir'].'/';
    $file = $_GET['file'];
     
    download('../root'.$dir, $file);
    J'ai déjà également testé la methode forcedownload des headers, mais j'ai toujours le même problème, j'ai bel et bien une invitation à un téléchargement, mais celui-ci ne fait que quelques octets, et n'est évidemment pas le fichier que que souhaite récupérer (environ 200mo).

    Je ne comprends pas d'où ce problème peut venir, si quelqu'un à une idée de piste, car là je tourne en rond..

    Merci d'avance,

    Raphaël.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Problème résolu par moi-même.
    Pour ceux que ça interessera j'ai utilisé ce code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?php
     
    function dl_file_resume($dir, $file_2)
        {
    	$file = '../root/'. $dir . $file_2;
        //First, see if the file exists
        if (!is_file($file)) { die("<b>404 File not found!</b>"); }
     
        //Gather relevent info about file
        $len = filesize($file);
        $filename = basename($file);
        $file_extension = strtolower(substr(strrchr($filename,"."),1));
        $ctype="application/force-download";
     
     
        //Begin writing headers
        header("Cache-Control:");
        header("Cache-Control: public");
     
        //Use the switch-generated Content-Type
        header("Content-Type: $ctype");
        //if your filename contains underscores, you can replace them with spaces
        header("Content-disposition: attachment; filename=$filename");
        header($header );
        header("Accept-Ranges: bytes");
        header("Content-Transfer-Encoding: binary");
        $size=filesize($file);
        //check if http_range is sent by browser (or download manager)
        if(isset($_SERVER['HTTP_RANGE']))
            {
            list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']);
            //if yes, download missing part
            str_replace($range, "-", $range);
            $size2=$size-1;
            $new_length=$size2-$range;
            header("HTTP/1.1 206 Partial Content");
            header("Content-Length: $new_length");
            header("Content-Range: bytes $range$size2/$size");
            }
        else
            {
            $size2=$size-1;
            header("Content-Range: bytes 0-$size2/$size");
            header("Content-Length: ".$size2);
            }
     
        //open the file
        $fp=fopen("$file","r");
        //seek to start of missing part
        fseek($fp,$range);
     
        //start buffered download
        while(!feof($fp))
            {
            //reset time limit for big files
            set_time_limit(0);
            print(fread($fp,1024*8));
            flush();
            }
        fclose($fp);
        exit;
    }
     
    $dir = $_GET['dir'];
    $file_2 = $_GET['file'];
     
    dl_file_resume($dir, $file_2);
    Merci quand même !

    Raphaël.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. Réponses: 2
    Dernier message: 30/05/2006, 15h07
  3. Comment forcer le téléchargement d'un fichier avec IE.
    Par karibouxe dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/05/2006, 11h51
  4. forcer le téléchargement - problème ouverture fichier
    Par grinder59 dans le forum Langage
    Réponses: 8
    Dernier message: 09/03/2006, 15h59
  5. [Configuration] problème pour forcer le téléchargement d'un fichier
    Par All Bran dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 02/01/2006, 16h23

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