Créer et proposer une archive ZIP
Bonjour à tous,
J'ai besoin de proposer aux utilisateurs le téléchargement de PDFs compressés dans une archive ZIP. J'ai testé plusieurs scripts trouvés sur le net jusqu'à trouver mon bonheur. Du moins le pensais-je ! Il s'avère que mon archive est uniquement lisible sous Linux. Incompréhension totale !
Voici mon code :
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 26 27 28 29 30 31
| $request = $this->getRequest();
$session = $request->getSession();
$zip = new ZipArchive();
$zipName = 'cotations.zip';
$dir = $this->get('kernel')->getRootDir() . '/../web/bundles/blabla/pdf/'.$session->getId().'/zip/';
if(file_exists($dir.$zipName)){
unlink($dir.$zipName);
}
if($zip->open($dir.$zipName, ZipArchive::CREATE) === true)
{
echo '"cotations.zip" ouvert<br/>';
$files = scandir($dir);
unset($files[0], $files[1]);
foreach($files as $file) {
$zip->addFile($dir.$file, $file);
}
// Et on referme l'archive.
}
else
{
echo 'Impossible d'ouvrir "cotations.zip<br/>';
// Traitement des erreurs avec un switch(), par exemple.
}
$zipNameContents = $zip->filename;
$zip->close();
$response = new Response(file_get_contents($zipNameContents));
$response->headers->set('Content-Type', 'application/zip');
$d = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $zipName);
$response->headers->set('Content-Disposition', $d);
return $response; |
Et voici la requêtes de téléchargement :
Code:
1 2 3 4 5 6 7 8
| curl 'http://application.vgrt/web/app_dev.php/pdf-telechargement'
-H 'Host: application.vgrt'
-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0 Iceweasel/31.8.0'
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
-H 'Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3'
-H 'Accept-Encoding: gzip, deflate'
-H 'Referer: http://application.vgrt/web/app_dev.php/validation'
-H 'Connection: keep-alive' |
Auriez-vous un tuto traitant de la création d'archive sous symfony vers lequel me rediriger à la limite ?