Currently the number of files that can be added using addFile to the ZIP archive (until it is closed) is limited by file descriptors limit. This is an easy workaround (on the bug links below you can find another workarounds):
<?php
/** work around file descriptor number limitation (to avoid failure
* upon adding more than typically 253 or 1024 files to ZIP) */
function addFileToZip( $zip, $path, $zipEntryName ) {
// this would fail with status ZIPARCHIVE::ER_OPEN
// after certain number of files is added since
// ZipArchive internally stores the file descriptors of all the
// added files and only on close writes the contents to the ZIP file
// see: http://bugs.php.net/bug.php?id=40494
// and: http://pecl.php.net/bugs/bug.php?id=9443
// return $zip->addFile( $path, $zipEntryName );
$contents = file_get_contents( $path );
if ( $contents === false ) {
return false;
}
return $zip->addFromString( $zipEntryName, $contents );
}
?>
ZipArchive::addFile
(PHP 5 >= 5.2.0, PECL zip >= 1.1.0)
ZipArchive::addFile — Fügt eine Datei von einem gegebenen Pfad zu einem ZIP-Archiv hinzu
Beschreibung
$filename
[, string $localname = NULL
[, int $start = 0
[, int $length = 0
]]] )Fügt eine Datei von einem gegebenen Pfad zu einem ZIP-Archiv hinzu.
Parameter-Liste
-
filename -
Der Pfad zur hinzuzufügenden Datei.
-
localname -
Falls übergeben, ist dies der lokale Name innerhalb des ZIP-Archives, der den
filenameüberschreibt. -
start -
Dieser Parameter wird nicht genutzt, aber benötigt, um ZipArchive zu erweitern.
-
length -
Dieser Parameter wird nicht genutzt, aber benötigt, um ZipArchive zu erweitern.
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Beispiele
Dieses Beispiel öffnet ein ZIP-Dateiarchiv test.zip und fügt die Datei /pfad/zur/datei.txt als neuername.txt hinzu.
Beispiel #1 Öffnen und extrahieren
<?php
$zip = new ZipArchive;
if ($zip->open('test.zip') === TRUE) {
$zip->addFile('/pfad/zur/datei.txt', 'neuername.txt');
$zip->close();
echo 'ok';
} else {
echo 'Fehler';
}
?>
Anmerkungen
Hinweis:
Falls eine Datei zu einem Archiv hinzugefügt werden soll, wird PHP versuchen, die Datei zu sperren; die Sperre wird erst gelöst, nachdem die ZIP Operation beendet ist. Kurz gesagt bedeutet dies, dass eine hinzugefügte Datei erst gelöscht werden kann, nachdem das Archiv geschlossen(close()) wurde.
ZipArchive::addFile
04-Apr-2007 03:29