8

我正在寻找一个可以生成代码差异 HTML 的免费 php 库。基本上就像 GitHub 的代码差异页面。

我一直在四处寻找,找不到任何东西。有谁知道那里有什么可以做我正在寻找的东西?

4

3 回答 3

8

看起来我在用不同的措辞进行更多的谷歌搜索后找到了我想要的东西。

php-diff似乎完全符合我的要求。只是一个接受两个字符串并生成所有 HTML 的 php 函数确实会在网页中显示差异。

于 2013-03-08T21:34:36.237 回答
7

在这里加上我的两分钱......

不幸的是,在 PHP 中没有用于显示/生成差异的真正好的差异库。也就是说,我最近确实找到了一种使用 PHP 实现此目的的迂回方法。涉及的解决方案:

  • 用于呈现 Diff 的纯 JavaScript 方法
  • git使用 PHP 生成 Diff 进行渲染

首先,有一个用于渲染 GitHub 风格差异的优秀JavaScript 库,称为diff2html。这使得差异非常干净并且具有现代风格。然而,diff2html需要一个真正的git diff 来渲染,因为它旨在逐字地渲染 git diff——就像 GitHub 一样。

如果我们让 diff2html 处理 diff 的渲染,那么我们剩下要做的就是创建 git diff 让它渲染。

要在 PHP 中执行此操作,您可以git使用运行在服务器上的本地二进制文件。您可以使用该选项git计算两个任意文件的差异。--no-index您还可以使用该选项指定在找到的差异之前/之后返回多少行-U

在服务器上,它看起来像这样:

// File names to save data to diff in
$leftFile  = '/tmp/fileA.txt'; 
$rightFile = '/tmp/fileB.txt';

file_put_contents($leftFile, $leftData);
file_put_contents($rightFile, $rightData);

// Generate git diff and save shell output
$diff = shell_exec("git diff -U1000 --no-index $leftFile $rightFile");

// Strip off first line of output
$diff = substr($diff, strpos($diff, "\n"));

// Delete the files we just created
unlink($leftFile);
unlink($rightFile);

然后你需要$diff回到前端。您应该查看文档,diff2html但最终结果在 JavaScript 中将如下所示(假设您传递$diffas diffString):

function renderDiff(el, diffString) {
    var diff2htmlUi = new Diff2HtmlUI({diff: diffString});
        diff2htmlUi.draw(el);
}
于 2016-12-16T14:10:35.883 回答
2

我想你要找的是xdiff.

xdiff 扩展使您能够创建和应用包含不同文件版本之间差异的补丁文件。

此扩展支持两种操作模式 - 字符串和文件,以及两种不同的补丁格式 - 统一和二进制。统一补丁非常适合文本文件,因为它们易于阅读且易于查看。对于档案或图像等二进制文件,二进制补丁将是适当的选择,因为它们是二进制安全的并且可以很好地处理不可打印的字符。

于 2013-03-08T21:28:31.463 回答