2014-10-06 39 views
0

我已阅读并尝试过所有答案here,但它们似乎只适用于非二进制格式的字符串。我想比较二进制文件的差异,并返回那些格式,如这样的:用PHP返回二进制文件中的十六进制差异

[file1] 

-0001010: ac 0f 00 00 01 00 00 00 48 65 6c 6c 6f 2c 20 77 ........Hello, w 

[file2] 

+0001010: ac 0f 00 00 01 00 00 00 48 75 6c 6c 6f 2c 20 77 ........Hullo, w 

xdiff工作正常创建则bdiff补丁和补丁文件 - 我期待太多说明的差异。

$one = 'one'; // original file 
$two = 'two'; // updated file 
$pat = 'dif'; // bdiff patch 
$new = 'new'; // new destfile 

xdiff_file_diff_binary($one, $two, $pat); 
xdiff_file_patch_binary($one, $pat, $new); 

$diff = xdiff_file_diff($one, $two, 1); 
if (is_file($diff)) { 
    echo "Differences:\n"; // result = 1 
    echo $diff; 
} 

也许xdiff是不是正确的扩展名是用于此?我不确定。

回答

0

听起来像是在PHP中做的一个很大的痛苦,我可以建议下面的bash单行吗?

diff <(hexdump -C file1) <(hexdump -C file2) 

输出:

10c10 
< 00000090 35 35 61 34 32 62 62 31 30 33 31 62 38 38 39 34 |55a42bb1031b8894| 
--- 
> 00000090 35 35 61 34 32 62 62 31 30 33 31 61 38 38 39 34 |55a42bb1031a8894| 

,你可以随时惹的diffhexdump的选项。

+0

不错的想法,但是当我尝试使用它与'exec()'例如我得到一个错误:'sh:-c:line 0:语法错误附近的意外令牌'''' – Devon 2014-10-07 01:25:00

+0

@Devon因为它是* bash *单行,并且你的系统默认为''sh'作为'exec()'。 – Sammitch 2014-10-07 16:40:13