Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-02-2009 23:38:17

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Fichier PDF corrompu avec les headers PHP

Bonjour,

Je rencontre un problème assez étrange avec un projet zend. En effet je force le download d'un fichier PDF dans une action du controlleur et cela fonctionne très bien, en local uniquement! Mais dès que je met le code en ligne, le fichier se télécharge, l'extension est bien un PDF mais lorsqu'on l'ouvre il m'affiche un message m'indiquant que le fichier et corrompu. Je trouve vraiment ça bizarre et je me demande si ce n'est pas lié au framework. Voici le code:

function downloadAction()
    {   
   
   
    $this->_helper->viewRenderer->setNoRender();
   
   
    header('Content-Type: application/pdf');
    $_file_name = $this->_request->getParam('file'); // le fichier récupéré en théorie
    $f_location = $this->view->baseUrl.'http://www.guitar-gathering.com/public/files/'.$_file_name;
   
    header('Content-Disposition: attachment; filename="monfichier.pdf"');
    readfile('monfichier.pdf');
   
    }

Existe t-il une autre manière de faire avec le Zend? Car là franchement je ne vois pas ce qui cloche.


Merci

Dernière modification par Tavarez (06-02-2009 23:38:31)


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#2 07-02-2009 10:08:18

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Fichier PDF corrompu avec les headers PHP

Hello,

As-tu un layout ? Car dans ce cas, il faut aussi le désactiver.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 07-02-2009 11:37:20

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Fichier PDF corrompu avec les headers PHP

Tavarez a écrit:

Bonjour,

Je rencontre un problème assez étrange avec un projet zend. En effet je force le download d'un fichier PDF dans une action du controlleur et cela fonctionne très bien, en local uniquement! Mais dès que je met le code en ligne, le fichier se télécharge, l'extension est bien un PDF mais lorsqu'on l'ouvre il m'affiche un message m'indiquant que le fichier et corrompu. Je trouve vraiment ça bizarre et je me demande si ce n'est pas lié au framework. Voici le

Code:

function downloadAction() 
    {    
    
    $this->_helper->viewRenderer->setNoRender();
    
    header('Content-Type: application/pdf');
    $_file_name = $this->_request->getParam('file'); // le fichier récupéré en théorie
    $f_location = $this->view->baseUrl.'http://www.guitar-gathering.com/public/files/'.$_file_name;
    
    header('Content-Disposition: attachment; filename="monfichier.pdf"');
    readfile('monfichier.pdf');
    
    }

Existe t-il une autre manière de faire avec le Zend? Car là franchement je ne vois pas ce qui cloche.


Merci

plusieurs chose sur ton code

Code:

    header('Content-Type: application/pdf');

Utilise les méthodes addHeader de zend cela te permet de gérer ce que zend envoie par defaut

Code:

    $_file_name = $this->_request->getParam('file'); // le fichier récupéré en théorie
    $f_location = $this->view->baseUrl.'http://www.guitar-gathering.com/public/files/'.$_file_name;

à quoi sert ce code vu que tu n'utilise pas les variable en question ?   

Code:

    header('Content-Disposition: attachment; filename="monfichier.pdf"');

même topos que plus haut

Code:

    readfile('monfichier.pdf');

ce fichier existe-t-il vu que tu ne tiens pas compte de tes variables ?

A+JYT

Hors ligne

 

#4 07-02-2009 12:26:36

Tavarez
Membre
Lieu: Valenciennes
Date d'inscription: 18-07-2008
Messages: 56

Re: Fichier PDF corrompu avec les headers PHP

Merci pour vos réponse, en ce qui concerne le Layout je vais essayer quand j'aurai trouvé comment smile. Sinon je vais essayer tes méthodes, en ce qui concerne les variables c'est normal que je ne les utilise pas c'etait pour voir si ça ne provenait pas du nom récupéré mais apparement non. Je vous tiens au courant


Il n'y a qu'en faisant des erreurs qu'on apprend...

Hors ligne

 

#5 07-02-2009 21:09:30

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Fichier PDF corrompu avec les headers PHP

Salut,

Attention si ton serveur est sous windows la fonction readfile() peut ne pas bien fonctionner, et les fichiers téléchargés se retrouvent incomplets.

Il vaut mieux utiliser dans ce cas la fonction fpassthru.

Par contre attention, cette fonction dump directement le résultat sur la sortie et non dans un buffer comme readfile, il faut faire gaffe à ce qu'on fait dans l'action.

Exemple :

Code:

              if (file_exists($f_location)) {
                    // Continue seulement si le fichier existe
                    $f_size = filesize($f_location);
                    $fp = fopen($f_location,"rb");
                                                                                         
                    $this->getResponse()->clearHeaders()
                                        ->setHeader('Content-Description', 'File Transfer', true)
                                        ->setHeader('Content-Disposition', 'attachment; filename='.$f_name.';', true)
                                        ->setHeader('Content-Type', 'application/pdf', true)
                                        ->setHeader('Content-Transfer-Encoding', 'binary', true)
                                        ->setHeader('Content-Length',$f_size,true)                      
                                        ->setHeader('Pragma','no-cache',true)
                                        ->setHeader('Cache-Control','must-revalidate, post-check=0, pre-check=0, public',true)
                                        ->setHeader('Expires',0, true)
                                        ->sendResponse(); // force l'envoie immédiat des headers pour bien attraper le fpassthru
                    fpassthru($fp);
                    fclose($fp);
                    // exit;
              }
              else {
                  // Si le fichier n'existe pas : mauvais paramètre fn
                  throw new Zend_Controller_Action_Exception(Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION,404);
                  exit;
              }

L'exemple n'est peut-être pas tout à fait approprié, mais c'est pour avoir une idée.

Après si c'est pas ça du tout, c'est quand même bien de le savoir :p


A+ benjamin.

Dernière modification par Delprog (07-02-2009 21:14:31)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#6 10-02-2009 23:42:24

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Fichier PDF corrompu avec les headers PHP

Perso je suis un fervent utilisateur de file_get_contents() qui fait presque le café... smile


Quelques tutoriaux Zend Framework !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages