PHP에서는 파일 해싱을 수행하는 것이 일반적인 요구 사항입니다. 특히 파일 무결성을 확인 해야하는 경우. PHP의 hash_final 함수는 해시 계산의 최종 결과를 얻는 데 사용되는 핵심 기능입니다. 파일 읽기 작업과 결합하여 큰 파일의 해시 값을 효율적으로 계산하여 전체 파일을 한 번에 메모리에로드하는 것을 피할 수 있습니다. 이 기사는 HASH_Final 함수를 사용하여 효율적인 파일 해시 계산을 달성하고 파일 블록 별 블록 읽기를 결합하여 메모리 소비를 줄이는 방법을 자세히 소개합니다.
PHP의 Hash_Final 함수는 PHP의 내장 해시 함수 중 하나이며 일반적으로 hash_init 및 hash_update 함수와 함께 사용됩니다. Hash_Final은 최종 해시 값을 반환합니다. 해시 값은 일련의 데이터 (예 : 파일 컨텐츠)에서 계산 된 고정 길이 문자열입니다.
기능 프로토 타입은 다음과 같습니다.
string hash_final ( resource $context [, int $raw_output = 0 ] )
$ 컨텍스트 는 Hash_init 함수에 의해 생성 된 해시 컨텍스트입니다.
$ raw_output 은 선택적 매개 변수입니다. 1 으로 설정하면 원래 이진 데이터를 반환하고 그렇지 않으면 16 진수로 표시되는 해시 값을 반환합니다.
컴퓨팅 효율성을 향상시키기 위해, 특히 파일이 클 경우, 계산을 위해 파일을 메모리에 직접로드하는 것이 좋습니다. 청크에서 파일을 읽음으로써 메모리 오버플로를 피하고 계산 효율성을 향상시킬 수 있습니다.
구체적인 방법은 Fopen을 사용하여 파일을 열고 파일 내용을 하나씩 Fread를 통해 하나씩 읽고 해시 컨텍스트를 하나씩 업데이트하고 마지막으로 Hash_Final을 사용하여 최종 해시 값을 얻는 것입니다.
다음은 효율적인 파일 해시 계산을 구현하기 위해 파일 판독 값과 결합 된 PHP의 HASH_Final 함수를 사용하는 코드 예입니다.
<?php
// 파일 해싱을 계산하는 함수를 정의하십시오
function calculateFileHash($filePath, $algorithm = 'sha256') {
// 파일을 엽니 다
$file = fopen($filePath, 'rb');
// 파일이 열리지 않으면,반품false
if (!$file) {
return false;
}
// 해시 컨텍스트를 초기화합니다
$context = hash_init($algorithm);
// 읽기 블록 크기를 설정하십시오
$chunkSize = 8192; // 8KB
while (!feof($file)) {
// 파일의 일부를 읽으십시오
$data = fread($file, $chunkSize);
// 해시 컨텍스트를 업데이트하십시오
hash_update($context, $data);
}
// 파일을 닫습니다
fclose($file);
// 최종 해시 값을 얻으십시오
$hashValue = hash_final($context);
return $hashValue;
}
// 함수를 호출하고 결과를 인쇄하십시오
$filePath = 'path/to/your/file.txt'; // 파일 경로로 교체하십시오
echo 'File hash: ' . calculateFileHash($filePath);
?>
모든 유형의 파일을 올바르게 읽을 수 있도록 Fopen을 통해 이진 모드로 파일을 열립니다.
Hash_init은 해시 컨텍스트를 초기화하고 사용 된 해싱 알고리즘을 지정하는 데 사용됩니다 (기본값은 SHA256 ).
Fread는 한 번에 큰 파일을 메모리에로드하지 않도록 청크의 파일을 읽습니다.
Hash_update는 각 데이터를 읽은 후 해시 컨텍스트를 업데이트합니다.
마지막으로 Hash_Final은 최종 해시 값을 반환하도록 요청됩니다.
메모리 최적화 : 블록별로 파일을 읽으면 메모리 사용이 줄어들고 큰 파일을 처리하는 데 적합합니다.
계산 효율성 : 전체 파일을 메모리에로드하는 높은 비용을 피하면서 해시 값을 점차 계산합니다.
유연성 : MD5 , SHA1 , SHA256 등과 같은 요구에 따라 다양한 해싱 알고리즘을 선택할 수 있습니다.
Hash_Final 함수와 파일 읽기 블록을 블록으로 결합하여 메모리 오버플로를 유발하지 않고 큰 파일의 해시 값을 효율적으로 계산할 수 있습니다. Hash_final 은 PHP 해시 계산의 핵심 기능 중 하나 인 개발자가 파일의 빠른 해시 계산을 실현하는 데 도움이 될 수 있습니다. 이 방법을 사용하면 계산의 효율성을 보장 할뿐만 아니라 대규모 파일로 인한 메모리 압력을 피할 수 있습니다.