如何在PHP中比较两个具有不同行结尾的文本文件?

时间:2010-08-15 10:56:13

标签: php line-endings newline

我需要在php中比较两个文本文件。一个文件是用户上传的,另一个是由服务器提供的,在Windows上运行。 当文件从另一台Windows计算机提交时,这工作正常,但是从Linux计算机上的文件出来的不同,我假设这是因为不同的行结尾。有没有一种简单的方法可以将Windows文本文件与linux文本文件进行比较?

目前这是我的代码;

$text1 = file_get_contents($file1);
$text2 = file_get_contents($file2);
if (strcmp($content, $content2) == 0) { etc;

3 个答案:

答案 0 :(得分:6)

你可以用CRLF行结尾替换LF行结尾,或者在两个文件中反过来 - 尝试这样的事情:

$text1 = str_replace("\r\n", "\n", $text1)

同样适用于$text2

答案 1 :(得分:1)

只是为了添加另一个可能更便携的选项(其他回复者建议的替换已经适合你的情况),file()函数将文件数据拆分成一个数组,似乎能够同时处理Windows和Linux编码:

$text1 = file($file1, FILE_IGNORE_NEW_LINES);
$text2 = file($file2, FILE_IGNORE_NEW_LINES);  

if ($text1 === $text2) .... 

如果启用了auto_detect_line_endings运行时设置,它还可以处理Macintosh行结尾。

答案 2 :(得分:0)

preg_replace('/\v+/','\n',$text1)==preg_replace('/\v+/','\n',$text2)