Start · Sprachen · PHP · Referenz · rar://

rar://

Funktion

Stream-Wrapper für den Zugriff auf Dateien innerhalb von RAR-Archiven über Standard-PHP-Dateifunktionen.

seit PHP 3.0.0 Kategorie: misc

Signatur

rar://

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.';
}
Inhalt von readme.txt aus dem RAR-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.';
}
datei1.txt bild.png untervzeichnis/

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);
}
<?xml version="1.0"?>...

// 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.