1

我有一个基于表单设置编写文本文件的功能,一个相当大的表单。

简而言之,我想将函数的输出与单个文件进行比较,并且仅在目标文件与输出不同时才执行(重写文件)。正如您所猜测的,这是一个性能问题。

可行吗,顺便说一句

过程是,我填写了一些表格:

  1. 写入单个文件以包含一些“特定”选定选项

  2. 一些“非特定”选项不一定向文件写入任何内容。

表格可以随时更新,因此文件的内容可能会根据不同的选项而增长或缩小。

如果我在第 1 点,它只需要重写文件。在第 2 点时,不应写入任何内容。

这是我尝试过的:

if ($output != file_get_contents($filepath)) {
  // save the data
}

但我觉得在这方面的执行延迟了很多。

我在这里发现了一个几乎类似的问题:我可以使用 file_get_contents() 来比较两个文件吗?,但我的问题不同。我正在将该过程的结果与一个已经存在的文件进行比较,该文件只是之前该过程的结果。并且仅在它们不同时才重写文件。

顺便说一句,表单上没有敏感数据。非常感谢任何提示。

谢谢

4

3 回答 3

1

与其将整个文件加载到内存中,不如逐行读取它(fgets)并将其与输入字符串逐行比较可能会更快。您甚至可以逐个字符地缩小,但我认为这太过分了。

于 2012-05-24T16:05:43.660 回答
1

要将整个文件与字符串进行比较(我想它是一个字符串,不是吗?)唯一的方法是读取整个文件并进行比较。为了提高性能,您可以逐行读取文件并在第一行停止,正如Explosion Pills在我之前所说的那样。

如果你的文件真的很大,并且你想进一步提高性能,你可以做一些散列的东西:

  • 生成输出,比方说$output
  • 计算md5($output)并存储在$output_md5.
  • $output_md5与存储的比较,比方说在 file output.md5
  • 他们平等吗?
    • 如果,什么也不做。
    • 如果没有,保存$outputoutput.txt$output_md5output.md5
于 2012-05-24T16:09:52.510 回答
1

您总是可以尝试将另一篇文章中的sha1_file($file)功能与sha1($string)功能结合起来,并检查它的相等性。

于 2012-05-24T16:13:54.473 回答