Solved

PHP Function to unzip a zip file to a sub-directory

Posted on 2011-02-21
9
153 Views
Last Modified: 2013-11-30
I'm trying to extract the contents of a zip package to a specific folder and keep getting an error.  I know the .zip package is good as I can open in from other programs.  This is php 5.2 so I know ZipArchive class is bundled.  Help???
Private $extractDir = './IMG/';

Private function download_pics ($dl_link){
	$zip = new ZipArchive;
	echo ('<br/>Start d/l Function');
	if  ($zip->open('./Test.zip') === true){
	  echo ('<br/>Start 1st Zip');
	  $zip->extractTo($extractDir);
	  $zip->close();
	  } ELSE {
  	  die("<br/>There was a problem unpacking the website .ZIP archive.");
	  }
  echo ('<br/>End Zip Functions');
  }

Open in new window

0
Comment
Question by:Dean_Kletter
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
9 Comments
 
LVL 8

Expert Comment

by:ragnarok89
ID: 34945518
is the php_zip.dll extension uncommented in your php.ini?
0
 
LVL 5

Expert Comment

by:wmadrid1
ID: 34945619
Can you please post te PHP Error
0
 

Author Comment

by:Dean_Kletter
ID: 34946455
I searched my php.ini and could not find a reference to php_zip.dll,  there was a mention of zlib but that appeared to be for uploading files.

I added:

extension=php_zip.dll

Still getting error, do I need to reboot?  Let IIS sit for 30 minute but did not restart services.

I have Error logging set to on and production level put nothing appeared but the error built into the code.
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 5

Expert Comment

by:wmadrid1
ID: 34946571
You need to restart the IIS,

You can verify the ZI functions are loaded, creating a file with
<?
echo phpinfo();
?>

And run it from internet explorer,
This show a list, with the status of PHP
and all the loaded plugins, here must be the ZIP libraries showed
0
 

Author Comment

by:Dean_Kletter
ID: 34946971
It says it is enabled

 screen shot of phpinfo
0
 
LVL 5

Accepted Solution

by:
wmadrid1 earned 500 total points
ID: 34947040
I worked with this function to extract without problems:

function extractZip( $zipFile = '', $dirFromZip = '' )
{
	define(DIRECTORY_SEPARATOR, '/');    
	$zipDir = getcwd().DIRECTORY_SEPARATOR;
	$zip = zip_open($zipDir.$zipFile);    
	$zipDir = getcwd().DIRECTORY_SEPARATOR;
	if ($zip)    
	{        
		while ($zip_entry = zip_read($zip))        
		{            
			$completePath = $zipDir . dirname(zip_entry_name($zip_entry));            
			$completeName = $zipDir . zip_entry_name($zip_entry);            
			// Walk through path to create non existing directories            
			// This won't apply to empty directories ! They are created further below            
			if(!file_exists($completePath) && preg_match( '#^' . $dirFromZip .'.*#', dirname(zip_entry_name($zip_entry)) ) )            
			{                
				$tmp = '';                
				foreach(explode('/',$completePath) AS $k)                
				{                    
					$tmp .= $k.'/';                    
					if(!file_exists($tmp) )                    
					{                        
						mkdir($tmp, 0777);                    
					}                
				}            
			}            
			if (zip_entry_open($zip, $zip_entry, "r"))            
			{
				if( preg_match( '#^' . $dirFromZip .'.*#', dirname(zip_entry_name($zip_entry)) ) )                
				{                    
					if ($fd = fopen($completeName, 'w+'))                    
					{                        
						fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)));                        
						fclose($fd);                    
					}                    
					else                    
					{                        
						// We think this was an empty directory                        
						mkdir($completeName, 0777);                    
					}                    
					zip_entry_close($zip_entry);                
				}            
			}        
		}        
		zip_close($zip);    
	}    
	return true;
}

Open in new window

0
 

Author Comment

by:Dean_Kletter
ID: 34952891
That is nice.  I don't need to enumerate through the ZIP file, just expand the contents to a folder.  The code below is directly off the PHP Website but still the ZIP file fails verification somehow.  I know the zip is valid, as I can open in numerous archiving application but it still fails the boolean test.
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
    $zip->extractTo('/my/destination/dir/');
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
?>

Open in new window

0
 
LVL 16

Expert Comment

by:CWS (haripriya)
ID: 39686708
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Popularity Can Be Measured Sometimes we deal with questions of popularity, and we need a way to collect opinions from our clients.  This article shows a simple teaching example of how we might elect a favorite color by letting our clients vote for …
Generating table dynamically is the most common issue faced by php developers.... So it seems there is a need of an article that explains the basic concept of generating tables dynamically. It just requires a basic knowledge of html and little maths…
The viewer will learn how to count occurrences of each item in an array.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

749 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question