2010-06-24 5 views
0

Nous essayons d'envoyer des pièces jointes téléchargées (servies à partir d'une base de données comme blob) via php avec Zend Framework à un client.En-têtes pour MSOffice 2007/97 Télécharger avec PHP

Ce code fonctionne correctement pour Excel97/Word97.

if ($this->getResponse()->canSendHeaders(false)) { 
      $response = $this->getResponse(); 

      $response->setHeader('Pragma', 'public', true) 
        ->setHeader('Expires', '0', true) 
        ->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true) 
        ->setHeader('Content-Type', 'application/force-download', true) 
        ->setHeader('Content-Type', 'application/octet-stream', true) 
        ->setHeader('Content-Type', 'application/download', true) 
        ->setHeader('Content-Disposition', "attachment;filename=$filename", true) 
        ->setHeader('Content-Transfer-Encoding', 'binary', true) 
        ->setBody($data) // binary 
        ->sendHeaders(); 
     } 

Mais ne fonctionne pas pour excel2007/word2007. Il signale "le fichier a une erreur" et essaie de le réparer.

Des suggestions?

Répondre

2

Vous devez envoyer le Content-Type correct pour le format de fichier donné. Cela devrait être application/msword/application/vnd.ms-excel si vous envoyez vieux .doc - ou .xls -files et application/vnd.openxmlformats-officedocument.wordprocessingml.document ou application/vnd.openxmlformats-officedocument.spreadsheetml.sheet pour les nouveaux fichiers x -type .docx et .xlsx respectivement (ne sais pas quelle version que vous êtes au service). En outre, pour autant que je sache, les nouveaux programmes Office vérifient si l'extension de fichier correspond au contenu du fichier, de sorte que vous obtiendrez des erreurs ou des avertissements lors de l'ouverture .doc -files avec une extension .docx. Un ...->setHeader('Content-Type', '<<the appropriate content-type>>', true) devrait être suffisant.

+1

Excel fou rapports encore un fichier endommagé (après ce message, il travaille) .. – opHASnoNAME

+0

Vous êtes sûr que le fichier ne contient pas des caractères non valides ou qu'il n'est pas stocké corrompu dans la base de données? –

+0

quand j'ai mis les données binaires dans un fichier cela fonctionne, nous avons maintenant découvert, que le téléchargement est un octet plus grand que le fichier .. – opHASnoNAME