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 :

pb de téléchargement avec readfile()


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    teddycampagne
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : teddycampagne

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut pb de téléchargement avec readfile()
    Bonjour,

    j'essaye de développer un petit script de téléchargement de fichier via apache et PHP et je bloque sur la partie download

    j'ai repris l'exemple disponible sur php manual http://php.net/manual/fr/function.readfile.php

    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
    if (!empty($_SESSION['fichier'])) {
            $chemin         = $_SESSION['chemin'].$_SESSION['fichier'];
     
            if(file_exists($chemin)) {
                    header('Content-Description: File Transfer');
                    header('Content-Type: application/octet-stream');
                    header('Content-Disposition: attachment; filename="'.basename($chemin).'"');
                    header('Expires: 0');
                    header('Cache-Control: must-revalidate');
                    header('Pragma: public');
                    header('Content-Length: ' . filesize($chemin));
                    readfile($chemin);
                    exit;
     
            }
    } else {
            require('index.php?action=erreur');
    }
    ?>
    le téléchargement se déroule sans incident quelque soit le navigateur utilisé cependant le fichier téléchargé est illisible
    (exemple d'erreur sur un fichier Excel "le format du fichier ne correspond pas à l'extension....") ce qui me laisse penser que le mimetype n'est pas retransmis correctement.

    pour info : si j'essaye de le récupérer avec un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: '.$chemin.'');
    il est télécharger sans incident et parfaitement lisible

    Pouvez vous m'aider a comprendre mon erreur ?
    Je vous remercie par avance

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    le type MIME est détecté à partir de l'extension ou du contenu donc il n'y pas de transmission de cette information au moment d'un téléchargement.

    c'est peut-être un soucis d'entête UTF-8 ou de modifications des fins de lignes.
    essayez avec un fichier qui contient quelques caractères et un saut de ligne et ensuite regardez avec un éditeur hexadécimal s'il y a des différences

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    As tu simplement essayé d'ouvrir le fichier avec un editeur de text type notepadd++ ?
    Si i lest illisible c'est probablement que PHP à généré une erreur et la écrit dans le fichier avant ou à la place du contenu. Ça pourrait alors te mettre sur la piste du problème
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Futur Membre du Club
    Homme Profil pro
    teddycampagne
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : teddycampagne

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    merci à mathieu et grunk,

    j'ai effectivement refait le test avec un fichier texte tout bête avec le même incident.
    et en analysant le fichier téléchargé avec nano il s'avère que PHP a rajouté en début du fichier le code HTML de la page contenant le lien de téléchargement.

    J'ai trouvé une solution légèrement tordue mais qui fonctionne...

    Le lien de téléchargement renvoi vers un fichier php intermédiaire

    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
    if (!empty($_SESSION['fichier'])) {
     
    $chemin = $_SESSION['repertoire'].$_SESSION['fichier'];
     
            if(file_exists($chemin)){
                    header('Location: telech.php');
                    exit;
            }
    } else {
            require('index.php?action=erreur');
    }
    ?>
    puis la page telech.php contient le code fourni dans le manuel php et l'emplacement du fichier a télécharger sans aucune autre fioriture.

    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
     
    <?php
    session_start();
    $chemin = $_SESSION['repertoire'].$_SESSION['fichier'];
     
    header('Content-Description: File Transfer');
    header('Content-Type: application/force-download');
    header('Content-Disposition: attachment; filename="'.basename($chemin).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($chemin));
    readfile($chemin);
     
     ?>

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

Discussions similaires

  1. Problème de téléchargement avec lynx
    Par zyongh dans le forum Debian
    Réponses: 5
    Dernier message: 17/03/2007, 08h16
  2. Vider le cache avant téléchargement avec tIdHTTP
    Par Delphi-ne dans le forum Delphi
    Réponses: 5
    Dernier message: 15/12/2006, 14h52
  3. Forcer le téléchargement avec un lien
    Par kagura dans le forum Langage
    Réponses: 3
    Dernier message: 08/11/2006, 10h56
  4. Gestion des téléchargements avec javascript ?
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/09/2006, 19h27
  5. Problème de téléchargement avec Windows XP pro
    Par bernard38 dans le forum Windows XP
    Réponses: 7
    Dernier message: 01/03/2006, 09h10

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