【问题标题】:Store diff of files in PHP在 PHP 中存储文件的差异
【发布时间】:2014-11-26 08:52:18
【问题描述】:

使用 PHP 保存文本文件的 revision #7 时,我使用:

<?php 
  $file = fopen("data/myfile-revision7", 'w');
  fwrite($file, $data);
  fclose($file);
?>

但我宁愿存储myfile-revision1myfile-revision7 之间的差异,而不是一次又一次地保存整个$data

是否有一个函数包含在 PHP 中 可以计算 2 个文本文件的差异?


注意:如果稍后,我想再次获取完整的 myfile-revision7 文本文件,我该如何生成这个文件,以及 diff 数据?

【问题讨论】:

  • 也许你可以利用file_get_contents 函数来过滤掉已经保存在别处的文本。并将剩余的文本放入一个新文件中。
  • 你查看过 xdiff 吗? php.net/manual/en/intro.xdiff.php
  • 您基本上是在这里寻求工具推荐,这使得这个话题离题了。你可以用谷歌搜索PHP diff library 看看会发生什么(也许像xdiff)。

标签: php diff versioning


【解决方案1】:

您可能想使用xdiff_file_diff 函数。这是documentation

<?php
  $old = 'data/myfile-revision1';
  $new = 'data/myfile-revision7';
  $output = 'data/rev-1-7.diff'

  xdiff_file_diff($old, $new, $output);
?>

【讨论】:

  • 谢谢!不幸的是,我无法使用xdiff_file_diff,因为我无法在我的共享主机上安装libxdiff(我不是root)...您看到其他解决方案了吗?
  • 我认为您可以读取两个文件,然后使用如下外部库获取差异:http://www.raymondhill.net/finediff/viewdiff-ex.php。或者,如果您的共享主机允许,您可以进行系统调用exec('diff revision1 revision2 &gt; rev-1-7.diff')
  • 我认为它似乎适用于 &lt;?php $diff = exec('diff filea fileb'); echo $diff; ?&gt; 但我有这个答案:\ No newline at end of file:有什么想法吗?
  • 尝试用implode("\r\n", $diff)写一个文件。
  • 标准的diff / patch Linux 工具最终不适用于我的使用,因为它们是为 行间差异而设计的......但我只有一大行包含大量文本数据...不是行...另一种diff 考虑这个?
猜你喜欢
  • 2013-05-08
  • 1970-01-01
  • 2020-01-13
  • 2014-10-11
  • 1970-01-01
  • 2016-09-25
  • 2015-12-15
相关资源
最近更新 更多