Nefunkčné generované zip s vždy rovnakov velkosťou

KristianSubweb
Člen | 146
+
0
-

Ahojte nevedeli by ste pomocť generujem zip do ktorého chcem vložiť niekolko suborov. Zakaždím je rovnako velké a nedá sa mi ani otvoriť ? Neviete kde robím chybu?

$zipName = 'test.zip';
           $zip = new \ZipArchive();
           if ($zip->open($zipName, \ZipArchive::CREATE)!== TRUE)
               throw new InvalidOperationException('Nepodařilo se otevřít zip archiv.');

           foreach ($v["filesId"] as $id) {

               $file = $this->multimediaService->findById($id);

               $path = $this->request->getUrl()->baseUrl . $file->getPath();

               $zip->addFile($path, $file->getName());

           }

           $zip->close();

           $this->httpResponse->setHeader('Content-Description', 'File Transfer');
           $this->httpResponse->setContentType('application/zip', 'UTF-8');
           $this->httpResponse->setHeader('Content-Disposition', 'attachment; filename=' . $zipName);
           $this->httpResponse->setHeader('Content-Transfer-Encoding', 'binary');
           $this->httpResponse->setHeader('Expires', 0);
           $this->httpResponse->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
           $this->httpResponse->setHeader('Pragma', 'public');
           $this->httpResponse->setHeader('Content-Length', filesize($zipName));

Editoval KristianSubweb (12. 9. 2018 15:04)

Kcko
Člen | 470
+
0
-

Ten response zkus takhle

<?php
$response = new Nette\Application\Responses\FileResponse($path.$zipfile, $zipfile);
$this->sendResponse($response);
?>
David Matějka
Moderator | 6445
+
+3
-
  1. když pracuješ se soubory, vždy používej absolutní cestu – konkrétně u toho zipName, který asi budeš chtít umístit do nějaké temp složky
  2. poté si zkontroluj, že máš zápis do té složky
  3. $this->request->getUrl()->baseUrl nemůže fungovat, to vráti cestu z URL, ne na disku