현재 위치: > 최신 기사 목록> md5_file ()을 기반으로 파일 중복 제거 알고리즘 구현

md5_file ()을 기반으로 파일 중복 제거 알고리즘 구현

M66 2025-05-31

실제 개발에서 파일 중복 제거는 특히 많은 파일을 저장할 때 일반적인 요구 사항입니다. 중복 파일을 피하면 공간을 절약 할뿐만 아니라 시스템 효율성도 향상시킵니다. PHP는 매우 편리한 기능 MD5_File () 을 제공하여 파일의 해시 계산을 신속하게 구현하여 파일이 복제되었는지 쉽게 결정할 수 있도록 도와줍니다.

md5_file () 란 무엇입니까?

MD5_FILE ()은 지정된 파일 컨텐츠의 MD5 해시 값을 계산하기위한 PHP의 내장 함수입니다. 기본 구문은 다음과 같습니다.

 string md5_file(string $filename, bool $raw_output = false)
  • $ filename : 계산할 파일 경로.

  • $ raw_output : 원시 바이너리 형식으로 출력할지 여부, 기본값은 False 이며 32 비트 16 진수 문자열을 반환합니다.

이 함수는 파일 내용의 고유 한 요약을 반환하며, 이는 두 파일의 내용이 동일했는지 여부를 결정하는 데 매우 적합합니다.

간단하고 효율적인 파일 중복 제거 알고리즘을 구현하십시오

아이디어는 매우 간단합니다.

  1. 대상 폴더의 모든 파일을 반복합니다.

  2. md5_file ()을 사용하여 각 파일의 해시 값을 계산하십시오.

  3. 배열을 사용하여 나타난 해시 값을 기록하십시오.

  4. 파일의 해시 값이 이미 존재하는 경우 중복 파일로 결정되며 삭제 또는 건너 뛰기를 선택할 수 있습니다.

샘플 코드는 다음과 같습니다.

 <?php
$directory = '/path/to/your/files'; // 파일 디렉토리
$hashes = []; // 파일의 해시 값을 저장하는 데 사용됩니다

// 디렉토리의 모든 파일을 가로 지르십시오
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));

foreach ($files as $file) {
    if ($file->isFile()) {
        $filePath = $file->getRealPath();
        $fileHash = md5_file($filePath); // 파일을 계산합니다MD5

        if (isset($hashes[$fileHash])) {
            // 중복 파일을 찾으십시오,처리를 수행하십시오,예를 들어, 삭제
            echo "중복 파일: {$filePath} 已存在중복 파일 {$hashes[$fileHash]}\n";
            // unlink($filePath); // 삭제 해야하는 경우,이 라인을 무결하게합니다
        } else {
            // 새로운 해시를 기록하십시오
            $hashes[$fileHash] = $filePath;
        }
    }
}
?>

최적화 제안

  • 배치 처리 : 대형 디렉토리 파일이 많으면 한 번에 많은 양의 메모리를 소비하지 않도록 배치로 스캔 할 수 있습니다.

  • 캐시 해시 : 일반적으로 사용되는 디렉토리의 경우 해시 결과를 데이터베이스 또는 파일에 캐시하고 다음에 직접 읽어 효율성을 향상시킬 수 있습니다.

  • 교체 알고리즘 : MD5는 매우 효율적이지만 보안이 약합니다. 보안 요구 사항이 높으면 SHA1_FILE () 또는 HASH_FILE ()를 사용하는 것을 고려할 수 있습니다.

참조