개발 과정에서 파일 내용이 복제되었는지 여부를 결정하는 것이 일반적인 요구 사항입니다. 예를 들어, 파일 업로드, 파일 스토리지 또는 중복 콘텐츠를 방지 할 때 파일 콘텐츠가 동일한 지 효율적으로 결정할 수 있어야합니다. PHP는이 목표를 달성하기위한 많은 도구를 제공하며 Hash_update_stream 함수는 매우 실용적인 방법입니다. 특히 큰 파일을 처리 할 때 파일의 해시 값을 효율적으로 계산하고 파일이 복제되었는지 신속하게 결정할 수 있습니다.
Hash_update_stream 은 PHP에 내장 된 해시 기능으로 스트림 (예 : 파일 스트림)을 해시 할 수 있습니다. 전체 파일의 해시를 직접 계산하는 전통적인 방법과 달리 Hash_update_stream은 스트림을 점차적으로 읽고 해시 값을 업데이트 할 수 있으며,이 값은 한 번에 메모리에 큰 파일을로드하여 메모리 및 계산 시간을 저장하지 않아도됩니다.
hash_update_stream 함수를 사용하여 파일이 복제되어 있는지 여부를 결정하려면 일반적으로 각 파일의 해시 값 (예 : MD5 또는 SHA256)을 계산 한 다음 계산 된 해시 값을 저장된 해시 값과 비교하도록 수행됩니다. 해시 값이 동일하면 파일 내용은 복제로 간주됩니다.
먼저 파일을 열고 내용을 단계별로 읽고 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";
?>
파일의 해시 값을 계산 한 후에는 데이터베이스 또는 스토리지 시스템의 파일 해시 값과 비교하여 파일이 복제되었는지 여부를 결정할 수 있습니다.
<?php
// 이미 저장된 해시 목록이 있다고 가정 해 봅시다
$storedHashes = [
'd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2', // 저장된 파일 해시 값
'a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3'
];
// 계산 된 해시 값이 저장된 해시 값에 존재하는지 확인
if (in_array($hashValue, $storedHashes)) {
echo "중복 파일 컨텐츠!";
} else {
echo "파일 콘텐츠는 반복되지 않습니다,업로드 또는 저장 준비!