Задать вопрос
myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Yii как скачать папку архивом с сайта через http?

Всем доброй ночи! Интересует один вопрос по скачиванию папок и файлов в виде архивов с сайта по двум тегам. Загрузка будет проводится на стороне клиента (http).

1. Фреймворк Yii.
Есть ли во фреймворке способ скачать папку, вложенные в неё папки и файлы архивом, например, Zip?
В документации такого не нашел. Есть только удаление файлов, создание папок, копии ... с помощью FileHelper.

2. Php
Каким образом можно скачивать папки, вложенные в неё папки и файлы архивом, например, Zip. Либо другой способ. Есть ли примеры и как лучше это реализовать?
  • Вопрос задан
  • 548 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
myks92
@myks92 Автор вопроса, куратор тега PHP
Нашёл решение — пометь вопрос ответом!
public function actionDownloadMultiple()
    {
        $error = "";
        if(isset($_POST['createpdf']))
        {
            $post = $_POST;
            $file_folder = "files/"; // папка с файлами
            if(extension_loaded('zip'))
            {
                if(isset($post['files']) and count($post['files']) > 0)
                {
                    // проверяем выбранные файлы
                    $zip = new ZipArchive(); // подгружаем библиотеку zip
                    $zip_name = time().".zip"; // имя файла
                    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE)
                    {

                        $error .= "* К сожалению, создание ZIP не удалось";
                    }
                    foreach($post['files'] as $file)
                    {
                        $zip->addFile($file_folder.$file); // добавляем файлы в zip архив
                    }
                    $zip->close();
                    if(file_exists($zip_name))
                    {
                        // отдаём файл на скачивание
                        header('Content-type: application/zip');
                        header('Content-Disposition: attachment; filename="'.$zip_name.'"');
                        readfile($zip_name);
                        // удаляем zip файл если он существует
                        unlink($zip_name);
                    }

                }
                else
                    $error .= "* Пожалуйста, выберите файлы";
            }
            else
                $error .= "* У вас нет расширения ZIP";
        }

    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
butteff
@butteff
Раз в тысячу лет заправляю свитер в носки
exec()
exec('tar -czf name.tgz /path/to/folder');
Ответ написан
sokollondon
@sokollondon
Yii2. Как скачать несколько файлов архивом
$file = \Yii::getAlias('@webroot/archive'.microtime().'.zip');
$zip = new \ZipArchive();
$zip->open($file, \ZIPARCHIVE::CREATE);
$zip->addFile("index.php");//добавляем файлы в архив
$zip->close();
if (file_exists($file)) {
    \Yii::$app->response->sendFile($file, 'archive.zip');
    ignore_user_abort(true);//удаление временного файла
    if (connection_aborted()) unlink($file);
    register_shutdown_function('unlink', $file);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы