在PHP中将字符串与文本文件进行比较的最优雅,最有效的方法是什么。
流程:
我在服务器var\user\rinchik\file\fileName\version0.txt
上有一个文件。
用户来到网站,做他的事情并得到$string
字符长度为N
。
我需要检查这个字符串是否与var\user\rinchik\file\fileName\version0.txt
的内容相同。如果是那么什么都不做。如果不是,请在此处保存此字符串:var\user\rinchik\file\fileName\version1.txt
。
我应该将文件version0.txt读入另一个字符串,然后对它们进行哈希并比较哈希值吗?
或者有一些隐藏的魔术方法,例如:将新字符串保存为version1.txt
,运行类似file_compare('version0.txt','version1.txt');它会成功吗?
答案 0 :(得分:3)
您应该将文件version0.txt
读入字符串$ string1并检查$string == $string1
(我认为没有必要哈希$string
和$string1
)。
PHP中没有可以比较两个文件内容的内置函数。
另一种方法是,您可以使用shell命令diff
。例如exec('diff version0.txt version1.txt', $res, $rev)
并检查返回值if ($rev == 0) {...}
。
答案 1 :(得分:1)
由于您知道字符串的长度,因此可以先检查strlen($string) == filesize($filename)
。如果它们不同,您甚至不需要检查内容。
如果它们相同,那么您可以{Mar}的答案执行$string == file_get_contents($filename)
,或者使用md5
/ md5_file
哈希,以验证内容是否相同。
当然,如果生成字符串的方法意味着文件的长度总是相同(例如散列函数的结果),那么检查文件大小是没有意义的。
答案 2 :(得分:0)
快速而脏的方法,无需先将字符串写入文件:
if (md5($string) == md5_file('/path/to/your/file')) {
... file matches string ..
} else {
... not a match, create version1.txt
}