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;
}
}
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
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. –
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