Start · Sprachen · PHP · Referenz · rar_broken_is

rar_broken_is

Funktion

Prüft, ob ein geöffnetes RAR-Archiv beschädigt oder unvollständig ist und gibt <code>true</code> zurück, wenn das Archiv defekt ist.

seit PHP 3.0.0 Kategorie: io

Signatur

rar_broken_is(RarArchive $rarfile): bool

Beschreibung

rar_broken_is() überprüft ein mit RarArchive::open() (bzw. rar_open()) geöffnetes RAR-Archiv auf Vollständigkeit und Integrität. Die Funktion gibt true zurück, wenn das Archiv als beschädigt oder unvollständig erkannt wurde, andernfalls false.

Typische Anwendungsfälle sind die Überprüfung von heruntergeladenen oder übertragenen RAR-Archiven vor dem Entpacken, um sicherzustellen, dass keine Daten fehlen oder korrumpiert sind. Dies ist besonders bei mehrteiligen RAR-Archiven nützlich, bei denen einzelne Teile fehlen können.

Die Funktion ist die prozedurale Entsprechung der objektorientierten Methode RarArchive::isBroken(). Beide Varianten können austauschbar verwendet werden.

Beachte, dass die Funktion nur strukturelle Schäden am Archiv erkennt, die beim Öffnen und Lesen der Archiv-Header festgestellt werden. Sie führt keine vollständige CRC-Prüfung aller enthaltenen Dateien durch.

Parameter

Name Typ Default Beschreibung
$rarfile Pflicht RarArchive Ein gültiges RarArchive-Objekt, das zuvor mit rar_open() oder RarArchive::open() geöffnet wurde.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Archiv als beschädigt oder unvollständig erkannt wurde, andernfalls false. Im Fehlerfall (z. B. ungültiges Archiv-Objekt) wird ebenfalls false zurückgegeben.

Beispiele

Einfache Integritätsprüfung eines RAR-Archivs

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

if ($archive === false) {
    echo 'Archiv konnte nicht geöffnet werden.';
    exit;
}

if (rar_broken_is($archive)) {
    echo 'Das Archiv ist beschädigt oder unvollständig!';
} else {
    echo 'Das Archiv scheint intakt zu sein.';
}

rar_close($archive);
Das Archiv scheint intakt zu sein.

Prüfung vor dem Entpacken mit Fehlerbehandlung

<?php
function extractRarSafely(string $archivePath, string $targetDir): bool {
    $archive = RarArchive::open($archivePath);

    if ($archive === false) {
        error_log('RAR-Archiv konnte nicht geöffnet werden: ' . $archivePath);
        return false;
    }

    if (rar_broken_is($archive)) {
        error_log('RAR-Archiv ist beschädigt: ' . $archivePath);
        $archive->close();
        return false;
    }

    $entries = $archive->getEntries();
    foreach ($entries as $entry) {
        if (!$entry->extract($targetDir)) {
            error_log('Fehler beim Entpacken: ' . $entry->getName());
        }
    }

    $archive->close();
    return true;
}

$erfolg = extractRarSafely('/uploads/paket.rar', '/tmp/entpackt/');
echo $erfolg ? 'Erfolgreich entpackt.' : 'Entpacken fehlgeschlagen.';
Erfolgreich entpackt.

// Wichtig · Fallstricke

Erweiterung erforderlich: Diese Funktion ist Teil der rar-Erweiterung (PECL rar), die standardmäßig nicht in PHP enthalten ist und separat installiert werden muss. Stelle sicher, dass extension=rar in der php.ini aktiviert ist.

Eingeschränkte Erkennung: Die Funktion erkennt nur strukturelle Schäden an den Archiv-Headern. Korrumpierte Dateidaten innerhalb des Archivs, die sich noch im gültigen Container befinden, werden möglicherweise nicht erkannt. Für eine vollständige Prüfung sollte zusätzlich RarEntry::getCrc() auf Einzeldateibasis geprüft werden.

Mehrteilige Archive: Bei mehrteiligen RAR-Archiven, bei denen nur der erste Teil geöffnet wird, kann die Funktion das Archiv als beschädigt melden, wenn nachfolgende Teile nicht vorhanden oder erreichbar sind.