2017-03-02 54 views
0

我有2個HTML文件,我認爲它們是相同的,但某些版本的diff給出了相互衝突的結果。不同版本的'差異'在比較2個相同的文件時給出了不同的結果

使用PHP捲曲(http://php.net/manual/en/book.curl.php)從遠程URL下載了2個文件。這些文件是在不同的日子下載的,但我相信內容沒有改變,包括任何標記。應用程序的目的實際上是確定是否有變化。

文件大小是相同的;兩個358,341字節。目視檢查內容顯示它們是相同的。

爲了確保在我的本地機器上使用DiffMerge的標記或其他內容沒有差異,並且報告文件是相同的。

然而,當我ssh到一個CentOS服務器,並做一個比較,它顯示運行diff file1.html file2.html

12159,12161c12159,12161 
    < 
    < 
    < 
    --- 
    > 
    > 
    > 
    12163,12172c12163,12172 
    < 
    < 
    < 
    < 
    < 
    < 
    < 
    < 
    < 
    < 
    --- 
    > 
    > 
    > 
    > 
    > 
    > 
    > 
    > 
    > 
    > 
    12174c12174 
    < 
    --- 
    > 

下面當我看着那些行號在文本編輯器沒有明顯的差異。這個輸出實際上意味着什麼?

我還使用了一個基於網頁的差異工具https://github.com/chrisboulton/php-diff,它報告完全相同的行號與不同。然而,在「並排」模式(file1.html vs file2.html)中查看時的輸出完全相同!

有沒有人有任何想法如何調試,或者這個問題可能是什麼?這兩個文件在兩種情況下使用相同的腳本和方法下載,據我所知,沒有編碼差異。

+0

是否有任何空格(tab/new line/blanks)差異? –

+0

你現在有沒有關於控制字符,如換行符,縮進和其他東西。大部分時間你都可以看到文件的內容。得到像記事本+和檢查這個內容。 – JustOnUnderMillions

+0

謝謝你們兩位。受影響的行號上的製表符/空格是相同的。我已經使用Sublime來檢查這一點,甚至突出顯示該區域以「查看」標籤/空格的樣子;它們在兩個文件上都是相同的。 – Andy

回答

1

嘗試:

diff -w file1.html file2.html 

從手冊:

-w --ignore-all-space Ignore all white space. 

空格字符包括選項卡,垂直製表符,進紙,回車,和空間;某些語言環境可能會將其他字符定義爲空格。 source

+0

這非常有趣,因爲當我運行它時,沒有顯示任何差異。那麼這是否意味着我得到的奇怪輸出是由於間距?我根據別人的建議查看了編輯器中的選項卡/間距,沒有視覺差異,所以我不明白這是可能的嗎? – Andy

+0

空格字符包括製表符,垂直製表符,換頁符,回車符和空格;某些語言環境可能會將其他字符定義爲空格。 來源:https://www.gnu.org/software/diffutils/manual/html_node/White-Space。html – GreensterRox

0

使用hexeditor來區分這兩個文件,我很確定它們不是完全相同的。你會看到不同之處。例如wxHexEditor是免費的,多平臺並且能夠進行比較。

+0

我剛剛試過wxHexEditor,比較這兩個文件時它在比較面板中什麼都沒顯示。這真的很奇怪,但我想我的centOS服務器上的'diff'看到了一些差異 - 請參閱接受的答案。 – Andy

+1

奇怪。從你寫的東西看,似乎有一個本地版本和一個遠程版本。也許它在上傳過程中發生了改變使用ftp文本模式。如果你運行校驗和(sha256sum文件名),他們輸出相同嗎? – akg

+0

是的,這是一個很好的觀點 - 那裏*是一個本地和遠程副本。本地機器使用本地機器上的軟件(DiffMerge,wxHexEditor)進行比較,並使用'diff'在centOS服務器上比較遙控器,並在我的原始文章中提到PHP差異工具。奇怪的是這些文件被下載*在遠程服務器上*這是它顯示它們不同的地方;在我的本地機器上,它們是完全相同的,這與您所期望的相反,因爲轉移遠離本地而非其他方式。忽略空白可以遠程修復它 – Andy

相關問題