<?php
/*
Hi!
I made a little script about checking content and "secure repacking"
*/
$somefile = "zip.zip";
$someurl = "/some/url"
$zip = new ZipArchive;
$open = $zip->open($somefile, ZIPARCHIVE::CHECKCONS);
// If the archive is broken(or just another file renamed to *.zip) the function will return error on httpd under windows, so it's good to check if the archive is ok with ZIPARCHIVE::CHECKCONS
if ($open === TRUE) {
if(!$zip->extractTo($someurl)) {
die ("Error during extracting");
}
$zip->close();
}
$new_archive_name = "new.zip";
$new_zip = new ZipArchive;
$new_open = $new_zip->open($new_archive_name, ZIPARCHIVE::CREATE);
if ($new_open === TRUE) {
$dir = opendir($someurl);
while ($file = readdir($dir)) {
if ($file == "." || $file == "..") { } else {
//We do not wanna this files in the new zip archive
if (!$new_zip->addFile($file)) {
print $file."was not added!<br />";
}
}
}
}
$new_zip->close();
?>
ZipArchive::open
(No version information available, might be only in CVS)
ZipArchive::open — ZIP ファイルアーカイブをオープンする
説明
新しい zip アーカイブを、読み込み/書き込み/変更用にオープンします。
パラメータ
- filename
-
オープンする ZIP アーカイブのファイル名。
- flags
-
アーカイブのオープンに使用するモード。
-
ZIPARCHIVE::OVERWRITE
-
ZIPARCHIVE::CREATE
-
ZIPARCHIVE::EXCL
-
ZIPARCHIVE::CHECKCONS
-
返り値
- エラーコード
-
成功した場合に TRUE、それ以外の場合にエラーコードを返します。
-
ZIPARCHIVE::ER_EXISTS
-
ZIPARCHIVE::ER_INCONS
-
ZIPARCHIVE::ER_INVAL
-
ZIPARCHIVE::ER_MEMORY
-
ZIPARCHIVE::ER_NOENT
-
ZIPARCHIVE::ER_NOZIP
-
ZIPARCHIVE::ER_OPEN
-
ZIPARCHIVE::ER_READ
-
ZIPARCHIVE::ER_SEEK
-
例
この例は、ZIP ファイルアーカイブをオープンして内部の各ファイルを読み込み、 その内容を表示します。この例で使用するアーカイブ test2.zip は、ZZIPlib のソース配布物に含まれているテスト用アーカイブのひとつです。
例1 オープンおよび展開
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip')
if ($res === TRUE) {
echo '成功';
$zip->extractTo('test');
$zip->close();
} else {
echo '失敗、コード:' . $res;
}
?>
例2 アーカイブの作成
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'ここにファイルの内容を書きます');
$zip->addFile('data.txt', 'entryname.txt');
$zip->close();
echo '成功';
} else {
echo '失敗';
}
?>
ZipArchive::open
01-Aug-2008 01:25
23-Jul-2008 07:14
The file name does not need to end in '.zip' if it is created using tempnam(). You just need to overwrite the file instead of trying to read it:
<?php
$file = tempnam("tmp", "zip");
$zip = new ZipArchive();
// Zip will open and overwrite the file, rather than try to read it.
$zip->open($file, ZipArchive::OVERWRITE);
$zip->close();
// Stream the file to the client
header("Content-Type: application/zip");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename=\"a_zip_file.zip\"");
readfile($file);
unlink($file);
?>
16-May-2008 12:26
If you try this to open a file with creation in mind (= empty zip to fill with other files), this may not work :
$res = $zip->open($zip_file, ZipArchive::CREATE);
// you may get false
Try this instead, it should work :
$res = $zip->open($zip_file, ZIPARCHIVE::OVERWRITE);
18-Dec-2007 06:26
It seems the filename has to end in '.zip', so this suffix must be added when using tempnam() to create a random temporary file name.
02-Jul-2007 05:07
If the directory you are writing or saving into does not have the correct permissions set, you won't get any error messages and it will look like everything worked fine... except it won't have changed!
Instead make sure you collect the return value of ZipArchive::close(). If it is false... it didn't work.
