Bonjour,
Je voudrais lancer le téléchargement d'un fichier à partir de zend.
Voici le code PHP 'standard' que je voudrais faire :
(http://php.net/manual/fr/function.readfile.php)
Voici ce que j'ai commencé à faire avec zend :
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 <?php $file = 'monkey.gif'; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } ?>
Si j'utilise la fonction 'readfile()' je vais avoir un conflit entre $response et readfile qui envoie directement le résultat de la lecture sur le buffer de sortie.
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 public function downloadAction(){ $response = $this->getResponse(); $downloadFactory = $this->getServiceLocator()->get('\Downloads\DownloadsFactory'); $file = getcwd() . '/public/attachments/128/aaa.pdf'; $fileName = basename($file); $fileSize = filesize($file); $response->setStatusCode(200); $headers = $response->getHeaders(); $headers->addHeaderLine('Content-type: application/force-download'); $headers->addHeaderLine("Content-Disposition: attachment; filename=" . $fileName); $headers->addHeaderLine("Content-Description: File Transfert" ); $headers->addHeaderLine("Content-Transfer-Encoding: binary" ); $headers->addHeaderLine("Content-Length: " . $fileSize ); $headers->addHeaderLine("Pragma: no-cache" ); $headers->addHeaderLine("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" ); $headers->addHeaderLine("Expires: 0" ); //$response->setContent($content); var_dump($headers); //return $response; }
Je peux utiliser fread pour récupérer le contenu et le mettre dans le contenu de ma réponse :
Mais celà ne pose-t-il pas un problème ? Si la taille du fichier est important, $response risque d'être trop 'lourde' non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $contents = fread($handle, filesize($filename)); $response->setContent($content);
Quelle serait la bonen manière pour télécharger un fichier de n'importe quelle taille avec zend ?
Merci
Partager