2013-07-22 4 views
0

Я хочу сравнить два файла, чтобы проверить, изменяется ли второй файл из первого файла.md5sum разные значения для одного и того же контента

Для этой реализации я планировал сравнить md5_file() обоих файлов. Но проблема в том, что исходный файл создается кодировкой линии Unix, а вторым файлом может быть любой тип кодирования строк (Unix, Mac или Windows). Таким образом, сравнение файлов всегда терпит неудачу. Как решить эту проблему ?.

Я попытался удалить пробелы из обоих файлов, а затем провел сравнение. Но этот метод также терпит неудачу. Есть ли другой способ решить проблему?

Im не должен копировать или изменять второй файл.

Fixed Myself следующим

$file1 = md5(preg_replace('/\s/', '', file_get_contents($file1))); 
$file2 = md5(preg_replace('/\s/', '', file_get_contents($file2))); 

if ($file1 == $file2) 
    continue; 

ответ

1

Просто замените все строки окончаний во втором файле со стилем Unix, но только делать это временный файл или такой, чтобы вы могли сохранить оригинал.

+0

Нет Jhon, Im не должен копировать или изменять второй файл. – Santhanakumar

+1

Вы не будете. Вы будете «интерпретировать» файл согласованным образом. –

+1

Определите «КОПИРОВАТЬ», он должен, по крайней мере, «скопироваться» в память, чтобы что-либо сделать с ним. –

1

В зависимости от того, насколько велики файлы, вы можете просто прочитать их в строках, учитывая кодировку, а затем md5 эти строки.

$file1 = file_get_contents($file_url_1); 
    $file2 = file_get_contents($file_url_2); 

    $file1 = mb_convert_encoding($file1, "UTF-8", "whateverEncoding"); 
    $file2 = mb_convert_encoding($file2, "UTF-8", "whateverOtherEncoding"); 

    if (md5($file1) == md5($file2)) 

    .... 
+0

, если вы читаете содержимое всего файла, почему бы не сравнить их, вместо вычисления md5 и сравнения сумм. И было бы намного лучше создать сумму md5 из байтовых значений файла, вместо преобразования в строку. – Dainius

+0

@Dainius Ну, я предполагаю, что строка md5 «текущей» версии может быть сохранена, поэтому вам просто нужно хэш-файл, а не оба файла все время. Но да, ByteArray сделает это. – dognose

Смежные вопросы