Start · Sprachen · PHP · Referenz · xdiff_file_patch_binary

xdiff_file_patch_binary

Funktion

Alias von <code>xdiff_file_bpatch</code> — wendet einen binären Patch auf eine Datei an und speichert das Ergebnis in einer Zieldatei.

seit PHP 1.5.0 Kategorie: misc

Signatur

xdiff_file_patch_binary(string $file, string $patch, string $dest): bool

Beschreibung

xdiff_file_patch_binary ist ein Alias der Funktion xdiff_file_bpatch und gehört zur PECL-Erweiterung xdiff. Sie wendet einen zuvor mit xdiff_file_bdiff oder xdiff_string_bdiff erzeugten binären Patch auf eine Quelldatei an und schreibt das gepatchte Ergebnis in eine Zieldatei.

Im Gegensatz zum textbasierten Patching (xdiff_file_patch) arbeitet diese Funktion auf Byte-Ebene und eignet sich daher für beliebige Binärdateien wie Bilder, Archive oder kompilierte Programme, bei denen zeilenbasierte Diffs keine sinnvollen Ergebnisse liefern würden.

Die Funktion ist nützlich in Szenarien, in denen Datei-Updates effizient übertragen werden sollen – etwa bei Software-Update-Systemen, die nur Deltas statt vollständiger Dateien versenden. Voraussetzung ist, dass die PECL-Erweiterung xdiff installiert und aktiviert ist.

Da xdiff_file_patch_binary ein reiner Alias ist, verhält sie sich in jeder Hinsicht identisch zu xdiff_file_bpatch. Es empfiehlt sich, direkt xdiff_file_bpatch zu verwenden, da Aliasse in zukünftigen Versionen entfernt werden könnten.

Parameter

Name Typ Default Beschreibung
$file Pflicht string Pfad zur ursprünglichen (unveränderten) Binärdatei, auf die der Patch angewendet werden soll.
$patch Pflicht string Pfad zur Patch-Datei im binären xdiff-Format, die mit xdiff_file_bdiff erzeugt wurde.
$dest Pflicht string Pfad zur Zieldatei, in die das gepatchte Ergebnis geschrieben wird. Die Datei wird erstellt oder überschrieben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Patch erfolgreich angewendet und die Zieldatei geschrieben wurde. Im Fehlerfall (z. B. ungültige Patch-Datei, fehlende Leserechte) wird false zurückgegeben.

Beispiele

Binären Patch erzeugen und anwenden

<?php
// Schritt 1: Binären Diff zwischen Original und neuer Version erzeugen
$original = 'bild_v1.png';
$neuVersion = 'bild_v2.png';
$patchDatei = 'bild.bpatch';

if (xdiff_file_bdiff($original, $neuVersion, $patchDatei)) {
    echo "Patch-Datei erfolgreich erstellt: {$patchDatei}" . PHP_EOL;
} else {
    echo "Fehler beim Erstellen des Patches." . PHP_EOL;
    exit(1);
}

// Schritt 2: Patch auf das Original anwenden (via Alias)
$ziel = 'bild_patched.png';

if (xdiff_file_patch_binary($original, $patchDatei, $ziel)) {
    echo "Patch erfolgreich angewendet. Ergebnis: {$ziel}" . PHP_EOL;
} else {
    echo "Fehler beim Anwenden des Patches." . PHP_EOL;
}
?>
Patch-Datei erfolgreich erstellt: bild.bpatch Patch erfolgreich angewendet. Ergebnis: bild_patched.png

Direkte Verwendung des kanonischen Namens statt Alias

<?php
// Empfohlen: xdiff_file_bpatch statt des Alias xdiff_file_patch_binary verwenden
$original  = 'programm_v1.bin';
$patchFile = 'update.bpatch';
$zielDatei = 'programm_v2.bin';

// Beide Aufrufe sind äquivalent:
// xdiff_file_patch_binary($original, $patchFile, $zielDatei);
$erfolg = xdiff_file_bpatch($original, $patchFile, $zielDatei);

if ($erfolg) {
    echo "Update erfolgreich eingespielt." . PHP_EOL;
} else {
    echo "Update fehlgeschlagen – Patch inkompatibel oder Datei nicht lesbar." . PHP_EOL;
}
?>
Update erfolgreich eingespielt.

// Wichtig · Fallstricke

Alias-Warnung: xdiff_file_patch_binary ist ein Alias von xdiff_file_bpatch. Es wird empfohlen, stets den kanonischen Funktionsnamen xdiff_file_bpatch zu verwenden, da Aliasse in zukünftigen PHP- oder PECL-Versionen ohne Vorwarnung entfernt werden können.

PECL-Abhängigkeit: Die Funktion ist nicht Teil von PHP-Core, sondern erfordert die Installation der PECL-Erweiterung xdiff. Auf vielen Shared-Hosting-Umgebungen ist diese nicht verfügbar.

Kompatibilität: Der Patch muss zwingend mit xdiff_file_bdiff oder xdiff_string_bdiff erzeugt worden sein. Patches aus anderen Tools (z. B. GNU patch) sind nicht kompatibel.