PHP에서 빅 데이터 파일을 처리 할 때 압축 및 해시 계산이 일반적으로 관련됩니다. Hash_update_stream은 파일이나 문자열뿐만 아니라 스트림을 해시 할 수있는 매우 유용한 기능입니다. 이러한 방식으로 파일을 압축하면서 데이터 스트림을 단계별로 처리하고 해시 값을 계산할 수 있습니다. 이는 많은 데이터 전송 및 스토리지 응용 프로그램에 매우 유용합니다.
GZIP 압축 스트림 : GZIP는 파일을 더 작은 볼륨으로 압축하는 인기있는 압축 형식이며, 많은 양의 데이터를 전송할 때 종종 대역폭 사용을 줄이는 데 사용됩니다.
해시 스트림 : 해시는 모든 길이의 데이터를 고정 길이 출력에 매핑하는 알고리즘입니다. 공통 해싱 알고리즘에는 파일 체크섬 데이터 확인에 사용되는 MD5, SHA1 등이 포함됩니다.
PHP를 통해 Gzopen 과 결합 된 Hash_update_stream을 사용하여 동시에 데이터의 압축 및 해싱 계산을 달성 할 수 있습니다. 특정 단계와 코드는 다음과 같습니다.
입력 파일 스트림 열기 : 먼저 데이터를 읽으려면 파일 스트림이 필요합니다. 여기서 GZOPEN을 사용하여 GZIP 압축 파일 스트림을 열거 나 FOPEN을 사용하여 일반 파일 스트림을 열 수 있습니다.
해시 스트림 생성 : 그런 다음 Hash_init을 사용하여 해시 알고리즘을 초기화하고 Hash_update_stream을 사용하여 스트림 데이터를 해시 계산에 입력하십시오.
단계별 데이터 처리 : 데이터 스트림을 압축하는 동안 해시 값을 계산합니다.
닫기 스트림 : 데이터를 처리 한 후 모든 스트림을 닫고 최종적으로 해시 값을 출력해야합니다.
다음은 GZIP 압축 스트림과 해시 스트림 작업을 모두 처리 할 때 hash_update_stream을 사용하는 방법을 보여주는 샘플 코드입니다.
<?php
// 해싱 알고리즘 설정(좋다 MD5)
$hash_algorithm = 'sha256';
// 입력 파일 스트림을 엽니 다(여기서 입력은 다음과 같습니다 gzip 문서)
$input_file = 'example.txt.gz';
$gzip_stream = gzopen($input_file, 'rb');
// 해시 컨텍스트를 만듭니다
$hash_context = hash_init($hash_algorithm);
// 打开输出문서流(여기서는 출력이 있다고 가정합니다 gzip 압축 스트림)
$output_file = 'output_compressed.gz';
$output_stream = gzopen($output_file, 'wb');
// 단계별 데이터를 읽고 처리하십시오
while (!gzeof($gzip_stream)) {
// 데이터를 읽으십시오
$data = gzread($gzip_stream, 4096);
// 해시 값을 업데이트하십시오
hash_update_stream($hash_context, $data);
// 압축 데이터를 작성하십시오
gzwrite($output_stream, $data);
}
// 关闭문서流
gzclose($gzip_stream);
gzclose($output_stream);
// 최종 해시 값을 얻으십시오
$final_hash = hash_final($hash_context);
// 출력 해시 값
echo "The hash of the gzipped data is: " . $final_hash . "\n";
?>
GZOPEN : GZIP 압축 파일 스트림을 열는 데 사용됩니다. 여기서 우리는 example.txt.gz 라는 파일을 읽고 gzread를 통해 그 내용을 지속적으로 읽습니다.
HASH_INIT : 해시 알고리즘 (예 : SHA256)을 초기화합니다.이 도구는 파일 컨텐츠의 해시 값을 계산하는 데 사용할 도구입니다.
Hash_update_stream : 해시 계산을 위해 각 데이터 조각을 해시 컨텍스트로 전달하십시오.
GZWRITE : 압축 파일 스트림에 데이터를 쓰십시오. 여기서 GZWRITE를 통해 원본 데이터를 새 GZIP 파일에 씁니다.
GZCLOSE : 작업이 완료된 후 시스템 리소스를 확보하려면 파일 스트림을 닫아야합니다.
HASH_FINAL : 해시 계산을 완료하고 최종 해시 값을 출력하십시오.
이 방법은 큰 파일 또는 스트리밍 데이터를 처리하는 데 적합합니다. 특히 네트워크 전송 또는 스토리지 중에 데이터 압축 및 검증이 필요한 시나리오에서. 예를 들어, GZIP 압축 파일을 다운로드하고 동시에 파일 무결성 검증을 수행하거나 많은 양의 데이터를 압축에 저장하고 해시 값을 계산하십시오.
이러한 방식으로 데이터를 효율적으로 압축 할뿐만 아니라 전송 및 스토리지 중 데이터의 무결성을 보장 할 수 있습니다.
적절한 해싱 알고리즘을 사용하십시오. MD5와 SHA1은 모두 일반적인 선택이지만 안전하고 민감한 응용 분야에 적합하지 않으며 SHA256 또는 더 강한 알고리즘이 권장됩니다.
스트림 데이터를 읽을 때 스트림의 끝을 처리하고 gzeof를 사용하여 스트림이 종료되었는지 확인하십시오.
스트리밍 작업은 단계별로 점차 수행되므로 메모리 제한이 큰 대형 파일 및 환경을 처리하는 데 적합합니다.