Signatur
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
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);
?>
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);
?>
// 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.