Creating a zip file with PHP?

This is my first time trying to create a ZIP file in PHP.

What I do, my PHP will search for files in a specific directory, grab them all and save to a ZIP file. Then the zip file will send the file to the browser for download. I am very close, but I am stuck in a certain part.

Here is my code:

$zip = new ZipArchive(); if ($zip->open('test.zip', ZIPARCHIVE::CREATE) !== TRUE) { die ("Could not open archive"); } $myDirectory = opendir("../folder/plugins/".$id.""); while($entryName = readdir($myDirectory)) { $dirArray[] = $entryName; } closedir($myDirectory); $indexCount = count($dirArray); sort($dirArray); for($index=0; $index < $indexCount; $index++) { if (substr("$dirArray[$index]", 0, 1) != "."){ $file = "".$myDirectory."".$dirArray[$index].".zip"; $zip->addFile($file, $file) or die ("cant add file"); ; echo $dirArray[$index]; echo '</br>'; }} $zip->close()or die("cant close"); 

I am trying to close the "cannot close" error. Please help me here, I cannot find what I am doing wrong in my code. This is what it prints:

  filename1.png filename2.png can't close 

:)

+4
source share
2 answers

Check the following line:

 $zip->addFile($file, $file) 

Is that what you really want to achieve?

+4
source

Here's how I earned it:

  <?php $dirArray = array(); /* creates a compressed zip file */ $zip = new ZipArchive; if ($zip->open('dataminefiles.zip', ZIPARCHIVE::CREATE) !== TRUE) { die ("Could not open archive"); } // open the current dir if ($handle = opendir('.')) { while (false !== ($entry = readdir($handle))) { // ignore hidden files if ($entry != "." && $entry != "..") { // only zip specific files if ( substr($entry,-3,3) == "jpg" || substr($entry,-3,3) == "pdf" || substr($entry,-3,3) == "lsx" || substr($entry,-3,3) == "xls" || substr($entry,-3,3) == "doc" || substr($entry,-3,3) == "txt" || substr($entry,-3,3) == "png" || substr($entry,-3,3) == "gif" || substr($entry,-3,3) == "peg" ) { // if allowed, add them to the array $dirArray[] = $entry; } } } closedir($handle); } $indexCount = count($dirArray); sort($dirArray); // loop through the files and add them to the zip file for($index=0; $index < $indexCount; $index++) { $file = "{$dirArray[$index]}"; $zip->addFile($file, $file); } // close the zip file $zip->close(); ?> 
0
source

All Articles