In this article, we are going to tell you how to create zip file and download using ZipArchive with example in PHP.

Here, we create a Zip file using the ZipArchive class in this example. sometimes, we need to compress a zip file for send emails like multiple invoices. so we can easily create zip file and download using the below example.

so you can follow the below example for create a zip file example using ziparchive php class.

index.php

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Create Zip File And Download Using ZipArchive In Php - XpertPhp</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
  <div class="row">
    <div class="col-sm-12">
      <h3>Create Zip File And Download Using ZipArchive</h3>
       <a href="download.php" class="btn btn-info" >Download ZIP</a>    
    </div>
  </div>
</div>
</body>
</html>

download.php

<?php
function createZipArchive($files = array(), $destination = '', $overwrite = false) {

   if(file_exists($destination) && !$overwrite) { return false; }

   $validFiles = array();
   if(is_array($files)) {
      foreach($files as $file) {
         if(file_exists($file)) {
            $validFiles[] = $file;
         }
      }
   }

   if(count($validFiles)) {
      $zip = new ZipArchive();
      if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) == true) {
         foreach($validFiles as $file) {
            $zip->addFile($file,$file);
         }
         $zip->close();
         return file_exists($destination);
      }else{
          return false;
      }
   }else{
      return false;
   }
}

$fileName = 'invoicezipfile.zip';
$files = array('uploads/Invoice1.pdf', 'uploads/Invoice2.pdf');
$result = createZipArchive($files, $fileName);

header("Content-Disposition: attachment; filename=\"".$fileName."\"");
header("Content-Length: ".filesize($fileName));
readfile($fileName);

?>

We think would you like this article, so you can click on “Show Demo” button and you can see this demo article.

Show Demo