2010-02-05 3 views
0

Y at-il une méthode Zend Framework pour sauvegarder le contenu de 3 fichiers (qu'ils soient générés dynamiquement ou existent réellement) et forcer le téléchargement en tant que fichier?Comment compresser 3 petits fichiers texte et forcer le téléchargement avec Zend Framework

similaires à cette question (qui ne fonctionne pas pour moi lors de l'exécution de l'intérieur d'un contrôleur à ce jour, en dépit d'essayer quelques façons différentes):

PHP Zip 3 small text files and force download

Répondre

2

La réponse est celle upvoted sur votre autre question. Faites-le à partir du contrôleur, puis appelez exit après avoir sorti les données zip afin de ne pas rendre la vue.

+0

Je reçois cette erreur sur addFile ou addFromString (J'ai essayé les deux): "Objet Zip invalide ou unitialisé" même si je fais un fichier_get_contents et que je l'écrive, les données sont valides. – joedevon

+0

Vous devez appeler $ zip-> open ($ filename). avec un nom de fichier unique (peut-être le sessionID de l'utilisateur). Vous ne pouvez pas créer un zip en mémoire. –

+0

Ah, c'est logique. Donc, fondamentalement, la réponse upvoted est faux? Il n'a pas de $ zip-> open ($ file) et dans les commentaires il dit "ça le garde juste en mémoire avant de le faire écho." – joedevon

2

Vous pouvez utiliser la bibliothèque ZIP PHP (vous devez avoir ce pré-installé) comme ça:

$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); 
} 

Livrer le fichier 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; 
    } 
} 
Questions connexes