Signatur
Beschreibung
RarArchive ist die zentrale Klasse der PECL-Erweiterung rar und kapselt ein geöffnetes RAR-Archiv. Über sie lassen sich Einträge (Dateien und Verzeichnisse) im Archiv auflisten, einzelne RarEntry-Objekte abrufen und der Kommentar des Archivs lesen. Die Klasse unterstützt sowohl einteilige als auch mehrteilige (Multi-Volume) RAR-Archive.
Ein Archiv wird mit der statischen Fabrikmethode RarArchive::open() geöffnet, die im Erfolgsfall ein RarArchive-Objekt zurückgibt. Nach der Arbeit mit dem Archiv sollte es explizit mit RarArchive::close() geschlossen werden, um Ressourcen freizugeben. Die Klasse implementiert zudem __toString(), sodass eine aussagekräftige Darstellung direkt ausgegeben werden kann.
Für den Zugriff auf einzelne Einträge stehen RarArchive::getEntry() (für einen Eintrag nach Name) und RarArchive::getEntries() (für alle Einträge als Array) zur Verfügung. Der eigentliche Inhalt wird dann über das zugehörige RarEntry-Objekt, etwa mit RarEntry::extract(), extrahiert.
Voraussetzung: Die PECL-Erweiterung rar muss installiert und in der php.ini aktiviert sein (extension=rar). Das Schreiben oder Erstellen von RAR-Archiven ist mit dieser Erweiterung nicht möglich — sie ist ausschließlich lesend.
Beispiele
Alle Einträge eines RAR-Archivs auflisten
<?php
$rar = RarArchive::open('/pfad/zum/archiv.rar');
if ($rar === false) {
die('Archiv konnte nicht geöffnet werden.');
}
$entries = $rar->getEntries();
if ($entries === false) {
die('Einträge konnten nicht gelesen werden.');
}
foreach ($entries as $entry) {
echo $entry->getName()
. ' (' . $entry->getPackedSize() . ' Bytes komprimiert)'
. PHP_EOL;
}
$rar->close();
?>
Einzelnen Eintrag extrahieren
<?php
$rar = RarArchive::open('/pfad/zum/archiv.rar', 'geheimesPasswort');
if ($rar === false) {
die('Archiv konnte nicht geöffnet werden.');
}
$entry = $rar->getEntry('dokument.pdf');
if ($entry === false) {
$rar->close();
die('Eintrag nicht gefunden.');
}
$zielVerzeichnis = '/tmp/extraktion/';
if ($entry->extract($zielVerzeichnis)) {
echo 'Datei erfolgreich extrahiert nach: ' . $zielVerzeichnis . PHP_EOL;
} else {
echo 'Extraktion fehlgeschlagen.' . PHP_EOL;
}
$rar->close();
?>
Archiv-Kommentar und __toString verwenden
<?php
$rar = RarArchive::open('/pfad/zum/archiv.rar');
if ($rar === false) {
die('Öffnen fehlgeschlagen.');
}
$kommentar = $rar->getComment();
if ($kommentar !== null) {
echo 'Archiv-Kommentar: ' . $kommentar . PHP_EOL;
}
// __toString-Ausgabe
echo $rar . PHP_EOL;
$rar->close();
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Extrahieren von Archiveinhalten in Verzeichnisse ist auf sogenannte Path-Traversal-Angriffe zu achten: Einträge können theoretisch Pfade wie ../../etc/passwd im Namen tragen. Prüfe jeden Eintragsnamen mit realpath() oder basename(), bevor du ihn zum Extrahieren verwendest.
Passwörter: RAR-Archive können passwortgeschützt sein. Das Passwort wird als zweiter Parameter an RarArchive::open() übergeben. Falsche Passwörter werden nicht immer sofort, sondern erst beim Extrahieren eines Eintrags als Fehler sichtbar.
Multi-Volume-Archive: Bei mehrteiligen Archiven muss der Pfad zum ersten Teil (z. B. archiv.part1.rar) angegeben werden. Die Folgedateien werden automatisch gesucht und müssen sich im selben Verzeichnis befinden.
Die Klasse ist nicht instantiierbar über new RarArchive() — die Erzeugung erfolgt ausschließlich über RarArchive::open().