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 :

Php download, fichier zip corrompu


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Php download, fichier zip corrompu
    Bonsoir à tous,

    voilà je suis très embêté mon script fonctionne de téléchargement fonctionne très bien sauf qu'à la fin du téléchargement les fichiers .zip sont corrompus si vous avez l'aimabilité de m'éclairer s'il vous plait merci.

    Voici mon 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
    <?php
    $dir = "lol/"; // trailing slash is important
    $file = $dir .$_POST['filename'] ;
     
    if (file_exists($file)) {
    ob_start();
    header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
    header('Pragma: public');
    header("Expires: 0");
    header("Accept-Ranges: bytes");
    header("Connection: keep-alive");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Transfer-Encoding: binary");
    header('Content-Description: File Transfer');
    header("Content-type: application/zip");
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    readfile($file);
     
    } else {
    echo "Le fichier $file n'existe pas.";
    }
    exit;
     
    ?>
    J'utilise la méthode POST filename afin de récupérer le nom du fichier téléchargé sur mon site, cordialement.

  2. #2
    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
    Que contient le zip quand tu l'ouvre avec un éditeur de text classique ?
    Peut être y'a t'il une erreur php écrite en claire , ce qui expliquerais la corruption du fichier.

    L'utilisation des fonction de bufferisation ob_* n'est pas nécessaire ici.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par grunk Voir le message
    L'utilisation des fonction de bufferisation ob_* n'est pas nécessaire ici.
    Je dirais même plus : l'utilisation des fonctions ob_* est peut-être la cause du problème : tu utilises ob_clean qui vide le tampon sans l'envoyer au navigateur et tu n'as aucune fonction d'envoi du tampon (ob_​flush ou ob_​end_​flush)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse cette fois-ci avec ce code le téléchargement se fait mais avant la fin cela télécharge le zip à 578ko sur 600ko, avec pour erreur : erreur réseau :

    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
    <?php
    $dir = "lol/"; // trailing slash is important
    $file = $dir .$_POST['filename'] ;
     
    if (file_exists($file)) {
    ob_start();
    header("HTTP/1.1 200 OK");
    header('Pragma: public');
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public");
    header("Content-Transfer-Encoding: binary");
    header("Content-type: application/zip");
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Cache-Control: must-revalidate');
    header('Content-Length: ' . filesize($file));
    ob_end_flush();
    readfile($file);
     
    } else {
    echo "Le fichier $file n'existe pas.";
    }
    exit;
     
    ?>

  5. #5
    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
    A quoi te servent tes fonctions ob_* ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2018
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par grunk Voir le message
    A quoi te servent tes fonctions ob_* ?
    Purger le cache, j'ai déjà essayé sans, ça ne fonctionne pas pour autant :/

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Quel cache ? les fonctions ob_* gèrent un tampon, autrement dit on envoie le contenu du tampon d'un seul coup au lieu d'envoyer ligne à ligne.

    Sinon, quelques détails à propos des headers :
    Personnellement, j'aurais utilisé header("Content-type: application/octet-stream"); à la place de header("Content-type: application/zip");.
    Il manque les quotes autour du nom du fichier : header('Content-Disposition: attachment; filename="'.basename($file).'"');.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/01/2016, 14h48
  2. Fichier .ZIP corrompu après téléchargement
    Par caroe.lavoie dans le forum Langage
    Réponses: 2
    Dernier message: 01/11/2013, 13h50
  3. Download de fichier zip corrompu
    Par la_praline dans le forum Struts 1
    Réponses: 0
    Dernier message: 09/07/2013, 15h40
  4. PHP download fichier
    Par bella1 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 15/12/2009, 16h45
  5. Download fichier zip à partir d'un url (http)
    Par kenada dans le forum ASP
    Réponses: 5
    Dernier message: 04/05/2007, 19h07

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