Start · Sprachen · PHP · Referenz · rar_open

rar_open

Funktion

Öffnet ein RAR-Archiv und gibt ein <code>RarArchive</code>-Objekt zurück.

seit PHP 2.0.0 Kategorie: io

Signatur

rar_open(string $filename, string $password = null): RarArchive|false

Beschreibung

rar_open() öffnet eine RAR-Archivdatei und gibt eine Instanz der Klasse RarArchive zurück, mit der anschließend auf den Inhalt des Archivs zugegriffen werden kann. Die Funktion ist der prozedurale Gegenstück zur Methode RarArchive::open() und gehört zur PECL-Erweiterung rar.

Nach dem Öffnen können mit rar_list() alle enthaltenen Einträge aufgelistet oder mit rar_entry_get() einzelne Einträge anhand ihres Namens abgerufen werden. Jeder Eintrag kann dann über die Methoden der RarEntry-Klasse extrahiert oder inspiziert werden.

Ist das Archiv passwortgeschützt, kann das Passwort als zweiter Parameter übergeben werden. Das Passwort wird beim späteren Entpacken der einzelnen Einträge benötigt; es reicht aus, es beim Öffnen des Archivs anzugeben.

Das Archiv sollte nach der Verarbeitung stets mit rar_close() (bzw. RarArchive::close()) geschlossen werden, um Ressourcen freizugeben.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur RAR-Archivdatei, die geöffnet werden soll. Kann ein absoluter oder relativer Dateipfad sein.
$password string null Optionales Passwort für verschlüsselte RAR-Archive. Wird benötigt, wenn der Archivheader oder die Einträge selbst verschlüsselt sind.

Rückgabewert

Typ
RarArchive|false
Beschreibung
Gibt bei Erfolg eine RarArchive-Instanz zurück, mit der auf den Inhalt des Archivs zugegriffen werden kann. Im Fehlerfall (z. B. Datei nicht gefunden oder ungültiges Archivformat) wird false zurückgegeben.

Beispiele

RAR-Archiv öffnen und Einträge auflisten

<?php
$archiv = rar_open('/pfad/zum/archiv.rar');

if ($archiv === false) {
    die('Archiv konnte nicht geöffnet werden.');
}

$eintraege = rar_list($archiv);

if ($eintraege === false) {
    die('Einträge konnten nicht gelesen werden.');
}

foreach ($eintraege as $eintrag) {
    echo 'Name: ' . $eintrag->getName() . PHP_EOL;
    echo 'Größe (unkomprimiert): ' . $eintrag->getUnpackedSize() . ' Bytes' . PHP_EOL;
}

rar_close($archiv);
?>
Name: dokument.txt Größe (unkomprimiert): 2048 Bytes Name: bild.jpg Größe (unkomprimiert): 153600 Bytes

Passwortgeschütztes RAR-Archiv öffnen und Eintrag extrahieren

<?php
$archiv = rar_open('/pfad/zum/geschuetzt.rar', 'geheimesPasswort');

if ($archiv === false) {
    die('Archiv konnte nicht geöffnet werden.');
}

$eintrag = rar_entry_get($archiv, 'geheime_datei.txt');

if ($eintrag === false) {
    die('Eintrag nicht gefunden.');
}

// Extrahiert den Eintrag in das angegebene Verzeichnis
$eintrag->extract('/ziel/verzeichnis/');
echo 'Datei erfolgreich extrahiert.' . PHP_EOL;

rar_close($archiv);
?>
Datei erfolgreich extrahiert.

// Wichtig · Fallstricke

PECL-Erweiterung erforderlich: rar_open() ist kein Bestandteil des PHP-Kerns. Die PECL-Erweiterung rar muss installiert und aktiviert sein (extension=rar.so bzw. extension=php_rar.dll in der php.ini).

Sicherheitshinweis: Beim Verarbeiten von Archiven aus nicht vertrauenswürdigen Quellen sollte unbedingt der Zielpfad beim Extrahieren überprüft werden, um sogenannte Path-Traversal-Angriffe (z. B. durch Einträge mit ../../ im Namen) zu verhindern.

Passwörter: Das übergebene Passwort wird im Klartext im Speicher gehalten. Bei sicherheitskritischen Anwendungen sollte das Passwort so kurz wie möglich im Speicher gehalten und danach überschrieben werden.

Ab PHP 8 wird empfohlen, die objektorientierte Variante RarArchive::open() zu verwenden, da sie konsistenter mit modernem PHP-Stil ist.