PHP에서 Hash_update_stream () 함수를 사용하면 생성 된 해시 컨텍스트를 업데이트 할 수 있습니다. 정적 데이터와 달리 스트리밍 데이터는 매우 커지거나 한 번에 메모리에로드 할 수 없으므로 스트리밍을 사용하는 것이 매우 중요합니다. 이 기사에서는 스트리밍 데이터를 처리하기 위해 zip : // 또는 php : // 필터 와 함께 hash_update_stream () 함수를 사용하는 방법을 소개합니다.
Hash_update_stream ()은 파일 또는 네트워크 데이터 스트림과 같은 스트리밍 데이터를 처리하여 해시 컨텍스트를 업데이트하는 PHP의 해시 함수입니다. 사용량은 다음과 같습니다.
hash_update_stream ( resource $context , resource $handle [, int $length = 1024 ] ) : bool
$ 컨텍스트 : 이것은 hash_init () 에 의해 생성 된 해시 컨텍스트입니다.
$ 핸들 : 파일 핸들 또는 기타 스트림 유형과 같이 스트림에서 읽어야하는 데이터 스트림 리소스입니다.
$ 길이 : 이것은 시간당 읽는 바이트 수입니다. 기본값은 1024 바이트입니다.
PHP에서 Zip : //는 ZIP 파일에서 데이터 스트림을 직접 읽는 특수 프로토콜입니다. 압축 파일을 해시 해야하는 경우 zip : // 프로토콜을 통해 파일 컨텐츠에 액세스하고 Hash_update_stream ()을 사용하여 스트리밍 데이터를 처리 할 수 있습니다.
zip 파일 example.zip이 있고 file.txt 라는 텍스트 파일이 포함되어 있다고 가정합니다. 다음 코드를 사용할 수 있습니다.
<?php
// 해시 컨텍스트를 만듭니다
$hashContext = hash_init('sha256');
// 사용 zip:// 프로토콜 읽기 ZIP 파일에서 데이터가 흐릅니다
$zipStream = fopen('zip://example.zip#file.txt', 'r');
if ($zipStream) {
// 해시 값을 업데이트하십시오
while (!feof($zipStream)) {
hash_update_stream($hashContext, $zipStream);
}
fclose($zipStream);
// 최종 해시 값을 얻으십시오
$hashValue = hash_final($hashContext);
echo "SHA-256 Hash of the file: " . $hashValue;
} else {
echo "파일을 열 수 없습니다!";
}
?>
PHP : // 필터는 입력 스트림을 필터링 할 수있는 매우 강력한 스트림 캡슐화입니다. 예를 들어, php : // 필터를 통해 데이터를 압축, 압축 압축 또는 변환 할 수 있습니다. hash_update_stream () 과 결합하여 어떤 종류의 필터로 처리 된 스트리밍 데이터를 해시 할 수 있습니다.
php : // 필터를 통해 텍스트 파일의 해시 값을 읽고 계산하려고한다고 가정하지만 동시에 데이터에서 문자 변환을 수행하십시오. 다음은 php : // 필터를 사용하여 convert.iconv.utf-8/iso-8859-1을 통해 변환 된 스트림을 읽고 해시를 계산하는 방법을 보여주는 예입니다.
<?php
// 해시 컨텍스트를 만듭니다
$hashContext = hash_init('md5');
// 사용 php://filter 문자 인코딩을 읽고 변환합니다
$filteredStream = fopen('php://filter/read=convert.iconv.UTF-8/ISO-8859-1/resource=example.txt', 'r');
if ($filteredStream) {
// 해시 값을 업데이트하십시오
while (!feof($filteredStream)) {
hash_update_stream($hashContext, $filteredStream);
}
fclose($filteredStream);
// 최종 해시 값을 얻으십시오
$hashValue = hash_final($hashContext);
echo "MD5 Hash of the file after conversion: " . $hashValue;
} else {
echo "파일을 열 수 없습니다!";
}
?>
hash_update_stream () 함수를 zip : // 또는 php : // 필터 프로토콜과 결합하면 압축 파일 또는 처리 된 스트리밍 데이터를 유연하게 해시 할 수 있습니다. Hash_update_stream () 의 스트리밍 처리 기능은 데이터 볼륨이 매우 크면 너무 많은 메모리를 소비하지 않고 해시 값을 효율적으로 계산할 수 있습니다. zip 파일에서 데이터를 읽거나 스트림에서 문자 인코딩 변환 적용에 관계없이 Hash_update_stream ()은 이러한 시나리오를 처리하는 간단하고 효율적인 방법을 제공합니다.