현재 위치: > 최신 기사 목록> php : // stdin 및 hash_update_stream () 명령 줄 처리를 사용하십시오

php : // stdin 및 hash_update_stream () 명령 줄 처리를 사용하십시오

M66 2025-05-27

PHP에서 큰 파일을 처리 할 때 해시 계산을 위해 전체 파일을 메모리에 직접로드하면 특히 파일이 매우 큰 경우 많은 메모리 리소스가 필요할 수 있습니다. 이 문제를 해결하기 위해 PHP는 php : // stdin stream 및 hash_update_stream () 함수를 제공합니다. 이 둘의 조합은 스트리밍 해시 처리, 즉 메모리 오버플로를 피하기 위해 파일 컨텐츠를 읽는 동안 해시 계산을 구현할 수 있습니다.

이 기사는 명령 줄에서 해시 계산을 스트리밍하기 위해이 두 가지 도구를 사용하는 방법, 특히 큰 파일로 작업 할 때 해시 값을 효율적으로 계산하는 방법을 보여줍니다.

1. 준비

먼저 PHP를 설치하고 명령 줄에서 PHP 스크립트를 실행할 수 있는지 확인하십시오. 다음 명령을 따라 PHP가 올바르게 설치되는지 확인할 수 있습니다.

 php -v

PHP를 설치하지 않은 경우 http://m66.net/download/php에서 PHP를 다운로드하여 설치할 수 있습니다.

다음으로 PHP의 내장 PHP : // stdin 스트림을 사용하여 표준 입력을 읽고 해시 계산을 위해 hash_update_stream () 함수를 결합합니다.

2. 스트리밍 해싱을 위해 php : // stdinhash_update_stream ()을 사용하십시오

php : // stdin 소개

php : // stdin 은 표준 입력 (일반적으로 명령 줄의 입력 스트림)에서 데이터를 읽을 수있는 특수 스트림입니다. 전체 데이터를 메모리에로드하지 않고 큰 파일이나 라이브 입력 스트림을 처리하는 데 사용될 수 있습니다.

hash_update_stream () 함수

hash_update_stream () 함수는 해시 값을 계산하기 위해 PHP가 사용하는 함수 중 하나입니다. 일반 해시 _update () 함수와 달리 스트림을 통해 해시 값을 직접 업데이트 할 수 있으므로 빅 데이터를 처리 할 때 특히 유용합니다.

기능 프로토 타입 :

 bool hash_update_stream ( resource $context , resource $stream [, int $length = 8192 ] )
  • $ 컨텍스트 : hash_init () 에 의해 생성 된 해시 컨텍스트.

  • $ stream : 해시를 계산하는 데 사용되는 스트림 (우리의 경우 php : // stdin ).

  • $ 길이 : 한 번에 읽는 최대 바이트 수 (기본값은 8192 바이트)입니다.

3. 샘플 코드

다음은 해시 계산 스트리밍을 위해 php : // stdinhash_update_stream ()을 사용하는 방법을 보여주는 간단한 예입니다.

예 : 표준 입력에서 해시를 읽고 계산합니다

 <?php

// a SHA256 해시 컨텍스트
$context = hash_init('sha256');

// 열려 있는 php://stdin 흐름
$stream = fopen('php://stdin', 'r');

// 각각 읽습니다 8192 바이트의 데이터 및 해시 값을 업데이트합니다
while (!feof($stream)) {
    $data = fread($stream, 8192);
    hash_update_stream($context, $data);
}

// 최종 해시 값을 계산하십시오
$hash = hash_final($context);

// 계산 된 해시 값을 출력하십시오
echo "계산 된 해시 값은입니다:$hash\n";

// 关闭흐름
fclose($stream);

?>

작동 모드

  1. 위의 코드를 hash_stdin.php 로 저장하십시오.

  2. 명령 줄에서 해시 계산을 위해 스크립트에 파이프 데이터를 스크립트로 연결합니다. 예를 들어 파일을 읽고 SHA256 해시를 계산하십시오.

 cat largefile.txt | php hash_stdin.php

또는 입력하여 해시 계산을 직접 가질 수 있습니다.

 echo "Hello, World!" | php hash_stdin.php

4. 코드 설명

  1. 해시 컨텍스트 생성 :
    hash_init ( 'SHA256')를 사용하여 SHA256 해시 컨텍스트를 만듭니다. 'SHA256'을 MD5 , SHA1 등과 같은 다른 지원되는 해싱 알고리즘으로 바꿀 수 있습니다.

  2. 표준 입력 스트림을 여는 것 :
    fopen ( 'php : // stdin', 'r')은 표준 입력을 가리키는 스트림을 엽니 다. 이렇게하면 명령 줄에서 입력 데이터를 읽을 수 있습니다.

  3. 해시를 읽고 업데이트하십시오.
    fread ()를 사용하여 블록별로 데이터 블록을 읽은 다음 (매번 8192 바이트를 읽습니다) Hash_update_stream ()을 사용하여 해시 계산을 업데이트하십시오.

  4. 최종 해시 값 계산 :
    파일을 읽으면 Hash_Final ()을 호출하여 최종 해시 값을 계산하고 얻습니다.

  5. 출력 해시 값 :
    에코를 사용하여 계산 된 해시 값을 명령 줄에 출력하십시오.

5. 해당 시나리오

  • 대형 파일 처리 : php : // stdinhash_update_stream ()을 사용하는 것은 메모리에 완전히로드하지 않고 큰 파일을 처리해야 할 때 이상적인 솔루션입니다. 데이터를 단계별로 읽고 해시 계산을 수행 할 수 있습니다.

  • 실시간 데이터 스트림 : 네트워크 연결 또는 센서 장치에서 얻은 데이터 스트림과 같은 실시간 데이터 스트림을 해시 해야하는 경우에도 가능합니다.

6. 주목할만한 것들

  • 매우 큰 파일을 처리 할 때는 읽기 ( 길이 )의 수가 합리적으로 설정되어 있는지 확인하십시오. 기본적으로 Fread ()는 한 번에 최대 8192 바이트의 데이터를 읽으며 필요한 경우 성능을 향상시키기 위해 더 큰 값으로 조정할 수 있습니다.

  • 스트리밍을 사용할 때는 리소스 누출을 피하기 위해 작업이 완료된 후에 스트리밍 자원을 항상 닫으십시오.

7. 결론

php : // stdinhash_update_stream () 을 결합하면 대형 파일 또는 실시간 데이터 스트림의 해시 계산을 매우 효율적으로 처리 할 수 ​​있습니다. 이 메소드는 메모리를 저장할뿐만 아니라 명령 줄에서 간단하고 빠른 해시 계산을 허용합니다. 거대한 파일 또는 스트리밍 데이터를 작업하는 경우이 스트리밍 방법을 적극 권장합니다.

이 기사가 명령 줄에서 스트리밍을 위해 PHP를 사용하는 방법을 이해하는 데 도움이되기를 바랍니다. 질문이나 추가 질문이 있으시면 언제든지 물어보십시오!