Как заархивировать 3 небольших текстовых файла и принудительно загрузить с Zend Framework - PullRequest
0 голосов
/ 05 февраля 2010

Существует ли метод Zend Framework для сохранения содержимого из 3 файлов (будь то динамически сгенерированный или существующий) и принудительной загрузки в виде файла?

Аналогично этому вопросу (который до сих пор не работал у меня при запуске изнутри контроллера, несмотря на несколько разных попыток):

PHP Zip 3 небольших текстовых файла и принудительная загрузка

Ответы [ 2 ]

3 голосов
/ 21 января 2013

Вы можете использовать библиотеку PHP ZIP (она должна быть предварительно установлена) следующим образом:

$zip = new ZipArchive();
if($zip->open($filename, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== true){
    throw new Exception('Could not create zip file ' . $filename);
    die('zip fail');
}else{
    $zip->addFile($file1Uri, 'file1.txt');
    $zip->addFile($file2Uri, 'file2.txt');
}

$zip->close();

if(file_exists($filename)){
    return true;            
}else{
    throw new Exception('Could not create zip file ' . $filename);
}

Доставка ZIP-файла:

protected function _deliver($file, $name, $extension, $size, $mime){
    header('Pragma: private');
    header("Expires: -1");
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT'); 
    header("Cache-Control: no-cache");
    header("Content-Transfer-Encoding: binary");
    header("Content-Type: " . $mime);
    header("Content-Description: File Transfer"); 
    header('Content-Disposition: attachment; filename="' . $name . '.' . $extension . '"');
    header("Content-Length: " . $size);
    set_time_limit(0);        
    if(!readfile($file)){
        return false;
    }
}
2 голосов
/ 05 февраля 2010

Ответ - один на другой вопрос. Сделайте это из контроллера, затем вызовите exit после того, как вы выведете данные zip, чтобы не отображать представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...