Signatur
Beschreibung
zip:// ist ein eingebauter PHP-Stream-Wrapper, der es ermöglicht, einzelne Dateien innerhalb eines ZIP-Archivs direkt über Standard-Datei-Funktionen wie fopen(), file_get_contents(), include() oder copy() zu lesen, ohne das Archiv vorher manuell zu entpacken.
Die Syntax lautet zip://pfad/zum/archiv.zip#pfad/zur/datei/im/archiv. Der Pfad zum Archiv kann absolut oder relativ angegeben werden; der Pfad zur Zieldatei innerhalb des Archivs wird durch eine Raute (#) vom Archivpfad getrennt.
Der Wrapper eignet sich besonders für den schreibgeschützten Zugriff auf in ZIP-Dateien verpackte Ressourcen, z. B. Konfigurationsdateien, Templates oder Assets, die zusammen ausgeliefert werden. Wichtig: Der Wrapper unterstützt nur lesenden Zugriff – das Schreiben in ZIP-Archive über diesen Wrapper ist nicht möglich.
Für komplexere Operationen wie das Erstellen oder Modifizieren von ZIP-Archiven sollte die ZipArchive-Klasse verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $archive Pflicht | string | Absoluter oder relativer Dateisystempfad zur ZIP-Datei, z. B. /var/data/archiv.zip. |
|
| $entry Pflicht | string | Pfad zur gewünschten Datei innerhalb des ZIP-Archivs, getrennt vom Archivpfad durch #, z. B. config/settings.ini. |
Rückgabewert
fopen() gibt eine Stream-Ressource zurück, file_get_contents() den Inhalt als string oder false bei Fehler.Beispiele
Dateiinhalt aus ZIP-Archiv lesen
<?php
// Eine Textdatei direkt aus einem ZIP-Archiv lesen
$inhalt = file_get_contents('zip:///var/www/daten/archiv.zip#dokumente/readme.txt');
if ($inhalt !== false) {
echo $inhalt;
} else {
echo 'Datei konnte nicht gelesen werden.';
}
ZIP-Eintrag zeilenweise mit fopen() lesen
<?php
// Stream öffnen und zeilenweise verarbeiten
$handle = fopen('zip://archiv.zip#daten/liste.csv', 'r');
if ($handle) {
while (($zeile = fgets($handle)) !== false) {
echo htmlspecialchars($zeile) . "<br>\n";
}
fclose($handle);
} else {
echo 'Archiv oder Datei nicht gefunden.';
}
PHP-Datei aus ZIP einbinden (include)
<?php
// Eine PHP-Datei direkt aus einem ZIP-Archiv einbinden
// Achtung: Sicherheitsrisiko bei nicht vertrauenswürdigen Archiven!
include 'zip:///opt/app/plugins.zip#plugins/mein-plugin.php';
// Wichtig · Fallstricke
Sicherheitshinweis: Das Einbinden von PHP-Dateien aus ZIP-Archiven über include oder require ist gefährlich, wenn der Archivpfad oder der Eintragspfad von Benutzereingaben abhängt. Dies kann zu Remote-Code-Execution (RCE) führen. Nutzereingaben dürfen niemals ungeprüft in zip://-Pfade einfließen.
Der Wrapper ist schreibgeschützt. Versuche, über fwrite() oder ähnliche Funktionen in einen zip://-Stream zu schreiben, schlagen fehl. Für schreibende Zugriffe muss ZipArchive genutzt werden.
In manchen Umgebungen muss die php_zip-Erweiterung explizit aktiviert sein (extension=zip in der php.ini). Ohne diese Erweiterung steht der Wrapper nicht zur Verfügung.
Der Pfad-Trenner innerhalb des Archivs (#) darf nicht URL-kodiert werden; dies würde zu einem Fehler führen.