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";
}
?>
ZipArchive::extractTo
(No version information available, might be only in CVS)
ZipArchive::extractTo — アーカイブの内容を展開する
説明
アーカイブの全体あるいは指定したファイルを、 指定した場所に展開します。
パラメータ
- destination
-
ファイルを展開する場所。
- entries
-
展開するエントリ。単一のエントリ名、 あるいはエントリ名の配列を指定します。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
この例は、ZIP ファイルアーカイブをオープンして内部の各ファイルを読み込み、 その内容を表示します。この例で使用するアーカイブ test2.zip は、ZZIPlib のソース配布物に含まれているテスト用アーカイブのひとつです。
例1 全エントリの展開
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->extractTo('/my/destination/dir/');
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
例2 二つのエントリのみの展開
<?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::extractTo
Kaya
03-Oct-2008 11:36
03-Oct-2008 11:36
tBone
03-Jun-2008 03:03
03-Jun-2008 03: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
