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 :

forcer le téléchargement d'un zip


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Points : 40
    Points
    40
    Par défaut forcer le téléchargement d'un zip
    Bonjour,

    j'arrive à faire télécharger un fichier texte o à un visiteur lorsqu'il clique sur un lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
                if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); }
     
                header('Pragma: public');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Cache-Control: private',false);
                header('Content-Type: '.$mime);
                header('Content-Disposition: attachment; filename="'.basename($path).'"');
                header('Content-Transfer-Encoding: binary');
                header('Content-Length: '.filesize($path));
                readfile($path);
                return;
    Le problème c'est qu'avec une archive zip, le fichier téléchargé est vide.Sauriez-vous déceler mon erreur ?

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Bonjour,

    Que vaut $mime ?

    tu as un exemple de téléchargement dans la FAQ

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    $mime peut prendre plusieurs valeurs sans effet : application/zip ou force-download.

    Je viens de reprendre l'exemple de la faq qui lui aussi corrompt les archives zip mais pas les fichiers texte.

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    personnellement je passe en inline :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Entêtes HTTP
    header('Content-Type: application/x-zip');
    // Forcage du téléchargement
    header('Content-Disposition: inline; filename=nom.'.date("Y-m-d").'.zip');

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Points : 111
    Points
    111
    Par défaut
    Moi j'utilise ça :
    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
     
    $Fichier_a_telecharger=basename($fic);
    $chemin=dirname($fic)."/";
    // reconnait l'extension pour que le téléchargement
    // corresponde au type de fichier afin d'éviter les erreurs de corruptions
     
    switch(strrchr(basename($Fichier_a_telecharger), "."))
    {
    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;
    }
     
    header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: $type\n"); // ne pas enlever le \n
    header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
    header("Pragma: no-cache");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
    header("Expires: 0");
    readfile($chemin . $Fichier_a_telecharger);

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. [PHP-JS] Forcer le téléchargement d'une image JPG
    Par Amnesiak dans le forum Langage
    Réponses: 5
    Dernier message: 09/11/2006, 23h50
  3. [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
  4. Réponses: 1
    Dernier message: 08/09/2005, 11h01
  5. Réponses: 2
    Dernier message: 23/03/2005, 08h51

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