简介:
1.xdiff扩展使你能够创建和应用,包含文件不同版本之间差异的补丁文件
2.此扩展支持两种操作模式-字符串和文件,以及两种不同的补丁格式-统一的文本格式(unified)和二进制(binary)。文本格式补丁是优秀的文本文件,因为它们是人类可读和易于审查。二进制文件,例如:档案(archives-压缩包等)或图片,因为二进制安全以及能处理非打印字符,二进制补丁也是一个很好的选择。
3.自从1.5.0版本后,生成二进制补丁有2个不同的函数集合。新函数-xdiff_string_rabdiff()和xdiff_file_rabdiff(),生成旧函数的兼容性输出,但是更加快、生成更小的结果。可查看 libxdiff站点(http://www.xmailserver.org/xdiff-lib.html)查看更多细节
4.该扩展使用 'libxdiff' 实现这些函数。查看(http://www.xmailserver.org/xdiff-lib.html)
安装:
1.为了使用xdiff,需要安装 'libxdiff',查看(http://www.xmailserver.org/xdiff-lib.html)。至少需要 libxdiff 0.7版本,并注意 'memory_limit' 配置项
2.安装 PECL扩展:http://pecl.php.net/package/xdiff
预定义常量:
XDIFF_PATCH_NORMAL - 该标识暗示:xdiff_string_patch()和xdiff_file_patch() 函数,应该通过将补丁应用到原始内容,从而生成新版本文件。这是默认的操作模式。
XDIFF_PATCH_REVERSE - 该标识暗示:xdiff_string_patch()和xdiff_file_patch() 函数,应该反过来通过将新内容修改的补丁还原,生成旧版本文件。
函数:
文件模式:
1.xdiff_file_bdiff(string $old_file, string $new_file, string $dest) - xdiff_file_diff_binary(1.5.0版本后,xdiff_file_bdiff的别名)
比对2个文件,生成二进制差异,并保存结果到一个补丁文件。该函数对文件文件和二进制文件都有效。生成的补丁文件稍后可用于 xdiff_file_bpatch()或xdiff_string_bpatch()
参数:
$old_file - 旧文件路径
$new_file - 新文件路径
$dest - 生成的补丁文件。结果文件包含新旧文件的差异。是二进制格式、非人类可读
示例:
<?php
$old_version = 'test1.tgz';
$new_version = 'test2.tgz';
xdiff_file_bdiff($old_version, $new_version, 'test_diff.bdiff');
?>
注意:
2个文件都会加载到内容中,因此,确保你的 'memory_limit' 设置的足够高
2.xdiff_file_rabdiff(string $old_file, string $new_file, string $dest)
比对2个文件,生成二进制差异,并保存结果到一个补丁文件。该函数同 'xdiff_file_bdiff()' 函数的不同是使用了不同的算法,该函数执行的更快,并产生更小的补丁文件。 该函数对文件文件和二进制文件都有效。生成的补丁文件稍后可用于 xdiff_file_bpatch()或xdiff_string_bpatch()
参数:
$old_file - 旧文件
$new_file - 新文件
$dest - 最终生成的补丁文件。结果文件包含新旧文件的差异。是二进制格式、非人类可读
3.xdiff_file_diff(string $old_file, string $new_file, string $dest[, int $context = 3[, bool $minimal = false]])
生成一个人类可读的(unified diff)包含新旧文件差异的补丁文件,并存储到 $dest 指定的目标文件。结果文件是人类可读的。一个可选的 $context 参数,指定了应该被添加到补丁文件中的差异的行数。设置$minimal参数为true,将尽可能压缩输出的补丁文件(花费很长时间)
参数:
$old_file - 旧文件
$new_file - 新文件
$dest - 生成的补丁文件
$context - 指明在diff补丁文件中,想要包含的行数
$minimal - 如果你想最小化补丁文件的尺寸,设置该参数为true,花费较长时间(压缩)
示例:
<?php
$old_version = 'test1.php';
$new_version = 'test2.php';
xdiff_file_diff($old_version, $new_version, 'test_diff.diff', 2);
?>
注意:
该函数在二进制文件中,工作的不好。对比二进制文件,使用 xdiff_file_bdiff()或xdiff_file_rabdiff() 函数
4.xdiff_file_bdiff_size(string $file)
返回将$file指定的二进制补丁文件应用到原始文件后,新创建的结果文件的尺寸。
参数:
$file - 由 xdiff_string_bdiff()或xdiff_string_rabdiff() 函数创建的二进制补丁文件路径
示例:
<?php
$size = xdiff_string_bdiff_size('file.bdiff');
echo "结果文件文件大小为:$size bytes";
?>
5.xdiff_file_bpatch(string $file, string $patch, string $dest) - xdiff_file_patch_binary(1.5.0版本后,xdiff_file_bpatch的别名)
使用一个二进制补丁,给原始文件打补丁,并将结果保存到 $dest 制定的目标文件。函数可接收 xdiff_file_bdiff()和xdiff_file_rabdiff()函数创建的补丁文件,或者同它们相当的字符串文件!
参数:
$file - 原始文件
$patch - 二进制补丁文件
$dest - 最终生成的结果文件
示例:
<?php
$old_version = 'test1.tgz';
$patch = 'test_diff.bpatch';
$result = xdiff_file_bpatch($old_version, $patch, 'test2.tgz')
if($result){
echo '文件打补丁成功';
}else{
echo '文件打补丁失败';
}
?>
6.xdiff_file_patch(string $file, string $patch, string $dest[, int $flags = DIFF_PATCH_NORMAL])
使用一个补丁文件,给旧文件打补丁,或是将新文件还原回旧文件,将结果文件保存在 $dest 指定的目标文件
参数:
$file - 原始文件
$patch - 人类可读的补丁文件。只能通过 xdiff_string_diff()或xdiff_file_diff() 函数创建,或兼容性工具
$dest - 最终生成的结果文件
$flags - 2个预定义常量(不同的操作模式,是打补丁,或是还原)
7.xdiff_file_merge3(string $old_file, string $new_file1, string $new_file2, string $dest)
合并3个文件为一个文件,并保存结果到 $dest 指定的目标文件。$old_file旧文件是原始版本,而 $new_file1和$new_file2都是原始版本的修正版本。
参数:
$old_file - 旧文件
$new_file1 - 旧文件的修正版1
$new_file2 - 旧文件的修正版2
$dest - 最终生成的结果文件,合并了2个修正版本的差异
示例:
<?php
$old_version = 'original.php';
$fix1 = 'fix1.php';
$fix2 = 'fix2.php';
$errors = xdiff_file_merge3($old_version, $fix1, $fix2, 'fixed.php');
if(is_string($errors)){
echo "拒绝:\n";
echo $errors;
}
?>
字符串模式:
同 '文件模式' 大同小异,不过是没有 '$dest' 目标文件,而是直接返回字符串,我们可选择性的 '保存结果字符串'!
参考:
http://qa.helplib.com/279884
https://github.com/eaglewu/phpdiff/blob/master/phpdiff.php
xdiff-不同文件版本差异、补丁
最新推荐文章于 2022-06-02 11:52:48 发布