Intereting Posts
Мягкое удаление Каскадирование с помощью Laravel 5.2 Отправка приглашения календаря ics с помощью Swift Mailer и Send Grid ошибка при использовании exec () для вызова скрипта python PHP APC: Что происходит, когда кеш APC заполнен? Как использовать переменные сеанса в wordpress PHP читает комментарии к файлам НЕ содержимое файла – забыли Как читать и эхо-размер файла загружаемого файла, написанного на сервере в реальном времени, без блокировки на сервере и на клиенте? Как PHP отслеживает созданные объекты? Дамп объекта в C ++, например var_dump () в PHP? перекрестный поддомен с помощью файлов cookie Корпус Fosrestbundle пуст при многократном запросе Цитирование через переменные $ _POST Получить схему URL-адреса файла утвердить возраст до регистрации пользователя, чтобы проверить, будет ли ГЭС в течение определенного возраста с использованием mvc PHP preg_match «И» оператор

Symfony2 создает и загружает zip-файл

У меня есть одно приложение, которое загружает некоторые файлы, а затем я могу сжимать как zip-файл и загружать.

Действие экспорта:

public function exportAction() { $files = array(); $em = $this->getDoctrine()->getManager(); $doc = $em->getRepository('AdminDocumentBundle:Document')->findAll(); foreach ($_POST as $p) { foreach ($doc as $d) { if ($d->getId() == $p) { array_push($files, "../web/".$d->getWebPath()); } } } $zip = new \ZipArchive(); $zipName = 'Documents-'.time().".zip"; $zip->open($zipName, \ZipArchive::CREATE); foreach ($files as $f) { $zip->addFromString(basename($f), file_get_contents($f)); } $response = new Response(); $response->setContent(readfile("../web/".$zipName)); $response->headers->set('Content-Type', 'application/zip'); $response->header('Content-disposition: attachment; filename=../web/"'.$zipName.'"'); $response->header('Content-Length: ' . filesize("../web/" . $zipName)); $response->readfile("../web/" . $zipName); return $response; } 

все в порядке до заголовка строки. и каждый раз, когда я собираюсь сюда, я получил ошибку: «Warning: readfile (../ web / Documents-1385648213.zip): не удалось открыть поток: нет такого файла или каталога"

Что не так?

и почему, когда я загружаю файлы, эти файлы имеют права root, и то же самое происходит с создаваемым zip-файлом.

Solutions Collecting From Web of "Symfony2 создает и загружает zip-файл"

решил:

 $zip->close(); header('Content-Type', 'application/zip'); header('Content-disposition: attachment; filename="' . $zipName . '"'); header('Content-Length: ' . filesize($zipName)); readfile($zipName); 

очевидно закрытие файла важно;)

Пример SYMFONY 3:

 public function zipDownloadAllDocumentAction($documents) { $files = array(); $em = $this->getDoctrine()->getManager(); foreach ($documents as $d) { array_push($files, "../web/".$d->getWebPath()); } $zip = new \ZipArchive(); $zipName = 'Documents_'.time().".zip"; $zip->open($zipName, \ZipArchive::CREATE); foreach ($files as $f) { $zip->addFromString(basename($f), file_get_contents($f)); } $zip->close(); $response = new Response(file_get_contents($zipName)); $response->headers->set('Content-Type', 'application/zip'); $response->headers->set('Content-Disposition', 'attachment;filename="' . $zipName . '"'); $response->headers->set('Content-length', filesize($zipName)); return $response; } 

Поздно, но, возможно, это будет полезно кому-то еще

http://symfony.com/doc/2.3/components/http_foundation/introduction.html#serving-files

Я думаю, что это лучше, чем вы

 $zipFilesIds = $request->request->get('zipFiles') foreach($zipFilesIds as $zipFilesId){ //your vérification here } 

с переменной post вашего идентификатора zip = 'zipFiles'. Лучше всего извлекать все переменные $ _POST.