Start · Sprachen · PHP · Referenz · rar_entry_get

rar_entry_get

Funktion

Liefert ein <code>RarEntry</code>-Objekt für einen bestimmten Eintrag aus einem geöffneten RAR-Archiv.

seit PHP 2.0.0 Kategorie: io

Signatur

rar_entry_get(RarArchive $rarfile, string $entryname): RarEntry|false

Beschreibung

rar_entry_get() sucht in einem geöffneten RAR-Archiv nach einem Eintrag mit dem angegebenen Namen und gibt ein entsprechendes RarEntry-Objekt zurück. Über dieses Objekt lassen sich anschließend Metadaten (z. B. Größe, Datum, Kompressionsmethode) abfragen und der Eintrag kann extrahiert werden.

Die Funktion ist nützlich, wenn gezielt auf eine einzelne Datei innerhalb eines RAR-Archivs zugegriffen werden soll, ohne alle Einträge des Archivs zu iterieren, wie es bei rar_list() der Fall wäre. Der Eintragsname muss dabei exakt mit dem im Archiv gespeicherten Namen (einschließlich Pfad und Groß-/Kleinschreibung, plattformabhängig) übereinstimmen.

Diese Funktion ist die prozedurale Variante von RarArchive::getEntry() und Teil der PECL-Erweiterung rar. Das RAR-Archiv muss zuvor mit rar_open() geöffnet worden sein.

Zu beachten ist, dass RAR-Archive mehrere Einträge mit identischem Namen enthalten können (etwa bei aufgeteilten Archiven). In solchen Fällen gibt rar_entry_get() nur den ersten gefundenen Eintrag zurück; für alle Einträge sollte stattdessen rar_list() verwendet werden.

Parameter

Name Typ Default Beschreibung
$rarfile Pflicht RarArchive Ein gültiges RarArchive-Objekt, das zuvor mit rar_open() geöffnet wurde.
$entryname Pflicht string Der Name des gesuchten Eintrags im Archiv, exakt so wie er im Archiv gespeichert ist (inklusive Pfadangaben, z. B. ordner/datei.txt).

Rückgabewert

Typ
RarEntry|false
Beschreibung
Gibt ein RarEntry-Objekt zurück, wenn der Eintrag gefunden wurde, oder false, wenn der Eintrag nicht existiert oder ein Fehler aufgetreten ist.

Beispiele

Einzelnen Eintrag aus einem RAR-Archiv laden und extrahieren

<?php
$archiv = rar_open('/pfad/zum/archiv.rar');
if ($archiv === false) {
    die('Archiv konnte nicht geöffnet werden.');
}

$eintrag = rar_entry_get($archiv, 'dokumente/readme.txt');
if ($eintrag === false) {
    echo 'Eintrag nicht gefunden.';
} else {
    echo 'Dateiname: ' . $eintrag->getName() . PHP_EOL;
    echo 'Unkomprimierte Größe: ' . $eintrag->getUnpackedSize() . ' Bytes' . PHP_EOL;

    // Eintrag in ein Verzeichnis extrahieren
    $eintrag->extract('/ziel/verzeichnis/');
}

rar_close($archiv);
?>
Dateiname: dokumente/readme.txt Unkomprimierte Größe: 2048 Bytes

Metadaten eines RAR-Eintrags abfragen

<?php
$archiv = rar_open('/pfad/zum/archiv.rar');
if ($archiv === false) {
    die('Archiv konnte nicht geöffnet werden.');
}

$eintrag = rar_entry_get($archiv, 'bilder/foto.jpg');
if ($eintrag instanceof RarEntry) {
    echo 'Name:             ' . $eintrag->getName() . PHP_EOL;
    echo 'Komprimiert:      ' . $eintrag->getPackedSize() . ' Bytes' . PHP_EOL;
    echo 'Unkomprimiert:    ' . $eintrag->getUnpackedSize() . ' Bytes' . PHP_EOL;
    echo 'Änderungsdatum:   ' . date('Y-m-d H:i:s', $eintrag->getFileTime()) . PHP_EOL;
    echo 'Ist Verzeichnis:  ' . ($eintrag->isDirectory() ? 'ja' : 'nein') . PHP_EOL;
} else {
    echo 'Eintrag "bilder/foto.jpg" wurde nicht gefunden.';
}

rar_close($archiv);
?>
Name: bilder/foto.jpg Komprimiert: 98304 Bytes Unkomprimiert: 204800 Bytes Änderungsdatum: 2023-06-15 10:30:00 Ist Verzeichnis: nein

// Wichtig · Fallstricke

PECL-Erweiterung erforderlich: rar_entry_get() ist Teil der PECL-Erweiterung rar, die standardmäßig nicht in PHP enthalten ist. Sie muss separat installiert werden (pecl install rar).

Groß-/Kleinschreibung: Die Suche nach dem Eintragsnamen ist abhängig vom Betriebssystem und dem verwendeten Dateisystem. Unter Windows ist sie in der Regel unabhängig von der Groß-/Kleinschreibung, unter Linux hingegen nicht. Der angegebene Name sollte daher exakt mit dem im Archiv gespeicherten Namen übereinstimmen.

Mehrfache Einträge: Wenn ein RAR-Archiv mehrere Einträge mit demselben Namen enthält (z. B. bei aktualisierten Archiven), wird nur der erste Treffer zurückgegeben. Für vollständigen Zugriff auf alle Einträge sollte rar_list() verwendet werden.

Passwortgeschützte Archive: Bei verschlüsselten Archiven muss das Passwort bereits beim Öffnen mit rar_open() angegeben worden sein, damit Einträge korrekt extrahiert werden können.