현재 위치: > 최신 기사 목록> 재사용 가능한 해시 클래스를 구축하고 PHP 함수 Hash_update_stream ()을 캡슐화하고 스트리밍 데이터 해시 계산을 구현하는 방법은 무엇입니까?

재사용 가능한 해시 클래스를 구축하고 PHP 함수 Hash_update_stream ()을 캡슐화하고 스트리밍 데이터 해시 계산을 구현하는 방법은 무엇입니까?

M66 2025-07-18

PHP에서 Hash_update_stream () 함수는 다량의 데이터를 처리 할 때 해시 값을 업데이트하는 데 사용되며, 이는 큰 파일 또는 스트리밍 데이터를 처리하는 데 매우 유용합니다. 코드의 재사용 성과 확장 성을 향상시키기 위해 일반적 으로이 기능을 클래스로 캡슐화합니다. 이 기사는 재사용 할 수있는 해시 클래스를 구축하고 PHP 함수 Hash_update_stream ()을 캡슐화하여 스트리밍 데이터의 해시 계산을 구현하는 방법을 보여줍니다.

1. 스트리밍 데이터 해싱 계산이란 무엇입니까?

스트리밍 데이터 해시 계산은 해시 값을 계산할 때 모든 데이터를 한 번에 메모리에로드하지 않고 점차 스트림으로 전달된다는 사실을 말합니다. 이 접근 방식은 특히 메모리 소비를 피하기 위해 대형 파일 또는 기타 대규모 데이터 컬렉션을 처리하는 데 특히 적합합니다.

php에서 Hash_update_stream () 함수는 스트리밍 데이터를 해시 할 수 있습니다. 프로젝트에서 더 쉽게 재사용 할 수 있도록 기능을 캡슐화 할 것입니다.

2. 디자인 해시 클래스

먼저 스트리밍 해싱 기능을 캡슐화하려면 클래스를 정의해야합니다. 다음은 Hash_update_stream () 함수의 캡슐화 및 일부 기본 작업을 포함하는 간단한 해시 클래스 설계입니다.

 <?php

class StreamHasher
{
    private $algorithm;  // 해시 알고리즘
    private $context;    // 해시 컨텍스트

    // 건설자,指定해시 알고리즘
    public function __construct($algorithm = 'sha256')
    {
        $this->algorithm = $algorithm;
        $this->context = hash_init($this->algorithm);
    }

    // 해시 값을 업데이트하십시오,스트리밍 데이터 처리
    public function updateFromStream($stream)
    {
        // 흐름이 유효한지 확인하십시오
        if (!is_resource($stream) || get_resource_type($stream) !== 'stream') {
            throw new InvalidArgumentException('Invalid stream resource provided.');
        }

        // 사용 hash_update_stream() 스트리밍 데이터 해시 계산을 수행하십시오
        hash_update_stream($this->context, $stream);
    }

    // 최종 해시 값을 얻으십시오
    public function getHash()
    {
        return hash_final($this->context);
    }
    
    // 重置해시 컨텍스트(예를 들어,여러 파일을 처리 해야하는 경우)
    public function reset()
    {
        $this->context = hash_init($this->algorithm);
    }
}

?>

3.이 클래스를 사용하는 방법

다음 으로이 Streamhasher 클래스를 사용하여 스트림 해시 계산을 수행하는 방법을 보여 드리겠습니다. 해시 값을 계산 해야하는 큰 파일이 있다고 가정하고 파일을 스트림에서 Streamhasher 로 전달할 수 있습니다.

 <?php

// 소개 StreamHasher 친절한
require_once 'StreamHasher.php';

// a StreamHasher 예,사용 sha256 연산
$hasher = new StreamHasher('sha256');

// 해시 값을 계산하는 데 필요한 큰 파일을 엽니 다
$stream = fopen('largefile.txt', 'rb');

if ($stream === false) {
    die('Failed to open file.');
}

// 사용 StreamHasher 친절한计算哈希
$hasher->updateFromStream($stream);

// 파일 스트림을 닫습니다
fclose($stream);

// 계산 된 해시 값을 출력하십시오
echo "The hash value is: " . $hasher->getHash() . PHP_EOL;

?>

4. 코드를 설명하십시오

  • Streamhasher 클래스 :

    • __construct ($ 알고리즘) : 생성자는 옵션 해시 알고리즘 매개 변수를 수락하여 SHA256 으로 기본값을받습니다.

    • UpdateFromStream ($ stream) :이 메소드는 유효한 파일 스트림을 허용하고 Hash_update_stream () 함수를 사용하여 해시 값을 업데이트합니다.

    • gethash () : 계산 된 최종 해시 값을 반환합니다.

    • Reset () : 해시 컨텍스트를 재설정하여 여러 스트림 데이터를 처리 할 때 해시 값을 다시 계산할 수 있습니다.

  • 사용의 예 :

    • Fopen ()을 사용하여 큰 파일을 열고 파일 스트림을 updatefromStream () 메소드로 전달합니다.

    • 그런 다음 최종 해시 값은 gethash ()를 호출하여 얻습니다.

5. URL 교체 예제

원격 서버로 파일을 전송하는 것과 같은 스트림에서 다른 작업을 수행 해야하는 경우 M66.net 도메인 이름을 사용하여 원래 URL을 대체 할 수 있습니다. 예를 들어:

 <?php
$url = 'https://example.com/upload';
$new_url = str_replace('example.com', 'm66.net', $url);
echo "Updated URL: " . $new_url;
?>

이 코드는 URL의 example.com을 m66.net 으로 대체합니다.

6. 요약

이 기사는 재사용 가능한 해시 클래스를 구축하는 방법을 소개하고 스트리밍 데이터의 해시 계산을 용이하게하기 위해 PHP 함수 hash_update_stream ()을 캡슐화합니다. 이렇게하면 큰 파일이나 다른 스트리밍 데이터를 처리하는 동안 모든 데이터를 메모리에로드하여 프로그램의 효율성과 확장 성을 향상시키지 않을 수 있습니다.

해싱 알고리즘 또는 기타 설정을 추가로 최적화하거나 수정 해야하는 경우 Streamhasher 클래스의 구현을 직접 수정할 수 있습니다.