현재 위치: > 최신 기사 목록> Hash_update_stream ()을 사용하여 파일 중복 제거 기능을 구현하십시오

Hash_update_stream ()을 사용하여 파일 중복 제거 기능을 구현하십시오

M66 2025-05-18

파일 중복 제거는 데이터 처리의 매우 중요한 부분입니다. 특히 많은 파일을 처리 해야하는 경우 중복 파일을 제거하면 스토리지 공간을 절약하고 시스템 효율성을 향상시킬 수 있습니다. PHP는 매우 강력한 기능 Hash_update_stream () 을 제공하여 파일 중복 제거 중에 해시 계산을보다 효율적으로 수행하는 데 도움이됩니다. 이 기사는 효율적인 파일 중복 제거 기능을 달성하기 위해 Hash_update_stream () 함수를 사용하는 방법을 자세히 소개합니다.

1. hash_update_stream () 함수는 무엇입니까?

Hash_update_stream () 은 PHP의 내장 해시 함수 중 하나입니다. 파일의 내용을 점차적으로 읽고 해시 값을 계산하여 파일을 한 번에 메모리에로드하지 않고 큰 파일을 처리 할 수 ​​있습니다. 큰 데이터 파일의 해시 계산에 적합하며 실시간으로 해시 값을 업데이트 할 수 있습니다.

기능 서명은 다음과 같습니다.

 bool hash_update_stream ( resource $context , resource $file , int $length = 8192 )
  • $ 컨텍스트 : hash_init () 에 의해 생성 된 해시 컨텍스트.

  • $ 파일 : 해시 값을 계산하기위한 파일 리소스.

  • $ 길이 : 파일 당 바이트 수 읽기, 기본값은 8192 바이트입니다.

2. hash_update_stream ()을 사용하여 파일 중복 제거를 달성하십시오

파일 중복 제거의 경우 일반적으로 각 파일의 해시 값을 계산 한 다음 해시 값이 이미 존재하는지 확인해야합니다. 해시 값이 이미 존재하면 파일이 복제되어 삭제할 수 있음을 의미합니다.

Hash_update_stream () 을 통해 메모리를 너무 많이 소비하지 않고 큰 파일에 대한 단계별 해시 계산을 효과적으로 수행하여 중복 제거 효율을 향상시킬 수 있습니다.

3. 구현 단계

다음은 파일의 간단한 PHP 예제입니다. Hash_update_stream ()을 사용하여 파일의 해시 계산을 처리합니다.

 <?php

// 해싱 알고리즘 설정
$hash_algorithm = 'sha256';

// 망상 폴더로가는 길을 가져옵니다
$directory = '/path/to/your/files';

// 해시 값을 저장하는 배열을 만듭니다
$hashes = [];

// 디렉토리에서 모든 파일을 가져옵니다
$files = scandir($directory);

foreach ($files as $file) {
    $file_path = $directory . DIRECTORY_SEPARATOR . $file;

    // 뛰어 올라 '.' 그리고 '..'
    if ($file === '.' || $file === '..') {
        continue;
    }

    // 해시 컨텍스트를 초기화합니다
    $context = hash_init($hash_algorithm);

    // 파일을 엽니 다
    $file_resource = fopen($file_path, 'rb');
    if ($file_resource) {
        // 해시 값을 점차 업데이트하십시오
        while (!feof($file_resource)) {
            hash_update_stream($context, $file_resource, 8192);
        }

        // 파일 리소스를 닫습니다
        fclose($file_resource);

        // 파일의 최종 해시 값을 얻으십시오
        $hash = hash_final($context);

        // 해시 값이 이미 존재하는지 확인하십시오
        if (in_array($hash, $hashes)) {
            // 파일이 반복되는 경우,삭제하십시오
            unlink($file_path);
            echo "중복 파일을 삭제합니다: $file\n";
        } else {
            // 그렇지 않으면,기존 해시 어레이에 해시 값을 추가하십시오
            $hashes[] = $hash;
        }
    } else {
        echo "无法파일을 엽니 다: $file\n";
    }
}

echo "파일 중복 제거가 완료되었습니다!\n";

?>

4. 코드 파싱

  1. 폴더의 모든 파일을 가져옵니다 . 먼저 scandir () 함수를 사용하여 디렉토리의 모든 파일을 가져옵니다. 우리는 그것을 건너 뛰고 싶습니다. 그리고 .. 폴더.

  2. 해시 값을 단계별로 계산하십시오 . 각 파일에 대해 해시 컨텍스트가 먼저 초기화 된 다음 파일을 단계별로 읽고 hash_update_stream ()을 사용하여 해시 값을 업데이트합니다.

  3. 중복 제거 판단 : 계산 된 해시 값 배열 $ 해시를 저장하면 현재 파일의 해시 값이 이미 존재하는지 여부를 결정합니다. 존재하면 파일이 반복되고 파일이 직접 삭제되었음을 의미합니다. 그렇지 않으면 해시 값을 배열에 추가하고 다음 파일을 계속 처리하십시오.

5. 최적화 및 예방 조치

  • 메모리 최적화 : hash_update_stream () 함수를 사용하면 전체 파일을 메모리에로드하지 않으므로 큰 파일을 처리 할 수 ​​있습니다.

  • 동시 중복 제거 : 다수의 파일의 경우 멀티 스레딩 또는 배치 처리를 사용하여 중복 제거 속도를 높일 수 있습니다. PHP는 기본적으로 멀티 스레딩을 지원하지 않지만 pthreads 와 같은 확장을 사용하거나 여러 프로세스에 작업을 배포하여 달성 할 수 있습니다.

  • 해시 충돌 : 해시 충돌 가능성은 매우 낮지 만 극단적 인 경우 두 파일의 해시 값이 동일하지만 내용이 다르면 여전히 중복 파일로 잘못 판단됩니다. 따라서 충분히 강한 해싱 알고리즘 ( SHA256 )을 선택하면이 위험을 크게 줄일 수 있습니다.

6. 결론

hash_update_stream () 함수를 사용하여 파일 중복 제거 작업을 매우 효율적으로 구현할 수 있습니다. 특히 큰 파일을 처리 할 때 메모리 소비를 크게 줄이고 효율성을 향상시킬 수 있습니다. 간단한 해시 가치 판단을 통해 중복 파일을 쉽게 삭제하고 스토리지 공간을 저장하며 시스템 성능을 향상시킬 수 있습니다.

이 기사가 Hash_update_stream ()을 더 잘 이해하고 사용하여 파일 중복 제거 기능을 구현할 수 있기를 바랍니다. 궁금한 점이 있으면 댓글 영역에 메시지를 남겨주세요.