현재 위치: > 최신 기사 목록> Hash_update_stream을 사용하여 동시 GZIP 압축 스트림 및 해시 스트림 작업을 처리하는 방법은 무엇입니까?

Hash_update_stream을 사용하여 동시 GZIP 압축 스트림 및 해시 스트림 작업을 처리하는 방법은 무엇입니까?

M66 2025-06-26

PHP에서 빅 데이터 파일을 처리 할 때 압축 및 해시 계산이 일반적으로 관련됩니다. Hash_update_stream은 파일이나 문자열뿐만 아니라 스트림을 해시 할 수있는 매우 유용한 기능입니다. 이러한 방식으로 파일을 압축하면서 데이터 스트림을 단계별로 처리하고 해시 값을 계산할 수 있습니다. 이는 많은 데이터 전송 및 스토리지 응용 프로그램에 매우 유용합니다.

기본 개념

  • GZIP 압축 스트림 : GZIP는 파일을 더 작은 볼륨으로 압축하는 인기있는 압축 형식이며, 많은 양의 데이터를 전송할 때 종종 대역폭 사용을 줄이는 데 사용됩니다.

  • 해시 스트림 : 해시는 모든 길이의 데이터를 고정 길이 출력에 매핑하는 알고리즘입니다. 공통 해싱 알고리즘에는 파일 체크섬 데이터 확인에 사용되는 MD5, SHA1 등이 포함됩니다.

PHP를 통해 Gzopen 과 결합 된 Hash_update_stream을 사용하여 동시에 데이터의 압축 및 해싱 계산을 달성 할 수 있습니다. 특정 단계와 코드는 다음과 같습니다.

구현 단계

  1. 입력 파일 스트림 열기 : 먼저 데이터를 읽으려면 파일 스트림이 필요합니다. 여기서 GZOPEN을 사용하여 GZIP 압축 파일 스트림을 열거 나 FOPEN을 사용하여 일반 파일 스트림을 열 수 있습니다.

  2. 해시 스트림 생성 : 그런 다음 Hash_init을 사용하여 해시 알고리즘을 초기화하고 Hash_update_stream을 사용하여 스트림 데이터를 해시 계산에 입력하십시오.

  3. 단계별 데이터 처리 : 데이터 스트림을 압축하는 동안 해시 값을 계산합니다.

  4. 닫기 스트림 : 데이터를 처리 한 후 모든 스트림을 닫고 최종적으로 해시 값을 출력해야합니다.

샘플 코드

다음은 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를 사용하여 스트림이 종료되었는지 확인하십시오.

  • 스트리밍 작업은 단계별로 점차 수행되므로 메모리 제한이 큰 대형 파일 및 환경을 처리하는 데 적합합니다.