Signatur
Beschreibung
RarEntry ist eine Klasse der PECL-Erweiterung rar und wird nicht direkt instanziiert. Objekte dieses Typs erhält man stattdessen über RarArchive::getEntry() oder RarArchive::getEntries(). Jede Instanz repräsentiert genau einen Eintrag – also eine Datei oder ein Verzeichnis – innerhalb des geöffneten RAR-Archivs.
Die Klasse erlaubt den Zugriff auf sämtliche Metadaten eines Eintrags, wie Name, Größe (komprimiert/unkomprimiert), CRC-Prüfsumme, Zeitstempel, Kompressionsverfahren und Host-Betriebssystem. Damit eignet sie sich hervorragend zum Auflisten und Analysieren von Archivinhalten, ohne den gesamten Inhalt extrahieren zu müssen.
Darüber hinaus kann mit RarEntry::extract() der Inhalt eines Eintrags in ein Verzeichnis entpackt werden, oder mit RarEntry::getStream() ein PHP-Stream geöffnet werden, um den Inhalt direkt zu lesen – praktisch bei großen Dateien oder wenn kein Schreibzugriff auf das Dateisystem vorhanden ist.
Passwortgeschützte Einträge können ebenfalls verarbeitet werden, sofern das korrekte Passwort übergeben wird. Hinweis: Die rar-Erweiterung unterstützt ausschließlich das Lesen von RAR-Archiven; das Erstellen von RAR-Dateien ist nicht möglich.
Beispiele
Alle Einträge eines RAR-Archivs auflisten
<?php
$rar = RarArchive::open('beispiel.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 'Name: ' . $entry->getName() . PHP_EOL;
echo 'Unkomprimierte Größe: ' . $entry->getUnpackedSize() . ' Byte' . PHP_EOL;
echo 'Komprimierte Größe: ' . $entry->getPackedSize() . ' Byte' . PHP_EOL;
echo 'CRC: ' . dechex($entry->getCrc()) . PHP_EOL;
echo 'Ist Verzeichnis: ' . ($entry->isDirectory() ? 'Ja' : 'Nein') . PHP_EOL;
echo str_repeat('-', 40) . PHP_EOL;
}
$rar->close();
Einzelnen Eintrag extrahieren und per Stream lesen
<?php
$rar = RarArchive::open('daten.rar');
if ($rar === false) {
die('Archiv konnte nicht geöffnet werden.');
}
// Einzelnen Eintrag über Namen abrufen
$entry = $rar->getEntry('config/settings.ini');
if ($entry === false) {
die('Eintrag nicht gefunden.');
}
// Inhalt über einen Stream auslesen (ohne Extraktion auf die Festplatte)
$stream = $entry->getStream();
if ($stream === false) {
die('Stream konnte nicht geöffnet werden.');
}
$inhalt = stream_get_contents($stream);
fclose($stream);
echo 'Dateiinhalt:' . PHP_EOL . $inhalt . PHP_EOL;
// Alternativ: in ein Verzeichnis extrahieren
$entry->extract('/tmp/entpackt/');
echo 'Datei wurde nach /tmp/entpackt/ extrahiert.' . PHP_EOL;
$rar->close();
Passwortgeschützten Eintrag extrahieren
<?php
$rar = RarArchive::open('geheim.rar', 'meinPasswort');
if ($rar === false) {
die('Archiv konnte nicht geöffnet werden.');
}
$entry = $rar->getEntry('geheime_datei.txt');
if ($entry === false) {
die('Eintrag nicht gefunden.');
}
if ($entry->isEncrypted()) {
echo 'Eintrag ist verschlüsselt.' . PHP_EOL;
}
// Passwort beim Extrahieren angeben
$erfolg = $entry->extract('/tmp/', '', 'meinPasswort');
if ($erfolg) {
echo 'Erfolgreich entschlüsselt und extrahiert.' . PHP_EOL;
} else {
echo 'Fehler beim Entschlüsseln.' . PHP_EOL;
}
$rar->close();
// Wichtig · Fallstricke
Wichtige Methoden im Überblick:
RarEntry::extract(string $dir, string $filepath = '', string $password = '', bool $extended_data = false): bool– Extrahiert den Eintrag in ein Verzeichnis.RarEntry::getStream(string $password = ''): resource|false– Gibt einen PHP-Stream zum Lesen des unkomprimierten Inhalts zurück.RarEntry::getName(): string– Gibt den Namen des Eintrags zurück.RarEntry::getUnpackedSize(): int– Unkomprimierte Größe in Byte.RarEntry::getPackedSize(): int– Komprimierte Größe in Byte.RarEntry::getCrc(): int– CRC-Prüfsumme des Eintrags.RarEntry::getFileTime(): string– Zeitstempel der Datei im FormatY-m-d H:i:s.RarEntry::isDirectory(): bool– Gibt an, ob es sich um ein Verzeichnis handelt.RarEntry::isEncrypted(): bool– Gibt an, ob der Eintrag verschlüsselt ist.RarEntry::getHostOs(): int– Betriebssystem, unter dem der Eintrag erstellt wurde (Konstante, z. B.RarEntry::HOST_WIN32).RarEntry::getMethod(): int– Verwendetes Kompressionsverfahren.
Sicherheitshinweis: Beim Extrahieren von Archiveninhalten in Verzeichnisse sollte stets der Zielpfad validiert werden, da Einträge mit relativen Pfaden wie ../../etc/passwd (sog. Path-Traversal-Angriffe) bei naiver Verarbeitung außerhalb des gewünschten Zielverzeichnisses landen könnten.
Verfügbarkeit: Die rar-Erweiterung ist nicht standardmäßig in PHP enthalten und muss über PECL installiert werden (pecl install rar). Sie unterstützt RAR3- und RAR5-Archive.