8

現在、ファイルのグループをアップロードし、md5 チェックサムを使用してアップロードされた最後のバッチとファイルを比較し、どのファイルが変更されたかを通知するツールに取り組んでいます。

通常のファイルの場合、これは正常に機能しますが、アップロードされたファイルの一部は zip アーカイブであり、その中のファイルが同じであっても、ほぼ常に変更されています。

異なるタイプのチェックサムを実行して、これらのファイルが変更されたかどうかを確認する方法はありますか?各ファイルを個別に解凍してから、各ファイルの内容を個別に比較する必要はありません。

ここに私の現在の機能があります

function check_if_changed($date, $folder, $filename)
{
  $dh = opendir('./wp-content/uploads/Base/');
  while (($file = readdir($dh)) !== false) {
    $folders[] = $file;
  }
  sort($folders);
  $position = array_search($date, $folders);
  $prev_folder = $folders[$position - 1];
  if ($prev_folder == '.' || $prev_folder == '..')
    { return true;}
  $newhash = md5_file('./wp-content/uploads/Base/'.$date.'/'.$folder.'/'.$filename);
  $oldhash = md5_file('./wp-content/uploads/Base/'.$prev_folder.'/'.$folder.'/'.$filename);
  if ($oldhash != $newhash){
    return true;
  }
  return false;
}
4

2 に答える 2

8

zipアーカイブ内には、各「ファイル」に、最終変更時刻、ファイル名、バイト単位のファイルサイズなどのメタデータと、重要な部分であるcrc32チェックサムが格納されます。

基本的に、zipアーカイブをバイナリ形式で操作し、各ファイルのメタデータヘッダーを見つけて、チェックサムを以前に保存されたチェックサムと比較することができます。zipアーカイブ内のメタデータにアクセスするために解凍を行う必要はありません。これは非常に高速です。

http://en.wikipedia.org/wiki/Zip_(file_format)

編集-実際、ZipArchiveはこの機能を提供します。参照: http ://www.php.net/manual/en/ziparchive.statindex.php

于 2012-05-21T17:06:33.853 に答える
0

ZIP ファイルのファイル部分だけを抽出してハッシュ化することもできますが、メタ情報も削除する必要があります。

したがって、ファイルを抽出するのが最も簡単な解決策です。

于 2012-05-21T16:11:56.357 に答える