큰 파일을 처리 할 때 해시 계산을 위해 전체 파일을 직접 읽으면 많은 메모리가 필요하며 메모리가 충분하지 않을 수도 있습니다. 큰 파일을 효율적으로 처리하기 위해 PHP는 hash_update_stream () 함수를 제공하여 큰 파일을 점진적으로 해시 할 수 있습니다. 이러한 방식으로 파일을 읽는 동안 해시 값을 계산하여 전체 파일을 한 번에 메모리에로드하는 것을 피할 수 있습니다.
hash_update_stream ()은 스트림 데이터의 해시 값을 점진적으로 업데이트하는 PHP의 함수입니다. Hash_update () 와 유사하지만 차이점은 스트림 리소스를 문자열 데이터를 직접 처리하는 대신 입력으로 받아 들인다는 것입니다. 이렇게하면 한 번에 메모리에로드하지 않고 많은 양의 데이터를 처리 할 수 있습니다.
hash_update_stream () 함수를 사용하는 경우 먼저 파일 스트림을 열고 파일에 대한 해시 컨텍스트를 만들어야합니다. 그런 다음 파일의 일부 내용을 스트리밍하고 점차 해시 값을 업데이트 할 수 있습니다.
다음은 hash_update_stream ()을 사용하여 큰 파일 증분 해시를위한 기본 단계는 다음과 같습니다.
해시 컨텍스트 초기화 :
먼저 해시 컨텍스트를 초기화하려면 hash_init () 함수를 사용하십시오. SHA256 또는 MD5 와 같은 지원되는 해싱 알고리즘을 선택할 수 있습니다.
$hash_algorithm = 'sha256'; // 해싱 알고리즘을 선택하십시오
$context = hash_init($hash_algorithm);
파일 스트림 열기 :
fopen () 함수를 사용하여 파일을 열고 파일 스트림을 가져옵니다.
$file_path = 'path_to_large_file.txt'; // 큰 파일 경로로 교체하십시오
$file_stream = fopen($file_path, 'rb');
if (!$file_stream) {
die("파일을 열 수 없습니다!");
}
점진적으로 해시 업데이트 :
Hash_update_stream () 함수를 사용하여 파일 스트림의 데이터를 처리하십시오. 파일의 내용을 배치로 읽고 해시 값을 업데이트 할 수 있습니다.
while (!feof($file_stream)) {
$data = fread($file_stream, 8192); // 각각 읽습니다8KB데이터
hash_update_stream($context, $data);
}
최종 해시 값을 얻으십시오.
파일을 읽은 후 Hash_Final () 함수를 사용하여 최종 해시 값을 얻으십시오.
$final_hash = hash_final($context);
echo "파일의 해시 값은입니다: " . $final_hash . PHP_EOL;
파일 스트림 닫기 :
마지막으로 파일 스트림을 닫는 것을 잊지 마십시오.
fclose($file_stream);
<?php
// 해싱 알고리즘을 선택하십시오
$hash_algorithm = 'sha256';
$context = hash_init($hash_algorithm);
// 파일 스트림을 엽니 다
$file_path = 'path_to_large_file.txt'; // 큰 파일 경로로 교체하십시오
$file_stream = fopen($file_path, 'rb');
if (!$file_stream) {
die("파일을 열 수 없습니다!");
}
// 증분 업데이트 해시 값
while (!feof($file_stream)) {
$data = fread($file_stream, 8192); // 각각 읽습니다8KB데이터
hash_update_stream($context, $data);
}
// 최종 해시 값을 얻으십시오
$final_hash = hash_final($context);
echo "파일의 해시 값은입니다: " . $final_hash . PHP_EOL;
// 파일 스트림을 닫습니다
fclose($file_stream);
?>
메모리 효율성 : Hash_update_stream () 함수를 사용하여 큰 파일을 처리 할 때 전체 파일을 메모리에로드하지 않지만 블록별로 파일을 읽고 해시 값을 점차 업데이트하기 때문에 많은 메모리를 저장할 수 있습니다.
파일 읽기 블록의 크기 : 읽기 블록의 크기 ( fread () 의 두 번째 매개 변수)는 실제 상황에 따라 조정할 수 있습니다. 일반적으로 8KB ~ 64KB는 파일 크기 및 하드웨어 조건에 따라 최적화 할 수있는 합리적인 범위입니다.
오류 처리 : 실제 애플리케이션에서는 파일 판독 오류를 처리하거나 인터럽트를 열지 못하는 것과 같은 파일 읽기 오류를 처리하는 데주의를 기울여야합니다.
Hash_update_stream () 함수는 큰 파일의 해시 계산을 처리하기위한 매우 실용적인 도구입니다. 한 번에 전체 파일을 메모리에로드하는 문제를 피하면서 스트리밍의 단계별 해시 값을 계산하는 데 도움이 될 수 있습니다. 합리적인 블록 크기와 증분 업데이트를 사용하면 큰 파일의 해시를 효율적으로 계산하여 다양한 메모리 제한 환경에 적응할 수 있습니다.