downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ZipArchive::getArchiveComment> <ZipArchive::deleteName
Last updated: Fri, 05 Feb 2010

view this page in

ZipArchive::extractTo

(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)

ZipArchive::extractToExtract the archive contents

Description

bool ZipArchive::extractTo ( string $destination [, mixed $entries ] )

Extract the complete archive or the given files to the specified destination.

Parameters

destination

Location where to extract the files.

entries

The entries to extract. It accepts either a single entry name or an array of names.

Return Values

Returns TRUE on success or FALSE on failure.

Examples

This example opens a ZIP file archive, reads each file in the archive and prints out its contents. The test2.zip archive used in this example is one of the test archives in the ZZIPlib source distribution.

Example #1 Extract all entries

<?php
$zip 
= new ZipArchive;
if (
$zip->open('test.zip') === TRUE) {
    
$zip->extractTo('/my/destination/dir/');
    
$zip->close();
    echo 
'ok';
} else {
    echo 
'failed';
}
?>

Example #2 Extract only two entries

<?php
$zip 
= new ZipArchive;
$res $zip->open('test_im.zip');
if (
$res === TRUE) {
    
$zip->extractTo('/my/destination/dir/', array('pear_item.gif''testfromfile.php'));
    
$zip->close();
    echo 
'ok';
} else {
    echo 
'failed';
}
?>


ZipArchive::getArchiveComment> <ZipArchive::deleteName
Last updated: Fri, 05 Feb 2010
 
add a note add a note User Contributed Notes
ZipArchive::extractTo
Anonymous
03-Dec-2009 12:38
I am using this function to extract a specific folder and it's contents from a zip file:

<?php
function extractDir($zipfile, $path) {
  if (
file_exists($zipfile)) {
   
$files = array();
   
$zip = new ZipArchive;
    if (
$zip->open($zipfile) === TRUE) {
      for(
$i = 0; $i < $zip->numFiles; $i++) {
       
$entry = $zip->getNameIndex($i);
       
//Use strpos() to check if the entry name contains the directory we want to extract
       
if (strpos($entry, "/MyFolder/")) {
         
//Add the entry to our array if it in in our desired directory
         
$files[] = $entry;
        }
      }
     
//Feed $files array to extractTo() to get only the files we want
     
if ($zip->extractTo($path, $files) === TRUE) {
        return
TRUE;
      } else {
        return
FALSE;
      }
     
$zip->close();
    } else {
      return
FALSE;
    }
  } else {
    return
FALSE;
  }
}

//Run the function
if (extractDir($zipfile, $path)) {
 
$extracted = "YES! :-D";
} else {
 
$extracted = "NO! :*(";
}

echo
$extracted;
?>
kawzaki at yahoo dot com
01-Jun-2009 04:28
Please be aware of the fact that using this function has OVERWRITE true.

an old file will be overwritten if the achieve (zipped file) contains file matching the same old file name.

old files that has no match in the zip, will be kept as is.

hopefully the someone will explain how to avoid overwriting old files.
Anonymous
02-Apr-2009 09:50
I found it useful to add this to a function.

<?php
/**
*  Extracts a ZIP archive to the specified extract path
*
*  @param string $file The ZIP archive to extract (including the path)   
*  @param string $extractPath The path to extract the ZIP archive to
*
*  @return boolean TURE if the ZIP archive is successfully extracted, FALSE if there was an errror

*/
function zip_extract($file, $extractPath) {

   
$zip = new ZipArchive;
   
$res = $zip->open($file);
    if (
$res === TRUE) {
       
$zip->extractTo($extractPath);
       
$zip->close();
        return
TRUE;
    } else {
        return
FALSE;
    }

}
// end function
?>
Kaya
03-Oct-2008 08:36
Make attention when using this function with apache & windows system. Windows file system use \  (backslash) instead of unix / (slash)
Use str_replace like this.
<?php
$zip
= new ZipArchive;
    if (
$zip->open("file.zip")){
       
$path = getcwd() . "/dirToextract/";
       
$path = str_replace("\\","/",$path);
        echo
$path;
        echo
$zip->extractTo($path);
       
$zip->close();
        echo
'Done.';
    } else {
        echo
"Error";
    }
?>
tBone
03-Jun-2008 12:03
This function, at least from my experience, maintains/forces the directory structure within the ZIP file.

ie. if you have FOLDER1/File1.txt in the zip file and you use
$zip->extractTo('/extract', 'FOLDER1/File1.txt');
the location of the extracted file will be:
/extract/FOLDER1/File1.txt
DerkaDerka
06-Mar-2007 06:48
This function will overwrite destination files with the same name.

ZipArchive::getArchiveComment> <ZipArchive::deleteName
Last updated: Fri, 05 Feb 2010
 
 
show source | credits | sitemap | contact | advertising | mirror sites