【问题标题】:How to do text DIFF using PHP?如何使用 PHP 进行文本 DIFF?
【发布时间】:2009-04-10 05:09:10
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: php shell diff


    【解决方案1】:

    PHP 中没有任何内置的 diff 函数。但是,PEAR 万岁:Text_Diff(从未使用过它,但我相信 PEAR)。

    甚至还有一个 PECL 包,xdiff

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

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

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

    【讨论】:

    【解决方案2】:

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

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

    在任何一种情况下,都需要做出让步;第一个选项使检索特定版本变得便宜,但代价是差异所需的更多处理;第二个使查看差异变得便宜,但代价是可能需要昂贵的增量补丁才能获得特定版本。

    【讨论】:

    • 但是首先如何做 DIFF 呢? PHP有内置函数吗?
    【解决方案3】:

    如果内容很大,而且改动很小,可以考虑采用“reverse delta”的方法:只有最新版本的文本以全格式存储,之前的版本是一个差异从最新版本到以前的版本。

    这会节省大量存储空间,但比较两个修改次数较多的版本,该过程的成本可能相当可观。毕竟,这始终是存储空间和处理要求之间的权衡。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多