[ZF2.x]Download de fichier
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)
Code:
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;
}
?> |
Voici ce que j'ai commencé à faire avec zend :
Code:
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;
} |
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.
Je peux utiliser fread pour récupérer le contenu et le mettre dans le contenu de ma réponse :
Code:
1 2
| $contents = fread($handle, filesize($filename));
$response->setContent($content); |
Mais celà ne pose-t-il pas un problème ? Si la taille du fichier est important, $response risque d'être trop 'lourde' non ?
Quelle serait la bonen manière pour télécharger un fichier de n'importe quelle taille avec zend ?
Merci