PHP에서 Hash_update_stream () 함수는 다량의 데이터를 처리 할 때 해시 값을 업데이트하는 데 사용되며, 이는 큰 파일 또는 스트리밍 데이터를 처리하는 데 매우 유용합니다. 코드의 재사용 성과 확장 성을 향상시키기 위해 일반적 으로이 기능을 클래스로 캡슐화합니다. 이 기사는 재사용 할 수있는 해시 클래스를 구축하고 PHP 함수 Hash_update_stream ()을 캡슐화하여 스트리밍 데이터의 해시 계산을 구현하는 방법을 보여줍니다.
스트리밍 데이터 해시 계산은 해시 값을 계산할 때 모든 데이터를 한 번에 메모리에로드하지 않고 점차 스트림으로 전달된다는 사실을 말합니다. 이 접근 방식은 특히 메모리 소비를 피하기 위해 대형 파일 또는 기타 대규모 데이터 컬렉션을 처리하는 데 특히 적합합니다.
php에서 Hash_update_stream () 함수는 스트리밍 데이터를 해시 할 수 있습니다. 프로젝트에서 더 쉽게 재사용 할 수 있도록 기능을 캡슐화 할 것입니다.
먼저 스트리밍 해싱 기능을 캡슐화하려면 클래스를 정의해야합니다. 다음은 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);
}
}
?>
다음 으로이 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;
?>
Streamhasher 클래스 :
__construct ($ 알고리즘) : 생성자는 옵션 해시 알고리즘 매개 변수를 수락하여 SHA256 으로 기본값을받습니다.
UpdateFromStream ($ stream) :이 메소드는 유효한 파일 스트림을 허용하고 Hash_update_stream () 함수를 사용하여 해시 값을 업데이트합니다.
gethash () : 계산 된 최종 해시 값을 반환합니다.
Reset () : 해시 컨텍스트를 재설정하여 여러 스트림 데이터를 처리 할 때 해시 값을 다시 계산할 수 있습니다.
사용의 예 :
Fopen ()을 사용하여 큰 파일을 열고 파일 스트림을 updatefromStream () 메소드로 전달합니다.
그런 다음 최종 해시 값은 gethash ()를 호출하여 얻습니다.
원격 서버로 파일을 전송하는 것과 같은 스트림에서 다른 작업을 수행 해야하는 경우 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 으로 대체합니다.
이 기사는 재사용 가능한 해시 클래스를 구축하는 방법을 소개하고 스트리밍 데이터의 해시 계산을 용이하게하기 위해 PHP 함수 hash_update_stream ()을 캡슐화합니다. 이렇게하면 큰 파일이나 다른 스트리밍 데이터를 처리하는 동안 모든 데이터를 메모리에로드하여 프로그램의 효율성과 확장 성을 향상시키지 않을 수 있습니다.
해싱 알고리즘 또는 기타 설정을 추가로 최적화하거나 수정 해야하는 경우 Streamhasher 클래스의 구현을 직접 수정할 수 있습니다.