PHP의 성능은 큰 파일을 처리 할 때, 특히 파일의 해시 값을 계산해야 할 때 중요한 고려 사항입니다. 일반적으로 파일 해시 값 (예 : MD5 또는 SHA-256)을 계산하는 데 특히 파일이 클 때 많은 시간이 걸릴 수 있습니다. PHP에서 HASH_Final 함수는 해시 계산을 완료하는 데 사용되는 핵심 기능으로, 큰 파일을 처리 할 때 성능을 향상시킬 수 있습니다. 다음으로 Hash_Final 함수를 사용하는 방법을 다루고 큰 파일을 처리 할 때 효율성을 향상시키기 위해 일부 예제를 사용합니다.
PHP의 hash_final 함수는 해시 컨텍스트의 최종 계산 기능입니다. 그 목적은 데이터를 해싱 알고리즘으로 전달하고 최종 해시 값을 반환하는 것입니다. 일반적으로 Hash_final은 Hash_init 및 Hash_update 와 함께 사용하여 해시 컴퓨팅의 완전한 프로세스를 형성합니다.
hash_init () : 해시 컨텍스트를 초기화합니다.
hash_update () : 해시 컨텍스트를 업데이트하고 단계별 데이터를 추가하십시오.
hash_final () : 최종 해시 값을 반환하고 해시 컨텍스트를 출시합니다.
이러한 기능의 조합은 큰 파일의 단계별 처리에 매우 유용합니다. 전체 파일을 한 번에 메모리에로드하지 않고 청크로 처리하기 때문에 큰 파일의 처리 성능에 중요합니다.
다음은 hash_init , hash_update 및 hash_final을 사용하여 큰 파일의 해시 값을 계산하는 방법을 보여주는 기본 예입니다.
<?php
// 파일 경로를 설정하십시오
$filePath = 'path/to/large/file.zip'; // 실제 큰 파일 경로로의 경로를 수정하십시오.
// 해시 컨텍스트를 초기화합니다
$hashContext = hash_init('sha256'); // 사용SHA-256해시 알고리즘
// 읽기를 위해 파일을 엽니 다
$handle = fopen($filePath, 'rb');
if ($handle === false) {
die('파일을 열 수 없습니다!');
}
// 블록으로 파일을 읽고 해시 컨텍스트를 업데이트하십시오
while (!feof($handle)) {
$chunk = fread($handle, 8192); // 각각 읽습니다8KB
hash_update($hashContext, $chunk); // 해시 컨텍스트를 업데이트하십시오
}
// 파일 핸들을 닫습니다
fclose($handle);
// 최종 해시 값을 얻으십시오
$hashValue = hash_final($hashContext);
// 출력 해시 값
echo "파일의 해시 값은입니다:$hashValue\n";
?>
해시 컨텍스트 초기화 : HASH_INIT 함수를 사용하여 SHA-256의 해시 컨텍스트를 초기화합니다. MD5 , SHA1 등과 같은 필요에 따라 다른 알고리즘을 선택할 수도 있습니다.
블록에서 파일 읽기 : 프레드 기능을 통해 블록으로 파일 내용을 읽고 매번 8KB를 읽습니다. 블록 크기는 필요에 따라 크기를 조정할 수 있습니다. 더 큰 파일 블록은 기능 호출 수를 줄이지 만 메모리 사용량을 증가시킬 수 있습니다.
해시 컨텍스트 업데이트 : 데이터 조각을 읽을 때마다 해시 _update는 한 번에 전체 파일을 메모리에로드하지 않도록 해시 컨텍스트를 업데이트하는 데 사용됩니다.
최종 해시 값 가져 오기 : 파일을 읽은 후 Hash_Final 함수를 사용하여 최종 해시 값을 얻고 출력하십시오.
블록으로 파일 읽기 : 큰 파일의 경우 전체 파일을 한 번에 메모리에로드하지 마십시오. 블록으로 파일을 읽고 해시 값을 업데이트하면 메모리 사용량을 크게 줄이고 처리 속도를 향상시킬 수 있습니다.
올바른 해시 알고리즘을 선택하십시오 . 다른 해싱 알고리즘은 성능이 다양하고 MD5는 일반적으로 더 빠르며 SHA-256은 더 안전하지만 비교적 느립니다. 큰 파일로 작업 할 때는 적절한 해싱 알고리즘을 선택하면 성능을 최적화 할 수 있습니다.
파일 흐름 최적화 : 메모리 매핑 된 파일 (예 : FOPEN 의 RB 모드)을 사용하여 가능하면 I/O 작업의 대기 시간을 줄입니다.
병렬화 처리 : 매우 큰 파일의 경우 병렬화 기술을 사용하여 파일을 여러 블록으로 분할하고 여러 프로세스 또는 스레드를 사용하여 해시를 병렬로 계산하고 결과를 병합하십시오.
많은 양의 데이터가있는 파일이 있다고 가정 하고이 파일의 SHA-256 해시 값을 계산하고 파일 내용을 확인하거나 계산 후 서버에 업로드해야합니다. 이 과정에서 HASH_Final 함수는 청크의 파일을 읽고 해시 값을 계산하여 메모리 오버플로를 효과적으로 피하고 전반적인 성능을 향상시킬 수 있습니다.
파일을 업로드 할 때 파일의 해시 값은 일반적으로 파일 무결성의 확인으로 사용됩니다.
<?php
// 예URL - 파일 업로드时사용哈希值进行验证
$uploadUrl = 'https://gitbox.net/upload_file';
// 파일의 해시 값이 계산되었다고 가정합니다.
$hashValue = '계산 된 파일 해시 값';
// 파일 업로드
$data = array('file_hash' => $hashValue);
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($uploadUrl, false, $context);
echo $result;
?>
이 예에서는 전송 중에 파일이 변조되지 않았는지 확인하기 위해 게시 요청을 통해 계산 된 해시 값을 지정된 서버 (이 경우 gitbox.net )로 보냅니다.