Start · Sprachen · PHP · Referenz · xdiff_file_bdiff_size

xdiff_file_bdiff_size

Funktion

Liest die erwartete Dateigröße der Ausgabedatei, die nach Anwenden eines binären Diff-Patches (<code>bdiff</code>) entstehen würde.

seit PHP 1.5.0 Kategorie: misc

Signatur

xdiff_file_bdiff_size(string $file): int|false

Beschreibung

xdiff_file_bdiff_size() liest aus einer binären Diff-Datei (erstellt mit xdiff_file_bdiff() oder xdiff_string_bdiff()) die Metainformation über die Größe der resultierenden Datei, die entstehen würde, wenn der Patch angewendet wird. Die Funktion liest also nicht die Patch-Datei selbst ein, sondern nur den darin enthaltenen Größen-Header.

Diese Funktion ist besonders nützlich, wenn man vor dem eigentlichen Patchen prüfen möchte, ob genügend Speicherplatz für die Ausgabedatei vorhanden ist. Sie ermöglicht eine einfache Validierung der Diff-Datei sowie eine Planung der erforderlichen Ressourcen, ohne den vollständigen Patch-Vorgang durchführen zu müssen.

Die Funktion gehört zur PECL xdiff-Erweiterung, die separate Installation und Aktivierung erfordert. Binäre Diffs (bdiff) eignen sich im Gegensatz zu textuellen Diffs auch für beliebige Binärdateien und sind effizienter bei großen Binärdaten.

Parameter

Name Typ Default Beschreibung
$file Pflicht string Pfad zur binären Diff-Datei (.bdiff), deren enthaltene Zieldateigröße ausgelesen werden soll. Die Datei muss mit xdiff_file_bdiff() oder xdiff_string_bdiff() erzeugt worden sein.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die erwartete Größe (in Bytes) der Ausgabedatei nach Anwenden des Patches als int zurück. Bei einem Fehler (z. B. Datei nicht lesbar oder kein gültiges bdiff-Format) wird false zurückgegeben.

Beispiele

Erwartete Ausgabegröße vor dem Patchen prüfen

<?php
// Zwei Dateien erzeugen
file_put_contents('/tmp/original.bin', str_repeat('\x00', 1024));
file_put_contents('/tmp/modified.bin', str_repeat('\xFF', 2048));

// Binären Diff erstellen
xdiff_file_bdiff('/tmp/original.bin', '/tmp/modified.bin', '/tmp/patch.bdiff');

// Erwartete Ausgabegröße auslesen
$expectedSize = xdiff_file_bdiff_size('/tmp/patch.bdiff');

if ($expectedSize === false) {
    echo 'Fehler: Diff-Datei konnte nicht gelesen werden.';
} else {
    echo 'Erwartete Ausgabegröße nach dem Patchen: ' . $expectedSize . ' Bytes' . PHP_EOL;
    // Speicherplatz prüfen
    $freeDiskSpace = disk_free_space('/tmp');
    if ($freeDiskSpace >= $expectedSize) {
        echo 'Genügend Speicherplatz vorhanden. Patch kann angewendet werden.' . PHP_EOL;
    } else {
        echo 'Nicht genügend Speicherplatz vorhanden!' . PHP_EOL;
    }
}
Erwartete Ausgabegröße nach dem Patchen: 2048 Bytes Genügend Speicherplatz vorhanden. Patch kann angewendet werden.

Validierung einer Diff-Datei

<?php
function validateBdiffFile(string $bdiffPath): bool {
    if (!file_exists($bdiffPath)) {
        return false;
    }
    $size = xdiff_file_bdiff_size($bdiffPath);
    return $size !== false && $size >= 0;
}

$diffFile = '/tmp/patch.bdiff';
if (validateBdiffFile($diffFile)) {
    $size = xdiff_file_bdiff_size($diffFile);
    echo 'Diff-Datei ist gültig. Zieldatei wird ' . $size . ' Bytes groß sein.' . PHP_EOL;
} else {
    echo 'Ungültige oder fehlende Diff-Datei.' . PHP_EOL;
}
Diff-Datei ist gültig. Zieldatei wird 2048 Bytes groß sein.

// Wichtig · Fallstricke

Wichtig: Die PECL-Erweiterung xdiff ist nicht standardmäßig in PHP enthalten und muss separat über PECL installiert werden (pecl install xdiff). Ohne diese Erweiterung ist die Funktion nicht verfügbar.

Die Funktion liest lediglich den Größen-Header der bdiff-Datei und führt keinen Plausibilitätscheck des gesamten Patch-Inhalts durch. Eine erfolgreiche Rückgabe garantiert daher nicht, dass der Patch korrekt angewendet werden kann.

Verwechsle bdiff-Dateien nicht mit rabdiff-Dateien (Rolling Array Binary Diff). Die Funktionen sind nicht gegenseitig kompatibel.