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);
ZipArchive::open
(No version information available, might be only in CVS)
ZipArchive::open — Open a ZIP file archive
Описание
Opens a new zip archive for reading, writing or modifying.
Список параметров
- filename
-
The file name of the ZIP archive to open.
- flags
-
The mode to use to open the archive.
-
ZIPARCHIVE::OVERWRITE
-
ZIPARCHIVE::CREATE
-
ZIPARCHIVE::EXCL
-
ZIPARCHIVE::CHECKCONS
-
Возвращаемые значения
- Error codes
-
Returns TRUE on success or the error code.
-
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
-
Примеры
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.
Пример #1 Open and extract
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip')
if ($res === TRUE) {
echo 'ok';
$zip->extractTo('test');
$zip->close();
} else {
echo 'failed, code:' . $res;
}
?>
Пример #2 Create an archive
<?php
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->addFile('data.txt', 'entryname.txt');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>
ZipArchive::open
16-May-2008 12:26
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.
