PHP diff et merge

Publié dans PHP | Marqué avec , ,
Share

Une question que je me pose en ce moment… Comment, en PHP, comparer deux version d’un même texte et n’en faire plus qu’une contenant les différentes modifications. En gros: difference + merge. C’est ce qui est utilisé couramment dans les systèmes de Wiki (dont Wikipédia) et je vois quelques applications à cela qui pourraient être très sympathiques.
Après une petite recherche, voilà ce que je retiens de ce qui existe.

PHPDiff

Le projet PHPDiff est géré par Chris Boulton, sous licence BSD et accessible via Github: PHPDiff sur Github.
Ce projet m’intéresse particulièrement car un certain Xiphe a créé une interface Web dynamique (bref, en Javascript) pour choisir comment merger deux textes. Ce qui peut s’avérer utile en cas de conflit. C’est accessible en licence GPL sous Github: jQuery Merge for PHP Diff sur Github. La démo est vraiment bluffante : Démo jQuery Merge.

IHM Demo jQuery Merge

FineDiff

Le projet FineDiff est développé par Raymond Hill sous licence MIT. La granularité de cet algorithme est particulièrement fine comme le montre la page de démo: Démo FineDiff. La encore, je suis bluffé !
Télécharger FineDiff.

Mergely

Il existe aussi le projet Mergely qui a l’avantage est l’inconvénient d’être maintenu par une société. Selon les usages il existe une licence gratuite et une licence commerciale. Il faut reconnaître que l’interface visuelle est très complète : Démo Mergely.

Package PEAR Text_Diff (deprecated)

Il existe un vieux package PEAR : Text_Diff. Je ne sais pas ce que ça donne, mais le développement n’est plus suivi.

Extension PECL XDiff

Ah, et il existe aussi une extension PHP PECL : XDiff.

Conclusion

A première vue comme ça, et sans aucun test, j’ai plutôt l’impression que PHP Diff et / ou FineDiff sont de bons candidats. A tester… Une autre alternative pourrait consister à étudier l’algorithme de MédiaWiki par exemple : includes/diff. A voir.

One Response to PHP diff et merge

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *