Dealing with files uploaded to the server, users might want to download the files in one zip file. So this snippet of code is the one that I have been using in my Zend Framework action:
$compressedFileName = 'download'.mktime().'.zip'; $currentFolderPath = '/data/'; $compressedFileLocation = '/tmp/'.$compressedFileName; foreach ($files as $file) { $files_to_be_compressed[] = '"'.$file->getFileName().'"'; } chdir($currentFolderPath); if (count($files_to_be_compressed)) { $command = "zip $compressedFileName " . implode(' ', $files_to_be_compressed); shell_exec($command); //move the tar file to temp folder so that we can easily remove all the temp tar files with cron $command = "mv $compressedFileName $compressedFileLocation"; shell_exec($command); } if (file_exists($compressedFileLocation)) { //disable the default layout because we want to present a file $this->_helper->viewRenderer->setNoRender(); $documentMime = $docmans->mime_content_type($compressedFileLocation); // Since everything is correct, send the file then! header('Content-Description: File Transfer'); header("Content-Type: $documentMime"); header("Content-Length: ".filesize($compressedFileLocation)); header("Content-Disposition: attachment; filename=\"$compressedFileName\""); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); readfile($compressedFileLocation); exit(); } |
This will only work in linux server, I guess.