2009-04-10 16 views
5

PHPでこれを行うにはどのような方法が最適ですか?列の内容が非常に大きい可能性があることを考慮して、これを行うことができるPHP関数はありますか?テキストの操作方法PHPを使用したDIFF?

PHP関数が利用できない場合は、どのシェルユーティリティを呼び出せますか?

おかげ

答えて

4

通常のプロセスは、それぞれ別個のリビジョンを格納し、ユーザがプロセスは高価である場合、おそらくその出力をキャッシュし、それを見たいときに差分を計算することです。

ベースリビジョンを保存して、以前のバージョンを取得するために適用できる差分セットを持つことができます。

どちらの場合も、作成する譲歩があります。最初のオプションでは、特定のバージョンを安価に取得することができます。 2番目の方法は、差分表示を安価にしますが、特定のバージョンを取得するために潜在的に高価な増分パッチを犠牲にします。

+1

しかし、どのようにDIFFを最初に行うのですか? PHPには組み込み関数がありますか? –

10

PHPにはdiff関数が組み込まれていません。しかし、PEARのためのhooray:Text_Diff(それは決してそれを使用しませんでしたが、PEAR私は信頼します)。

とPECLパッケージ、xdiff

ヒントでもあります:梨クラスは純粋なPHPですが、PECLパッケージは、モジュールです。通常、モジュールはクラスより高速ですが、機能にも依存します。テストして評価するだけです。

保存用:私は差分ではなくプレーンテキストを保存します。スペースは安いですが、多くのデータベース(例えばmysql)はデータ圧縮をサポートしています(またはPHPで圧縮解除することもできます)。しかし、プレーンテキストを保存すると、diffアルゴリズムとは無関係で、必要に応じて後で変更できます。

スピードが必要な場合は、平文と差分の両方を保存できます。

+0

+1:私は過去にText_Diffを使用しましたが、それは仕事をします。 –

+0

@PaoloBergantinoコード例がありますか? – hitautodestruct

+0

[ここで](https://pear.php.net/manual/en/package.text.text-diff.intro.php)で 'Text_Diff'が' xdiff'を使うことができます。 @hitautodestructの例は、https://pear.php.net/manual/en/package.text.text-diff.intro.renderers.phpにあります。 – Keelan

0

コンテンツが非常に大きく、変更が軽微なものである場合、最新のバージョンのテキストのみがフルフォーマットで保存され、以前のvesionは最新のバージョンから以前のバージョンへのdiff。

多くのストレージスペースを惜しみませんが、変更の数が多い2つのバージョンを比較すると、プロセスのコストが相当に高くなる可能性があります。結局のところ、それは常にストレージスペースと処理要件の間のトレードオフです。

PEARとPECLを使用できない、またはしたくない場合は、引き続きexecによって呼び出されるdiffユーティリティを使用できます。私は確かに標準のdiff形式に行き、自分で開発することはありません。

関連する問題