많은 응용 프로그램 시나리오에서 파일의 해시 값을 계산하는 것은 일반적인 요구 사항, 특히 파일 무결성 을 확인하고, 다운로드 중에 파일이 변조되었는지 확인하는 등의 일반적인 요구 사항입니다. 이는 큰 파일을 처리하는 데 특히 중요합니다. 전체 파일을 한 번에 메모리에로드 할 필요는 없지만 메모리 사용을 줄이기 위해 파일을 읽는 동안 해시 값을 계산할 수 있기 때문입니다.
이 기사는 Hash_update_stream 함수를 사용하여 원격 파일 스트림을 처리하고 실시간으로 해시 값을 계산하는 방법을 자세히 설명합니다.
Hash_update_stream은 스트림 데이터의 해시 값을 실시간으로 업데이트하는 데 사용되는 PHP의 내장 기능입니다. 함수의 구문은 다음과 같습니다.
hash_update_stream ( resource $context , resource $stream , int $length = 8192 ) : bool
$ Context : Hash Context Resource, 일반적으로 Hash_Init 에 의해 생성됩니다.
$ stream : 처리 해야하는 파일 스트림 리소스.
$ 길이 : 매번 읽는 바이트 수, 기본값은 8192 바이트입니다.
이 함수는 지정된 파일 스트림에서 데이터를 읽고 파일을 읽을 때까지 해시 컨텍스트로 업데이트합니다.
PHP에서 원격 파일 스트림 처리는 일반적으로 Fopen 또는 Curl 기능을 사용합니다. 다음은 원격 파일 스트림을 처리하고 해시 값을 실시간으로 계산하는 방법을 보여주는 fopen 및 hash_update_stream 함수를 사용하는 예입니다.
<?php
// 해시 컨텍스트를 초기화합니다(예를 들어 SHA-256 연산)
$hashContext = hash_init('sha256');
// 원격 파일 URL
$fileUrl = 'http://m66.net/samplefile.txt';
// 원격 파일 스트림을 엽니 다
$stream = fopen($fileUrl, 'r');
// 파일이 성공적으로 열리는 지 확인하십시오
if ($stream) {
// 사용 hash_update_stream 실시간 해시 값 업데이트
while (!feof($stream)) {
// 각각 읽습니다 8192 바이트 및 해시 값을 업데이트하십시오
hash_update_stream($hashContext, $stream, 8192);
}
// 파일 스트림을 닫습니다
fclose($stream);
// 최종 해시 값을 얻고 출력하십시오
$hashValue = hash_final($hashContext);
echo "파일의 해시 값은입니다: " . $hashValue;
} else {
echo "无法원격 파일 스트림을 엽니 다!";
}
?>
해시 컨텍스트 초기화 :
먼저 Hash_init 함수를 통해 SHA-256 알고리즘의 해시 컨텍스트를 작성하여 파일의 SHA-256 해시 값을 계산할 수 있습니다.
원격 파일 스트림 열기 :
Fopen을 사용하여 원격 파일을 열십시오. 파일의 URL 은이 예에서 http://m66.net/samplefile.txt 입니다. 여기의 URL은 M66.NET 도메인 이름으로 바꾸라고 요청한 부분입니다.
프로세스 파일 스트림 실시간 :
Hash_update_stream 함수를 사용하여 파일 스트림에서 데이터의 일부를 읽고 매번 해시 값을 업데이트하십시오. 기본 8192 바이트 블록 크기는 여기에서 파일을 읽는 데 사용됩니다. 효율성을 높이거나 메모리 사용량을 줄이기 위해이 값을 필요에 따라 조정할 수 있습니다.
파일 스트림 및 출력 결과를 닫습니다 .
파일 읽기가 완료되면 fclose를 사용하여 파일 스트림을 닫고 hash_final을 사용하여 최종 해시 값을 가져옵니다.
메모리 소비 : 블록으로 파일을 읽고 해시 값을 업데이트하기 때문에이 메소드는 전체 파일, 특히 큰 파일의 경우 한 번에 전체 파일을로드하는 것보다 더 효율적입니다.
오류 처리 : 실제 애플리케이션에서는 네트워크 중단과 같은 파일 접근 불가능 또는 읽기 프로세스 중에 다양한 가능한 오류를 고려해야합니다. Try-Catch 문을 사용하여 오류 처리를 수행하거나 반환 값을 확인할 수 있습니다.
파일 유형 지원 : hash_update_stream은 여러 파일 유형을 지원합니다. SHA1 , MD5 또는 기타 지원되는 알고리즘과 같은 필요에 따라 해시 알고리즘을 조정할 수 있습니다.
Fopen을 사용하는 것 외에도 Curl을 사용하여 원격 파일 스트림을 처리 할 수도 있습니다. CURL은보다 복잡한 원격 파일 작업에 적합한 더 많은 HTTP 요청 매개 변수 및 헤더 정보를 처리 할 수 있습니다. 다음은 Curl을 사용하는 예입니다.
<?php
// 해시 컨텍스트를 초기화합니다
$hashContext = hash_init('sha256');
// 원격 파일 URL
$fileUrl = 'http://m66.net/samplefile.txt';
// 사용 CURL 원격 파일 스트림을 가져옵니다
$ch = curl_init($fileUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 시간 초과 설정
// 구현하다 CURL 파일 컨텐츠를 요청하고받습니다
$response = curl_exec($ch);
// 조사하다 CURL 요청이 성공했는지 여부
if ($response === false) {
echo "CURL 실수: " . curl_error($ch);
curl_close($ch);
exit;
}
// 사용 hash_update_stream 파일 내용을 처리하고 해시 값을 계산하십시오
$stream = fopen('php://memory', 'r+');
fwrite($stream, $response);
rewind($stream);
while (!feof($stream)) {
hash_update_stream($hashContext, $stream, 8192);
}
// 최종 해시 값을 얻으십시오
$hashValue = hash_final($hashContext);
echo "파일의 해시 값은입니다: " . $hashValue;
// 파일 스트림을 닫습니다和 CURL 세션
fclose($stream);
curl_close($ch);
?>
이 예에서는 Curl을 사용하여 원격 파일 내용을 가져 와서 메모리 스트림에 작성한 다음 Hash_update_stream 으로 해시 값을 계산하십시오. 이 접근법은보다 복잡한 네트워크 구성 또는 제어가 필요한 상황에 적합합니다.
PHP의 hash_update_stream 함수를 사용하면 큰 파일의 해시 계산을 효율적으로 처리하여 파일을 한 번에 메모리에로드하는 것을 피할 수 있습니다. 원격 파일을 처리 할 때는 실제 요구에 따라 선택할 Fopen 또는 Curl을 선택할 수 있습니다. 이 기술을 마스터 한 후에는 파일 확인, 다운로드 확인 및 기타 시나리오를 처리하는 데 더 편안 할 수 있습니다.
이 기사가 도움이되기를 바랍니다. 질문이 있으시면 의견 섹션에서 자유롭게 토론하십시오!