Signatur
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
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";
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";
}
// 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.