HTMLのコード差分を生成できる無料のphpライブラリを探しています。基本的には、GitHubのコード差分ページと同じです。
私はあちこち探していましたが、何も見つかりません。誰かが私が探していることをする何かを知っていますか?
別の言い回しでさらにGoogle検索を行った後、探しているものが見つかったようです。
php-diffは私が望んでいることを正確に実行しているようです。2つの文字列を受け入れ、すべてのHTMLを生成するphp関数だけで、Webページに差分が表示されます。
ここに私の2セントを追加するには...
残念ながら、PHPでdiffを表示/生成するための本当に優れたdiffライブラリはありません。そうは言っても、私は最近、PHPを使用してこれを行うための遠回りな方法を見つけました。関係する解決策:
git
、レンダリングする差分を生成しますまず、diff2htmlと呼ばれるGitHubスタイルの差分をレンダリングするための優れたJavaScriptライブラリがあります。これにより、差分が非常にきれいになり、モダンなスタイルになります。ただし、 GitHubと同様に、文字通りgit diffをレンダリングすることを目的としているため、レンダリングするに は真のgitdiffが必要です。diff2html
diff2htmlにdiffのレンダリングを処理させる場合、あとはgitdiffを作成してレンダリングするだけです。
git
PHPでこれを行うには、サーバーで実行されているローカルバイナリにシェルアウトできます。git
オプションを使用して、2つの任意のファイルの差分を計算するために使用でき--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で次のようになります(として渡すと仮定$diff
)diffString
。
function renderDiff(el, diffString) {
var diff2htmlUi = new Diff2HtmlUI({diff: diffString});
diff2htmlUi.draw(el);
}
あなたが探しているのはですxdiff
。
xdiff拡張機能を使用すると、ファイルの異なるリビジョン間の違いを含むパッチファイルを作成して適用できます。
この拡張機能は、文字列とファイルの2つの操作モードと、統合およびバイナリの2つの異なるパッチ形式をサポートします。統合パッチは、人間が読める形式で確認しやすいため、テキストファイルに最適です。アーカイブや画像などのバイナリファイルの場合、バイナリパッチはバイナリセーフであり、印刷できない文字を適切に処理するため、適切な選択になります。