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

Symfony PHP Discussion :

téléchargement d'un fichier [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut téléchargement d'un fichier
    Bonjour à tous!

    Comment permettre à un utilisateur un téléchargement d'un fichier de type .csv en clickant sur une icon (lien)?

    En fait j'ai pu créé le lien et laction qui va avec. Quand je click sur le lien l'action s’exécute mais j'ai pas la boite de dialogue qui devait me proposée le téléchargement du fichier?

    voici le bout de code concerné :

    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
     
    // la variable qui va contenir les données CSV
    		$outputCsv = '';
    		// Nom du fichier final
    		$file = 'export-file.csv';
     
    		$outputCsv .= "nom".';';
    		$outputCsv .= "prnom".';';
    		$outputCsv .= "mail".';';
    		foreach($listUsers as $user) {
    			$outputCsv .= trim($transactions->getNom()).';';
    			$outputCsv .= trim($transactions->getPrenom()).';';
    			$outputCsv .= trim($transactions->getMail()).';';
    		}
    		$fp=fopen($file, "w");
    		fputs($fp, $outputCsv);
    		fclose($fp);
    		header("Content-Type: application/force-download" );
    		header("Content-Length: ".filesize($file));
    		header("Content-Disposition: attachment; filename=".$file);
    		header("Content-Transfer-Encoding: csv\n");
    		header("Pragma: no-cache"); 
    		header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
    		header("Expires: 0"); 
    		readfile($file);
    Merci d'avence!

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    déjà utilise fputcsv, ensuite la plu part de tes entêtes sont inutiles, ca ressemble a du copier coller, et ton Content-Transfer-Encoding est faux

  3. #3
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    et il te manque le pour ne pas chercher à prendre un ton layout et ton template.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Merci pour vos réponses!

    la méthode fputcsv prend bien un une liste de array un table de tables c'est exactement ce que je veux, seulement, dans mon cas le nombre de tableaux dans ma liste de tableaux pas fixe et peut varier!!! alors comment on créée un une liste de tableaux dynamiquement? ou si vous avez une autre solution je suis preneur

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    dans ton cas c'est fixe puisque il y'a 3 champs

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach($listUsers as $user) {
        $outputCsv = fputcsv($handle,
            array(
                $transactions->getNom(),
    	    $transactions->getPrenom(),
    	    $transactions->getMail()
            ), ';'
        )
    }

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Merci stealth35!

    j'ai créé "cette boucle" hier soir mais je sais pas comment faire le reste...
    par exemple $handle ça va être quoi comme variable et prends quoi comme valeur?
    aussi pour $outputCsv c'est la variable ou chaine de caractère que je devais mettre dans le fichier... mais comment permettre ou forcer le téléchargement?

    Merci d'avance!

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    suffit de bien lire la doc, tout est dedans

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    voici mon code actuellement :

    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
     
                    $outputCsv = '';
    		// Nom du fichier final
    		$file = 'mofichier.csv';
     
    		$theader = array('Nom', 'Prenom', 'Mail');
    		$fp=fopen($file, "w");
    		$outputCsv .= fputcsv($fp, $theader);
     
    		foreach($listUsers as $user) {
    		       $tbody = array($user->getNom(), $user->getPrenom(), $user->getMail());
    		       $outputCsv .= fputcsv($fp,$tbody);
    		}
     
    		fputs($fp, $outputCsv);
                    sfView::NONE;
    mais ça ne marche pas... et j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    The template "DownloadCSVFileSuccess.php" does not exist or is unreadable in "".
    sachant que DownloadCSVFile est nom de la méthode (action) où ce trouve le bout de code en haut.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $file = 'mofichier.csv';
    $theader = array('Nom', 'Prenom', 'Mail');
     
    $fp=fopen($file, "w");
    fputcsv($fp, $theader);
     
    foreach($listUsers as $user) {
        $tbody = array($user->getNom(), $user->getPrenom(), $user->getMail());
        fputcsv($fp,$tbody);
    }
     
    rewind($fp);
    fpassthru($fp);
    fputcsv ne renvoie pas une chaine mais écrit du csv comme fputs

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    j'ai toujours malheureusement cette erreur!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    The template "DownloadCSVFileSuccess.php" does not exist or is unreadable in "".

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fait une vue classique sans header particulier, ton CSV devrai s'afficher dans le navigateur

  13. #13
    Membre émérite Avatar de kenny.kev
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 646
    Par défaut
    je crois qu'il faut faire un pas que Si tu crée ce template ton aussi aussi le template écrit dedans ou bien tu afficheras juste le template.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    dsl j'ai pas compris ta question!!
    en fait mon souhait c'est que l'utilisateur reste sur la même page qui lui affiche la liste courante des users en téléchargeant et enregistrant le fichier csv.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    En fait quand je mets

    l'application se bloc et m'affiche une page blanche avec les élément de la bare de menu symfony d'ésordonné sur le côté droit!!!
    par contre si je fais $this->redirect('@users'); là ça m'affiche la liste des users mais pas le téléchargement de fichier csv????

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    en plus de

    me retourne 0????? ce qui veux dire qu'aucun caractère n'a été lu????
    avez vous plus d'explications s'il vous plait?

    Merc.

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    bizarre, si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fp=fopen('php://output', "w");
    ça sort bien ?

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    avec cette ligne il me sort tout dans la page avec un warning :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: rewind() [function.rewind]: stream does not support seeking in D:\developpement\sfprojects\Frontal2\apps\backend\modules\transactions\actions\actions.class.php on line 80
    et la ligne 80 en question c'est bien cette fonction :


  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    commente les deux, rewind et fpasstru

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    là pas de warning et il me balance tout sur la page avec en bas la bare de menu de debug de symfony en désordre!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  2. Réponses: 2
    Dernier message: 30/05/2006, 15h07
  3. forcer le téléchargement - problème ouverture fichier
    Par grinder59 dans le forum Langage
    Réponses: 8
    Dernier message: 09/03/2006, 15h59
  4. permettre le téléchargement d'un fichier
    Par vincentweb dans le forum Langage
    Réponses: 1
    Dernier message: 23/02/2006, 23h50
  5. [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

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