我正在寻找一个免费的 PHP 库,可以生成代码差异的 HTML。基本上就像 GitHub 的代码差异页面一样。
我已经四处搜索,但找不到任何东西。有没有人知道是否有类似的工具可用?
我已经四处搜索,但找不到任何东西。有没有人知道是否有类似的工具可用?
通过使用不同的搜索词进行更多的Google搜索,我似乎找到了我要找的东西。
php-diff 看起来正是我想要的。它只是一个 PHP 函数,接受两个字符串并生成所有 HTML,以便在网页上显示差异。
在这里我想要补充一点……
不幸的是,PHP 中没有真正好用的 diff 库来显示/生成 diffs。不过,最近我找到了一种迂回的方法来使用 PHP 进行此操作。解决方案包括:
git
来生成 Diff 以进行渲染首先,有一个优秀的 JavaScript 库可以呈现 GitHub 风格的 diffs,叫做diff2html。它以现代化的样式非常干净地呈现 diffs。然而,diff2html
需要一个真正的 git diff 才能呈现,因为它旨在像 GitHub 一样直接呈现 git diffs。
如果我们让 diff2html 处理 diff 的呈现,那么我们所需要做的就是创建 git diff 以使其呈现。
要在 PHP 中实现这个目标,你可以调用运行在服务器上的本地 git
二进制文件。你可以使用 git
计算两个任意文件之间的 diff,使用 --no-index
选项。你还可以使用 -U
选项指定要返回的找到的 diffs 前/后多少行。
在服务器上,它看起来可能像这样:
// 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中的结果将类似于以下内容(假设您将$diff
传递为diffString
):
function renderDiff(el, diffString) {
var diff2htmlUi = new Diff2HtmlUI({diff: diffString});
diff2htmlUi.draw(el);
}
xdiff
。