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.
ZipArchive::extractTo
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::extractTo — Extrahiert den Archivinhalt
Beschreibung
Extrahiert das komplette Archiv oder die gegebenen Dateien in das angegebene Ziel.
Parameter-Liste
- destination
-
Stelle, an die die Dateien extrahiert werden sollen.
- entries
-
Die zu extrahierenden Einträge. Es wird entweder ein einzelner Eintragsname oder ein Array von Namen akzeptiert.
Rückgabewerte
Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.
Beispiele
Dieses Beispiel öffnet ein ZIP-Dateiarchiv, liest jede Datei im Archiv und gibt ihren Inhalt aus. Das test2.zip-Archiv, das in diesem Beispiel verwendet wird, ist eines der Testarchive der ZZIPlib-Quelldistribution.
Beispiel #1 Alle Einträge extrahieren
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/mein/ziel/verzeichnis/');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Beispiel #2 Nur zwei Einträge extrahieren
<?php
$zip = new ZipArchive;
$res = $zip->open('test_im.zip');
if ($res === TRUE) {
$zip->extractTo('/mein/ziel/verzeichnis/', array('pear_item.gif', 'testfromfile.php'));
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
ZipArchive::extractTo
01-Jun-2009 04:28
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
?>
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";
}
?>
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
