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 de fichier


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Par défaut Forcer le téléchargement de fichier
    Salut,

    voilà, j'ai une page web qui présente un lien qui permet de générer dynamiquement un fichier. Je voudrais que dès que l'utilisateur clique sur ce lien, que mon fichier soit crée et qu'une boîte de download s'affiche pour que l'utilisateur puisse le télécharger.

    Pour cela, mon lien pointe vers un fichier php qui génère un fichier .csv et dans ce script, j'ai ajouté une fonction de download qui comporte le source de la FAQ php pour le download forcé de fichiers.

    Le problème, c'est qu'au lieu d'avoir une boîte de dialogue de téléchargement qui apparaît, le contenu de mon fichier s'affiche dans la page...

    Code de ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function downloadGeneratedFile($fichier)
    {
     
          $nomFichier = results.csv;
          $tailleFichier = filesize($fichier);
     
          header('Content-Type: application/octet-stream');
          header("Content-Length: $tailleFichier");
          header("Content-Disposition: attachment; filename=\"$nomFichier\"");
          readfile($fichier);
     
    }
    Merci d'avance, pour votre aide.

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Avec la fonction rechercher tu aurais trouver des sujets traitant du même problème :
    Forcer un téléchargement : nom du fichier de destination
    [Fichiers] Forcer le téléchargement
    [Langage] Forcer téléchargement (header)
    et j'en passe

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2002
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 104
    Par défaut
    J'avais fait la fonction Rechercher juste avant de poser ma question mais je n'ai rien trouvé !

    Je n'ai pas encore lu quelque chose qui traite de mon problème...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Par défaut idem
    Bonjour à tous,
    j'ai le même problème que toi BARBIER, mais j'ai remarqué un truc :
    Quand j'écris le code direct dans une page comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $fichier = 'monrepertoire/fichier.PDF';
    $nomFichier = 'fichier.PDF';
    $tailleFichier = filesize($fichier);
     
    header('Content-Type: application/octet-stream');
    header("Content-Length: $tailleFichier");
    header("Content-Disposition: attachment; filename=\"$nomFichier\"");
    readfile($fichier);
    tout marche et j'ai le téléchargement qui débute (avec la petite fenêtre).
    Mais par contre quand je passe par la bdd pour récupérer le nom du fichier et que j'écris la même chose à partir des variables : ça ne marche pas, le navigateur m'ouvre le fichier complètement éclaté (pdf)

    La page simple : http://cfi-nice.org/italangue_m2/download2.php
    la page dynamique : http://cfi-nice.org/italangue_m2/download.php?a=1


    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
    if(isset($_GET['a']) && ($_GET['a']!='')){
    	$chemin='download/annales/';
    	$idfichier=$_GET['a'];
    	$table='annales';
    	$id='an_id';
    	$pdf='an_pdf';
    	$download=1;
    }elseif(isset($_GET['p']) && ($_GET['p']!='')){
    	$chemin='download/presse/';
    	$idfichier=$_GET['p'];
    	$table='presse';
    	$id='pr_id';
    	$pdf='pr_pdf';
    	$download=1;
    }else{
    	$download=0; // neutralise le téléchargement
    	echo"<html><body>\r\n<h1>:-(</h1><br />\r\n</body></html>";
    }
     
    if($download==true){
    	// connection à la base de donnée
    	include("_connexion.php");
    	$query = "SELECT $id, $pdf FROM $table WHERE $id='$idfichier'"; 
    	$result = mysql_query($query) or die('<error>'.mysql_error().'</error>');
    	$val = mysql_fetch_array($result);
    	// donne le nom du fichier
    	$nomFichier = $val["$pdf"];
    	$fichier = $chemin.$nomFichier;
    	$tailleFichier = filesize($fichier);
    	/*
    	 * ici on place le compteur de téléchargement
    	 */
    	mysql_free_result();
    	mysql_close();
     
    	header("Content-type: application/force-download");
    	header("Content-Length: $tailleFichier");
    	header("Content-Disposition: attachment; filename=".$nomFichier);
    	readfile($fichier);
    Franchement, je ne vois pas le truc !!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 57
    Par défaut Une première réponse
    J'ai remarqué une autre chose :
    en virant toutes include() ou require() de la page elle marche normalement.
    Je ne l'explique pas mais je sais que ça a un rapport avec l'usage de header(). Je n'ai pourtant pas mis de HTML avant le header(). Bref si quelqu'un trouve une explication à cela ce sera le bienvenu.

    @+

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Par défaut
    essaies de mettre un ob_start() en début de script, et avant les headers du téléchargement fais un ob_clean().
    si ça vient des headers ça devrait régler le problème.

    ps: t'appels une table qui n'existe pas sur la page d'accueil...

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/07/2009, 11h36
  2. forcer le téléchargement de fichiers
    Par nezdeboeuf62 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 23/10/2008, 10h27
  3. forcer le téléchargement de fichier
    Par Emcy dans le forum Langage
    Réponses: 5
    Dernier message: 04/05/2008, 20h12
  4. Forcer un téléchargement de fichier
    Par dedz dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2007, 19h32
  5. Forcer le téléchargement de fichiers
    Par aktos dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2007, 21h04

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