2016-06-18 9 views
1

私は以下のコード行を実行することによって動的に作成されたテキストファイルを持っています。PHPを使用した2つのテキストファイルの比較

if (system('javac main.java 2>ErrorFile.txt')!==false) 
    { 
     exec('java main 1>OutputFile.txt<filename.txt'); 
    } 

ここで、OutputFile.txtとsample.txtを比較します。そして、私は以下の関数を使用しましたが、それは私を助けませんでした。誰でも私を助けてください!

function filecomparision($a, $b) { 
    if(filesize($a) !== filesize($b)){ 
     return false; $ah = fopen($a, 'rb'); $bh = fopen($b, 'rb'); 
     $result = true; while(!feof($ah)) { 
      if(fread($ah, 8192) != fread($bh, 8192)) { 
       $result = false; 
       break; 
      } 
     } 
     fclose($ah); fclose($bh); 
     return $result; 
    } 
} 

私は上記の機能を試してみましたが、内容が同じでも2つの異なるサイズがありました。 OutputFile.txtの内容を8進数で表示しています。

+3

代わりにタグphpを使用する必要があります。 – sab

+0

なぜあなたは[tag:java]タグを使用していますか? –

+0

はい私はしました。 @sab –

答えて

0
<?php 
/** 
* @param $a string 
* @param $b string 
* @return bool 
*/ 
function filecomparision($a, $b) { 
    // assuming both of files are exists 
    return md5(file_get_contents($a)) === md5(file_get_contents($b)); 
} 

提案:内容は、別の文字セットまたは別のEOLマーカを使用することができ、あなたのJavaアプリケーションだって、同一のようですしながら、あなたは異なるサイズを持つことができます。

正しく修正する方法はわかりません。 EOLの交換を試みることができます。

<?php 
function filecomparision($a, $b) { 
    // assuming both of files are exists 
    $a = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($a)); 
    $b = preg_replace('/(\r\n|\n\r|\r)/', "\n", file_get_contents($b)); 
    return md5($a) === md5($b); 
} 

この特定のケースのためのアップデート:

<?php 
function filecomparision($a, $b) { 
    // assuming both of files are exists 
    $a = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($a))); 
    $b = preg_replace('/(\r\n|\n\r|\r)/', "\n", rtrim(file_get_contents($b))); 
    return md5($a) === md5($b); 
} 
+0

md5()を使用すると私にとってはうまくいきませんでした。 @Wizard –

+0

@MaheshwarReddykあなたはどんな種類の問題やエラーがありますか? – Wizard

+0

内容が同じ場合でも関数はfalseを返しています –

0

私は余分な文字をストリッピングファイルを上書きしようとしました。

 $v = rtrim(file_get_contents($b),"\x0D\x0A"); 
    $MyFile = fopen($b, "w") or die("Unable to open file!"); 
    fwrite($MyFile,$v); 
    fclose($MyFile); 

私はこのコードを追加しましたが、今はすべて正常に動作しています。

+0

これは私が前に言ったことだった... "...あなたはEOFでEOLを持っているかもしれないが、もう一つはそうではない..." – Wizard

関連する問題