1

ApacheCommonsNETとそのFTPClientを使用しています。

今私の場合:サーバー上にファイルがあり、ローカルで同じ階層に同じファイルがあります。サーバー上で、PHPのmd5_file()を使用してファイルのMD5-チェックサムを生成します。私のマシンでは、Apache Commons Digest Utils md5hex()を使用してMD5-チェックサムを生成しています。

これらのMD5-ハッシュは、特定のファイルを除いて、実際には常に完全に一致します。

ファイルの1つは、現在のjQuery-Libraryです。これらのファイルのもう1つは.ttfFont-Fileで、もう1つは通常のPHPファイル(CodeIgniterのsystem / libraries / Migration.php )です。

ここで驚くべき部分です。これらのMD5チェックサムが同じでないことがわかった場合は、ローカルファイルをサーバーにアップロードします(または、FTPファイルをコンピューターにダウンロードします。どちらが新しいか(タイムスタンプ)によって異なります)。しかし、何があっても、アップまたはダウンロード後、MD5チェックサムはまったく同じではありません-まったく同じファイルから。なんで?

私が思ったように、タイムスタンプはmd5-dataの一部である可能性がありますが、他のすべてのファイルも失敗するため、これは実際には不可能です。

よろしくお願いします!

4

2 に答える 2

2

Jon Skeetがすでに述べたように、これが発生する通常の理由は、ファイルがバイナリではなくASCIIモードで転送されるためです。

これは、FTPClient.setFileType()のFTPClientドキュメントでサポートされています。

このメソッドが呼び出されない場合、デフォルトのファイルタイプはFTP.ASCII_FILE_TYPEです。

FTPClientを使用してファイルをバイナリモードで転送するには、setFileTypeアップロードする前に次のコマンドを呼び出します。

FTPClient.setFileType(FTP.BINARY_FILE_TYPE);

再度変更するまで、セッションはバイナリモードのままになります。

ちなみに、タイムスタンプは問題ではなく、MD5ハッシュには影響しません。

于 2013-02-01T10:17:07.097 に答える
1

私はコメントのprevilleagesを持っていないので、私は答えとして投稿しています。私のプロジェクトの1つで、これに直面しました。FTPクライアントは、ASCIIモードで改行文字を追加するために使用されていました。

詳細については、以下のリンクを参照してください https://superuser.com/questions/39520/downloading-files-with-filezilla-result-in-newline-rnn

于 2013-02-01T10:09:47.330 に答える