2013-07-22 30 views
0

我想比較兩個文件來檢查第二個文件是否從第一個文件修改。md5sum對於相同的內容不同的值

對於此實現,我計劃比較這兩個文件的md5_file()。但問題是原始文件是由Unix線路編碼創建的,第二個文件可能是任何類型的線路編碼(Unix,Mac或Windows)。 所以文件比較總是失敗。 如何解決這個問題?

我試圖從兩個文件中刪除空格,然後進行比較。但是這種方法也失敗了。有沒有其他解決問題的方法?

我不應該複製或更改第二個文件。

固定我自己如下

$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,我不應該複製或更改第二個文件。 – Santhanakumar

+1

你不會。您將以一致的方式「解釋」文件。 –

+1

定義'複製'至少必須'複製'到記憶中,以便對它做任何事情。 –

1

根據文件的大小,您可以將它們讀入字符串,將編碼考慮在內,然後讀取這些字符串。

$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