如何使用PHP进行文本DIFF?

时间:2009-04-10 05:09:11

标签: php shell diff

为PHP执行此操作的最佳方法是什么?是否有任何PHP功能可以做到这一点,考虑到列内容可能非常大?

如果PHP函数不可用,我可以调用哪个shell实用程序?

感谢

3 个答案:

答案 0 :(得分:10)

PHP中没有任何内置的diff函数。但是,对于PEAR来说很有道理:Text_Diff(从来没有用过它,但我相信它在PEAR中)。

甚至还有一个PECL包,xdiff

提示:pear类是纯php,pecl包是模块。通常,模块比类快,但它也取决于功能。你只需要测试和评估。

用于存储:我存储纯文本,而不是差异。空间很便宜,许多数据库(例如mysql)支持数据压缩(或者你可以在php中解压缩),但是如果存储明文,你就可以独立于diff算法,并且可以在以后需要时更改它。

如果你需要速度,你可以存储明文和差异。

答案 1 :(得分:4)

通常的过程是存储每个不同的版本并在用户想要查看时计算差异,如果流程很昂贵,可能会缓存该输出。

您可以存储基本修订版,然后使用一组可以应用于获取先前版本的差异。

在任何一种情况下,都有特许权;第一种选择是以便宜的方式检索特定版本,但代价是需要更多的处理才能进行差异化处理;第二种方法使diff观察成本低廉,但代价是可能需要昂贵的增量补丁以获得特定版本。

答案 2 :(得分:0)

如果内容非常大并且更改只是次要内容,您可以考虑采用“反向增量”方法:只有最新版本的文本以完整格式存储,而之前的版本是差异从最新版本到上一版本。

它将节省大量存储空间,但是比较两个版本的修改数量很大,这个过程的成本可能相当高。毕竟,它总是在存储空间和处理要求之间进行权衡。

如果您不能或不想使用PEAR和PECL,您仍然可以使用exec调用的diff实用程序。我肯定会选择标准差异格式,而不是自己开发。