Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-07-2008 15:22:39

Joachim
Nouveau membre
Date d'inscription: 08-07-2008
Messages: 2

Téléchargement fichier MS Word (doc)

Bonjour,

J'essaie de proposer un document Word en téléchargement via le code suivant:

  public function downloadAction()
  {
      Zend_Layout::getMvcInstance()->disableLayout(true);
      $this->_helper->viewRenderer->setNoRender();
      $localfile = '....test.doc';
      $contents = file_get_contents($localfile);

      $this->getResponse()->setHeader("Cache-Control","no-cache, must-revalidate");
      $this->getResponse()->setHeader("Content-Type", "application/msword");
      $this->getResponse()->setHeader("Content-Disposition", 'attachment; filename="test.doc"');
      $this->getResponse()->setBody($contents);
/*
      header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header('Content-Description: File Transfer');
      header("Content-type: application/msword");
      header('Content-disposition: attachment; filename="test.doc"');
     header('Content-Length: '.filesize($localfile));     */
      echo $contents;   
  }

Mais cela ne fonctionne pas, il me renvoie un fichier bizarre avec des lignes du genre:
ÐÏ#ࡱ#á################>###þ

J'ai essayé avec différents Content-Type mais rien n'y fait...
Par contre cela fonctionne parfaitement pour un fichier pdf ou csv...

J'ai testé avec les "header" dans un simple script php et là ça fonctionne parfaitement! Serait-ce dû à un problème d'encodage?

Je sèche un peu là donc toute aide est la bienvenue ! :-)


merci

Hors ligne

 

#2 08-07-2008 15:39:12

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

Re: Téléchargement fichier MS Word (doc)

ou setBody prend en argument une chaine de caractère et non un contenu binaire

Hors ligne

 

#3 08-07-2008 15:50:52

Joachim
Nouveau membre
Date d'inscription: 08-07-2008
Messages: 2

Re: Téléchargement fichier MS Word (doc)

et concrètement, que dois-je faire alors?

thks!

Hors ligne

 

#4 10-07-2008 19:21:33

squallmat
Membre
Date d'inscription: 25-06-2008
Messages: 19

Re: Téléchargement fichier MS Word (doc)

Je dis peut-être une bétise, je n'ai pas essayé^^, mais test ceci :

public function downloadAction()
{
      Zend_Layout::getMvcInstance()->disableLayout(true);
      $this->_helper->viewRenderer->setNoRender();
      fopen("....test.doc", "r");
}

Hors ligne

 

#5 11-07-2008 17:50:45

squallmat
Membre
Date d'inscription: 25-06-2008
Messages: 19

Re: Téléchargement fichier MS Word (doc)

Bon je dois moi aussi télécharger des fichiers .doc dans mon appli, ce que je t'ai proposé ne marche pas (m'en doutais j'ai dit ça un peu au hasard^^)

J'ai essayé plusieurs choses, j'en suis là :

Code:

public function telechargerAction()
    {
        //chdir('../bulletins/');
        Zend_Layout::getMvcInstance()->disableLayout();
        $fileToDown = (string)$this->_request->getParam('file', null);
        $this->_helper->viewRenderer->setNoRender();
        //$localfile = '....test.doc';
        //$contents = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/application/bulletins/' . $fileToDown);
        
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Description: File Transfer');
        header('Pragma: public');
        header('Expires: 0');
        header('Content-Transfer-Encoding: binary');
        header('Content-Type: application/octet-stream');
        header('Content-Length: '.filesize($_SERVER['DOCUMENT_ROOT'] . '/application/bulletins/' . $fileToDown));
        header('Content-Disposition: attachment; filename='.$fileToDown);
        //ob_clean();
        //flush();
        
        readfile($_SERVER['DOCUMENT_ROOT'] . '/application/bulletins/' . $fileToDown);
}

Mais toujours pareil le fichier téléchargé a son contenu totalement modifié et word me demande une conversion à l'ouverture. Je ne trouve pas la solution, ça ne doit pas être comme ça qu'on fait (forcément^^) si tu as résolu le problème, ou toute autre personne ayant la solution, alors : prière de partager votre science smile

Hors ligne

 

#6 14-07-2008 01:41:41

squallmat
Membre
Date d'inscription: 25-06-2008
Messages: 19

Re: Téléchargement fichier MS Word (doc)

up :x

Hors ligne

 

#7 18-08-2008 11:38:26

Roulio
Membre
Lieu: Alsace
Date d'inscription: 20-11-2007
Messages: 137
Site web

Re: Téléchargement fichier MS Word (doc)

Salut,

je sais pas si tu as réussi à résoudre ton problème. Comme j'ai dû mettre récemment en place un lien et forcer le téléchargement d'un document word pour un client, je te met à disposition les quelques lignes de code.

Dans mon controller :

Code:

$this->_helper->layout->disableLayout();

$filename = $this->_request->getParam('file',null);

if(empty($filename)){ // Vérifie qu'on reçoit bien un nom de fichier
    exit;
}
$this->view->filename = $filename;

Dans ma vue :

Code:

<?php
// information concernant le fichier à télécharger
$dir = 'public/doc/';
$nom_fichier = $this->filename;
$fichier = $dir.$nom_fichier;

// téléchargement du fichier
header('Content-disposition: attachment; filename='.$nom_fichier);
header('Content-Type: application/force-download');
header('Content-Transfer-Encoding: fichier');
header('Content-Length: '.filesize($fichier));
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
readfile($fichier);

a+

Hors ligne

 

#8 19-08-2008 10:36:39

nopitch
Nouveau membre
Date d'inscription: 08-08-2007
Messages: 2

Re: Téléchargement fichier MS Word (doc)

Bonjour,

Sinon il y a cette fonction très utile que j'ai trouvé sur php.net.

Code:

function dl_file($file){

    //First, see if the file exists
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    //Gather relevent info about file
    $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;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": 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: no-cache, 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);
    exit;
}

Hors ligne

 

#9 02-11-2008 11:19:51

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Téléchargement fichier MS Word (doc)

Cette fonction de php.net est parfaite, ce qui explique qu'il n'y a eu aucune réponse après. Je pense qu'il est préférable de passer ce sujet en résolu.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#10 21-01-2009 13:46:51

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Téléchargement fichier MS Word (doc)

Un petit lien qui explique comment gérer tout ça au niveau du controleur :
(c'est pour afficher des images, mais le principe est là..)

http://www.nabble.com/Getting-JPEGs-fro … #a20133957


Société : Direct Info Service

Hors ligne

 

#11 31-05-2012 18:30:14

Angilbeau
Membre
Date d'inscription: 27-02-2012
Messages: 26

Re: Téléchargement fichier MS Word (doc)

Bonjour yannux!

le lien qui explique comment gérer tout ça au niveau du controleur :
(c'est pour afficher des images, mais le principe est là..) est inactif et j'aimerais avoir un peu plus d'information à ce sujet.

la fonction donné ci-dessus par nopitch
function dl_file($file) qui semble bien fonctionné ne retrouve pas le fichier rechercher chez hebergeur,
voila mon controller qui apel cette fonction

Code:

public function indexAction()
{
 $file = 'downpload/'.$namefile;
   $this->dl_file($file);

}
.

j'obtiens un fichier introuvable hors il existe bien car j'au pu l'envoyer chez mon heberger, mais j'arrive pas à le telecharger
Merci

Merci

Hors ligne

 

#12 01-06-2012 07:48:51

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Téléchargement fichier MS Word (doc)

Essaye de mettre un chemin absolue et non relatif.

Attention je ne sais pas si c'est "normal" mais tu as écris "downPload"  un peu en trop peut être en recopiant ici...


Société : Direct Info Service

Hors ligne

 

#13 01-06-2012 10:18:23

Angilbeau
Membre
Date d'inscription: 27-02-2012
Messages: 26

Re: Téléchargement fichier MS Word (doc)

voilà l'arborescence de mon site chez mon hebergeur:

Code:

|-- application
|   |-- configs
|   |-- controllers
|   |-- models
|   `-- views
|-- library
|-- public
|   |-- download
|   `-- index.php
`-- tests
    |-- library

 .

et le fichier à télécharger se trouver dans le repertoire download de public

avec la fonction getcwd(); me donner bien ma position dans mon arborescence

donc
$dir= 'downloap/'.$nomdufichier;

mais il est introuvable et telecharger depuis mon notepad NppFTP
mais pas à travers mon site

Hors ligne

 

#14 19-06-2012 10:46:47

Angilbeau
Membre
Date d'inscription: 27-02-2012
Messages: 26

Re: Téléchargement fichier MS Word (doc)

Bonjour!

'ai pas toujour resolu mon problème de téléchargement de fichier chez mon hebergeur.


  $file  = getcwd()."./download/".$Filename;


mon chemin est absolue mais le fichier reste introuvable

merci d'avance pour votre aide

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