Start · Sprachen · PHP · Referenz · xdiff_string_bdiff_size

xdiff_string_bdiff_size

Funktion

Liest die Größe (in Bytes) der resultierenden Datei, nachdem ein binäres Diff-Patch angewendet wurde, ohne den Patch tatsächlich anzuwenden.

seit PHP 1.5.0 Kategorie: misc

Signatur

xdiff_string_bdiff_size(string $patch): int

Beschreibung

xdiff_string_bdiff_size() analysiert einen binären Diff-Patch (erzeugt z. B. von xdiff_string_bdiff()) und liefert die erwartete Größe der Zieldatei in Bytes zurück – und das, ohne den Patch tatsächlich anzuwenden.

Diese Funktion ist nützlich, wenn Sie vor der eigentlichen Patch-Operation prüfen möchten, wie groß die resultierende Datei sein wird, etwa um Speicherplatzbeschränkungen vorab zu überprüfen oder um Puffer in der gewünschten Größe zu allozieren.

Die Funktion arbeitet ausschließlich auf dem Patch-String selbst (nicht auf Original- oder Zieldatei) und ist damit sehr effizient, da kein vollständiger Patch-Prozess durchgeführt wird.

Sie ist Teil der PECL xdiff-Erweiterung und setzt voraus, dass diese installiert ist. Binäre Diff-Patches sollten stets mit xdiff_string_bdiff() oder xdiff_file_bdiff() erzeugt worden sein.

Parameter

Name Typ Default Beschreibung
$patch Pflicht string Ein binärer Diff-Patch als String, typischerweise erzeugt von xdiff_string_bdiff() oder xdiff_file_bdiff().

Rückgabewert

Typ
int
Beschreibung
Gibt die erwartete Größe der Zieldatei (in Bytes) zurück, die nach dem Anwenden des Patches entstehen würde.

Beispiele

Zieldateigröße vor dem Patchen ermitteln

<?php
// Originaldaten und geänderte Daten
$original = file_get_contents('original.bin');
$modified = file_get_contents('modified.bin');

// Binären Diff-Patch erzeugen
$patch = xdiff_string_bdiff($original, $modified);

// Erwartete Größe der gepatchten Datei ermitteln
$expectedSize = xdiff_string_bdiff_size($patch);

echo "Erwartete Größe nach dem Patchen: " . $expectedSize . " Bytes\n";
echo "Tatsächliche Größe der modified.bin: " . strlen($modified) . " Bytes\n";
Erwartete Größe nach dem Patchen: 2048 Bytes Tatsächliche Größe der modified.bin: 2048 Bytes

Speicherplatzkontrolle vor dem Anwenden eines Patches

<?php
// Patch aus Datei laden
$patch = file_get_contents('update.bdiff');

// Erwartete Zieldateigröße prüfen
$resultSize = xdiff_string_bdiff_size($patch);
$maxAllowed = 10 * 1024 * 1024; // 10 MB

if ($resultSize > $maxAllowed) {
    echo "Fehler: Die gepatchte Datei würde " . $resultSize . " Bytes groß sein\n";
    echo "Dies überschreitet das erlaubte Maximum von " . $maxAllowed . " Bytes.\n";
} else {
    // Original laden und Patch anwenden
    $original = file_get_contents('original.bin');
    $patched = xdiff_string_bpatch($original, $patch);
    file_put_contents('patched.bin', $patched);
    echo "Patch erfolgreich angewendet. Dateigröße: " . strlen($patched) . " Bytes\n";
}
Patch erfolgreich angewendet. Dateigröße: 4096 Bytes

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung xdiff muss installiert und aktiviert sein. Sie ist nicht Teil der PHP-Standardinstallation. Installation via: pecl install xdiff.

Hinweis: Diese Funktion ist ausschließlich für binäre Diffs gedacht, die mit xdiff_string_bdiff() erzeugt wurden. Patches, die mit xdiff_string_diff() (Unified-Diff-Format) erzeugt wurden, sind nicht kompatibel.

Sicherheit: Validieren Sie den Patch-String stets aus vertrauenswürdigen Quellen, bevor Sie ihn an diese Funktion übergeben, da ein manipulierter Patch-Header zu unerwarteten Rückgabewerten führen kann.