Signatur
Beschreibung
Der rar://-Stream-Wrapper ermöglicht es, Dateien innerhalb von RAR-Archiven direkt mit den gewöhnlichen PHP-Dateifunktionen wie fopen(), file_get_contents(), file() oder include() zu lesen, ohne das Archiv zuerst manuell zu entpacken. Er wird durch die PECL-Erweiterung rar bereitgestellt.
Die URL-Syntax lautet: rar://<Archivpfad>[*<Volumen-ID>][#<Eintragspfad>]. Der Archivpfad muss URL-kodiert sein, falls er Sonderzeichen enthält. Der optionale Volumen-Index (nach *) wählt ein bestimmtes Volume eines mehrteiligen Archivs aus; der optionale Eintragspfad (nach #) gibt den relativen Pfad der gewünschten Datei innerhalb des Archivs an. Wird kein Eintragspfad angegeben, wird eine Verzeichnisliste des Archivs geliefert.
Der Wrapper unterstützt lesenden Zugriff (r-Modus) sowie Verzeichnis-Iteration über opendir() / readdir(). Schreiboperationen werden nicht unterstützt. Der Wrapper eignet sich besonders dann, wenn Teile eines RAR-Archivs gelesen werden sollen, ohne das gesamte Archiv zu entpacken oder temporäre Dateien zu erzeugen.
Voraussetzung ist, dass die PECL-Erweiterung rar installiert und aktiviert ist (pecl install rar). Ohne diese Erweiterung steht der Wrapper nicht zur Verfügung.
Beispiele
Datei aus einem RAR-Archiv lesen
<?php
// Liest die Datei 'readme.txt' aus dem RAR-Archiv 'archiv.rar'
$inhalt = file_get_contents('rar:///pfad/zu/archiv.rar#readme.txt');
if ($inhalt !== false) {
echo $inhalt;
} else {
echo 'Fehler beim Lesen der Datei aus dem Archiv.';
}
Verzeichnis eines RAR-Archivs auflisten
<?php
// Listet alle Dateien im obersten Verzeichnis des Archivs auf
$dir = opendir('rar:///pfad/zu/archiv.rar');
if ($dir !== false) {
while (($eintrag = readdir($dir)) !== false) {
echo $eintrag . PHP_EOL;
}
closedir($dir);
} else {
echo 'Archiv konnte nicht geöffnet werden.';
}
Zugriff auf eine Datei in einem mehrteiligen RAR-Archiv
<?php
// Mehrteiliges Archiv: Volume-Index 0, Eintrag 'daten/config.xml'
$handle = fopen('rar:///pfad/zu/archiv.part1.rar*0#daten/config.xml', 'r');
if ($handle) {
while (!feof($handle)) {
echo fread($handle, 8192);
}
fclose($handle);
}
// Wichtig · Fallstricke
Nur lesender Zugriff: Der rar://-Wrapper unterstützt ausschließlich Lesezugriffe. Versuche, in eine Datei innerhalb eines RAR-Archivs zu schreiben, schlagen fehl.
Sicherheitshinweis: Werden Archivpfade oder Eintragspfade aus Benutzereingaben zusammengesetzt, besteht die Gefahr von Path-Traversal-Angriffen. Eingaben müssen stets validiert und mit rawurlencode() korrekt kodiert werden, bevor sie in die URL eingebaut werden.
PECL-Abhängigkeit: Die Erweiterung ist nicht in PHP selbst enthalten. Verfügbarkeit und Version müssen explizit geprüft werden (z. B. mit extension_loaded('rar')).
Verschlüsselte Archive: Passwortgeschützte RAR-Einträge können über den Stream-Wrapper nicht ohne weiteres geöffnet werden; dafür ist die direkte Verwendung der RarArchive-Klasse mit Passwort-Angabe erforderlich.