How to create and download a Zip file with PHP

PHP provides ZipArchive Class which allows us to create Zip file. This class makes the file creation little easier.

Programmatically Zip creation mainly requires when preparing the group of file and folders for downloading.

In the demonstration, I am creating a function that will read all files and folders from the specified directory and add them in the ZipArchive class object.

How To Create And Download A Zip File with PHP


Contents

  1. HTML
  2. PHP
  3. CSS
  4. Conclusion

 


 

1. HTML

Creating a <form> which have two button elements, one for Create Zip and another for Download.

Completed Code

<div class='container'>
 <h1>Create and Download Zip file using PHP</h1>
 <form method='post' action=''>
  <input type='submit' name='create' value='Create Zip' />&nbsp;
  <input type='submit' name='download' value='Download' />
 </form>
</div>

 


 

2. PHP

I have created includes folder within the project where I stored some files and folders.

Create Zip

Create ZipArchive Class object for Zip file creation. Define a function createZip() to read files and directory from the specified directory path.

If file

If the reading value is the file then add it to zip object using addFile() method.

If directory

If the value is directory then create an empty directory and call createZip() function where pass the directory path.

Download Zip

Check if zip file exists or not. If it exists then download and remove it from the server.

Completed Code

<?php 
// Create ZIP file
if(isset($_POST['create'])){
 $zip = new ZipArchive();
 $filename = "./myzipfile.zip";

 if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
  exit("cannot open <$filename>\n");
 }

 $dir = 'includes/';

 // Create zip
 createZip($zip,$dir);

 $zip->close();
}

// Create zip
function createZip($zip,$dir){
 if (is_dir($dir)){

  if ($dh = opendir($dir)){
   while (($file = readdir($dh)) !== false){
 
    // If file
    if (is_file($dir.$file)) {
     if($file != '' && $file != '.' && $file != '..'){
 
      $zip->addFile($dir.$file);
     }
    }else{
     // If directory
     if(is_dir($dir.$file) ){

      if($file != '' && $file != '.' && $file != '..'){

       // Add empty directory
       $zip->addEmptyDir($dir.$file);

       $folder = $dir.$file.'/';
 
       // Read data of the folder
       createZip($zip,$folder);
      }
     }
 
    }
 
   }
   closedir($dh);
  }
 }
}

// Download Created Zip file
if(isset($_POST['download'])){
 
 $filename = "myzipfile.zip";

 if (file_exists($filename)) {
  header('Content-Type: application/zip');
  header('Content-Disposition: attachment; filename="'.basename($filename).'"');
  header('Content-Length: ' . filesize($filename));

  flush();
  readfile($filename);
  // delete file
  unlink($filename);
 
 }
}
?>

 

3. CSS

.container{
 margin: 0 auto;
 width: 50%;
 text-align: center;
}

input[type=submit]{
 border: 0px;
 padding: 7px 15px;
 font-size: 16px;
 background-color: #00a1a1;
 color: white;
 font-weight: bold;
}

 

4. Conclusion

The above-defined function createZip() accept path of the directory as a parameter. It will read all files and folders from the path and add in the zip file.

Related Post

Spread the love

One Comment

  1. Very helpful article.
    But I had some question. How can I implement this code in static website? That website only have html, css and js code , how to do a creating zip file functionality.

    Thanks Advance for reply.

    April 21, 2017
    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *