PHP没有内置的diff函数。但是,感谢PEAR:Text_Diff (虽然我从未使用过,但我相信它在PEAR中)。 甚至还有一个PECL包,xdiff 提示:PEAR类是纯PHP,PECL包是模块。通常,模块比类更快,但这也取决于功能。您只需要进行测试和评估。 对于存储:我会存储纯文本,而不是差异。空间便宜,许多数据库(例如mysql)支持数据压缩(或者您可以在php中进行解压缩),但如果您存储纯文本,则独立于差异算法,并且如果需要,可以随后更改其内容。 如果需要速度,您可以同时存储纯文本和差异。
通常的流程是存储每个不同的修订版本,在用户想要查看它时计算差异,如果这个过程很耗费资源,可以考虑缓存输出结果。你可以存储一个基本版本,然后有一组可以应用于获取先前版本的差异。在任何情况下,都需要做出让步;第一种选择使得检索特定版本的成本较低,但需要更多的处理来进行差异比较;第二种选择使得差异查看变得便宜,但可能需要昂贵的增量打补丁才能获得特定版本。
如果内容非常大且只有轻微更改,您可以考虑采用“反向增量”方法:仅将文本的最新版本以完整格式存储,而上一个版本是从最新版本到上一个版本的差异。这将节省大量存储空间,但是比较修改次数较多的两个版本时,处理成本可能相当大。毕竟,存储空间和处理要求之间总是存在权衡。如果您无法或不想使用PEAR和PECL,则仍然可以使用由exec调用的diff实用程序。我肯定会选择标准的diff格式,绝不会开发自己的格式。
Text_Diff
可以使用xdiff
。@hitautodestruct,你可以在这里找到示例:https://pear.php.net/manual/en/package.text.text-diff.intro.renderers.php。 - user1544337