Как вы сравниваете два текстовых файла с разными окончаниями строк в PHP? - PullRequest
0 голосов
/ 15 августа 2010

Мне нужно сравнить два текстовых файла в php. Один файл загружается пользователем, а другой - сервером, работающим в Windows. Это прекрасно работает, когда файл передается с другого компьютера с Windows, но с компьютера с Linux, файлы выходят разные, я предполагаю, что это из-за разных концов строки. Есть ли простой способ сравнить текстовые файлы Windows с текстовыми файлами Linux?

В настоящее время это мой код;

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

Ответы [ 3 ]

6 голосов
/ 15 августа 2010

Вы можете заменить CRLF окончания строк на LF окончания строк или наоборот в обоих файлах - попробуйте что-то вроде этого:

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

И то же самое для $text2.

1 голос
/ 15 августа 2010

Просто чтобы добавить еще один, потенциально более переносимый вариант (замена, предложенная другими ответчиками, уже подойдет для вашего случая), функция file() разбивает данные файла на массив и, кажется, может обрабатывать кодировки как Windows, так и Linux:

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

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

Может также работать с окончаниями строк в Macintosh, если включена настройка времени выполнения auto_detect_line_endings.

0 голосов
/ 15 августа 2010
preg_replace('/\v+/','\n',$text1)==preg_replace('/\v+/','\n',$text2)
...