This seems to be fixed with newer version of libxdiff (which is used by xdiff extension).
According to library changelog:
--------------------------------------
* Sun, Mar 26 2006 - Davide Libenzi
Fixed the missing end of line problem for text diff and patch.
--------------------------------------
CLXXV. xdiff Functions
Einführung
xdiff extension creates and applies patches to both text and binary files.
Anforderungen
To use xdiff, you will need libxdiff installed, available on the libxdiff homepage » http://www.xmailserver.org/xdiff-lib.html.
Anmerkung: You'll need at least libxdiff 0.7 for these functions to be aware of memory_limit.
Installation
xdiff is currently available through PECL » http://pecl.php.net/package/xdiff.
If » PEAR is available on your *nix-like system you can use the pear installer to install the xdiff extension, by the following command: pear -v install xdiff.
You can always download the tar.gz package and install xdiff by hand:
Beispiel 2238. xdiff install by hand
gunzip xdiff-xxx.tgz tar -xvf xdiff-xxx.tar cd xdiff-xxx phpize ./configure && make && make install |
Vordefinierte Konstanten
Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.
Inhaltsverzeichnis
- xdiff_file_diff_binary — Make binary diff of two files
- xdiff_file_diff — Make unified diff of two files
- xdiff_file_merge3 — Merge 3 files into one
- xdiff_file_patch_binary — Patch a file with a binary diff
- xdiff_file_patch — Patch a file with an unified diff
- xdiff_string_diff_binary — Make binary diff of two strings
- xdiff_string_diff — Make unified diff of two strings
- xdiff_string_merge3 — Merge 3 strings into one
- xdiff_string_patch_binary — Patch a string with a binary diff
- xdiff_string_patch — Patch a string with an unified diff
the xdiff functions require your initial string to end with a \n character.
When you use xdiff_string_diff, the initial string must either be zero-length or end with \n
eg. $patch= xdiff_string_diff($string,$string2);
if not, the patch will return an empty string.
xdiff_string_patch($string,$patch);
This will not normally affect xdiff_file_diff, but it's annoying nevertheless. To prevent this unexpected effect, I append a \n to the string before applying the initial diff, as follows.
if (!ereg("\n$",$string)) $string.="\n";
