현재 위치: > 최신 기사 목록> 해시를 사용하여 파일 콘텐츠가 복제되었는지 여부를 결정합니다.

해시를 사용하여 파일 콘텐츠가 복제되었는지 여부를 결정합니다.

M66 2025-05-27

개발 과정에서 파일 내용이 복제되었는지 여부를 결정하는 것이 일반적인 요구 사항입니다. 예를 들어, 파일 업로드, 파일 스토리지 또는 중복 콘텐츠를 방지 할 때 파일 콘텐츠가 동일한 지 효율적으로 결정할 수 있어야합니다. PHP는이 목표를 달성하기위한 많은 도구를 제공하며 Hash_update_stream 함수는 매우 실용적인 방법입니다. 특히 큰 파일을 처리 할 때 파일의 해시 값을 효율적으로 계산하고 파일이 복제되었는지 신속하게 결정할 수 있습니다.

hash_update_stream 함수는 무엇입니까?

Hash_update_stream 은 PHP에 내장 된 해시 기능으로 스트림 (예 : 파일 스트림)을 해시 할 수 있습니다. 전체 파일의 해시를 직접 계산하는 전통적인 방법과 달리 Hash_update_stream은 스트림을 점차적으로 읽고 해시 값을 업데이트 할 수 있으며,이 값은 한 번에 메모리에 큰 파일을로드하여 메모리 및 계산 시간을 저장하지 않아도됩니다.

Hash_update_stream을 사용하여 파일이 복제되었는지 여부를 결정하는 방법은 무엇입니까?

hash_update_stream 함수를 사용하여 파일이 복제되어 있는지 여부를 결정하려면 일반적으로 각 파일의 해시 값 (예 : MD5 또는 SHA256)을 계산 한 다음 계산 된 해시 값을 저장된 해시 값과 비교하도록 수행됩니다. 해시 값이 동일하면 파일 내용은 복제로 간주됩니다.

1 단계 : 파일을 열고 해시 값을 계산합니다.

먼저 파일을 열고 내용을 단계별로 읽고 Hash_update_stream을 사용하여 파일의 해시 값을 계산해야합니다.

 <?php
// 파일 경로
$filePath = 'path/to/your/file.txt';

// 해싱 알고리즘을 선택하십시오
$hashAlgo = 'sha256'; // 당신은 선택할 수 있습니다 md5、sha1 다른 알고리즘

// 파일을 엽니 다
$file = fopen($filePath, 'rb');

// 해시 자원을 초기화하십시오
$hashContext = hash_init($hashAlgo);

// 단계별 파일을 읽고 해시 값을 업데이트하십시오.
while (!feof($file)) {
    $chunk = fread($file, 1024); // 파일 블록을 읽습니다,큰 파일을 한 번에로드하지 마십시오
    hash_update_stream($hashContext, $chunk); // 해시 값을 업데이트하십시오
}

// 최종 해시 값을 계산하십시오
$hashValue = hash_final($hashContext);

// 파일을 닫습니다
fclose($file);

echo "파일의 해시 값은입니다: $hashValue";
?>

2 단계 : 해시 값 비교 기존 파일 해시 값 비교

파일의 해시 값을 계산 한 후에는 데이터베이스 또는 스토리지 시스템의 파일 해시 값과 비교하여 파일이 복제되었는지 여부를 결정할 수 있습니다.

 <?php
// 이미 저장된 해시 목록이 있다고 가정 해 봅시다
$storedHashes = [
    'd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2', // 저장된 파일 해시 값
    'a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3'
];

// 계산 된 해시 값이 저장된 해시 값에 존재하는지 확인
if (in_array($hashValue, $storedHashes)) {
    echo "중복 파일 컨텐츠!";
} else {
    echo "파일 콘텐츠는 반복되지 않습니다,업로드 또는 저장 준비!