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

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Configuration] problème pour forcer le téléchargement d'un fichier


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Configuration] problème pour forcer le téléchargement d'un fichier
    J'ai repris le code indiqué en FAQ pour forcer le téléchargement d'un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $fichier = 'répertoire/fichier.pdf';
    $nomFichier = 'nomFichier.pdf';
    $tailleFichier = filesize($fichier);
     
    header('Content-Type: application/octet-stream');
    header("Content-Length: $tailleFichier");
    header("Content-Disposition: attachment; filename=\"$nomFichier\"");
    readfile($fichier);
    ?>
    Mais, problème : mes fichiers (pdf, word) s'ouvrent en format ASCII au lieu de proposer le téléchargement, ce qui n'est pas exactement le résultat attendu ; ) En "direct" (si j'accède directement au fichier par son url), les fichiers s'ouvrent correctement dans mon navigateur.

    Ma config :
    PHP 4.3.9 (cgi) + Apache/2.0.52, sur un linux.
    J'ai jeté un coup d'oeil sur la config mime, je ne vois rien qui pourait manquer : dans le fichier mime_types, je lis par exemple :
    application/pdf pdf.

    Est-ce que l'utilisation d''Apache 2 peut avoir de l'influence sur ce point ? de même pour le fait d'utiliser php comme cgi et non pas comme module d'apache ? Est-ce que je dois configurer / ajouter qqch sur cette machine fraîchement installée ?

    Merci

  2. #2
    Membre éprouvé Avatar de Bebel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2003
    Messages : 786
    Points : 1 262
    Points
    1 262
    Par défaut
    moi pour forcer le telechargement
    j'utilise le code suivant
    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
     
       $len = filesize($file); 
       $filename = basename($file); 
       $file_extension = strtolower(substr(strrchr($filename,"."),1)); 
     
       //This will set the Content-Type to the appropriate setting for the file 
       switch( $file_extension ) { 
             case "pdf": $ctype="application/pdf"; break; 
         case "exe": $ctype="application/octet-stream"; break; 
         case "zip": $ctype="application/zip"; break; 
         case "doc": $ctype="application/msword"; break; 
         case "xls": $ctype="application/vnd.ms-excel"; break; 
         case "ppt": $ctype="application/vnd.ms-powerpoint"; break; 
         case "gif": $ctype="image/gif"; break; 
         case "png": $ctype="image/png"; break; 
         case "jpeg": 
         case "jpg": $ctype="image/jpg"; break; 
         case "mp3": $ctype="audio/mpeg"; break; 
         case "wav": $ctype="audio/x-wav"; break; 
         case "mpeg": 
         case "mpg": 
         case "mpe": $ctype="video/mpeg"; break; 
         case "mov": $ctype="video/quicktime"; break; 
         case "avi": $ctype="video/x-msvideo"; break; 
    	 case "txt": $ctype="application/msword"; break; 
         //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files) 
         case "php": 
         case "htm": 
         case "Html": 
         die("<b>Cannot be used for ". $file_extension ." files!</b>"); break; 
     
         default: $ctype="application/force-download"; 
       } 
     
       //Begin writing headers 
       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"); 
     
       //Use the switch-generated Content-Type 
       header("Content-Type: $ctype"); 
     
       //Force the download 
       $header="Content-Disposition: attachment; filename=".$filename.";"; 
       header($header ); 
       header("Content-Transfer-Encoding: binary"); 
       header("Content-Length: ".$len); 
       @readfile($file);
    Et cela marche bien, sinon si tu veux plus de mime, regarde 3/4 post plus bas.

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    ce la vient de là : header('Content-Type: application/octet-stream');
    il te faut mettre le bon mime/type
    pour pdf ou pour word

    ce n'est pas le non du fichier ou l'extention qui compte mais le mime type

    A+JYT
    (même si parfois IE n'en fait qu'a sa tête)

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Même en spécifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Content-Type: application/pdf")
    je me retrouve à nouveau avec mon code ASCII.

    J'ai déjà essayé pas mal de codes différents en m'inspirant de divers forums / faq, rien n'y fait. Mon code marche sur d'autres machines, avec d'autres config (apache 1.3, php 4.3), mais là, dans cet environnement (apache 2.0, php 4.3.9) ça coince.

    C'est ce qui me fait penser qu'il s'agit d'un pb de config ou d'install... Qu'est-ce qui pourrait manquer sur le serveur ? (côté client, tout va bien je pense, puisque j'arrive à ouvrir des pdf ou des .doc sur d'autres sites)

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/01/2011, 01h49
  2. [Système] Problème pour forcer un téléchargement
    Par Spaeda dans le forum Langage
    Réponses: 2
    Dernier message: 25/09/2006, 10h02
  3. [Configuration] problème pour lire le .php3
    Par Mister_FX dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 07/08/2006, 11h31
  4. Réponses: 3
    Dernier message: 10/04/2006, 16h09
  5. Réponses: 4
    Dernier message: 09/04/2006, 01h19

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