【PHP8.x】hash_update_stream関数の使い方
作成日: 更新日:
hash_update_stream関数は、指定されたストリームからデータを読み込み、その内容を使ってハッシュコンテキストを更新する関数です。この関数は、特にファイルなどの大容量のデータからハッシュ値を計算する際に非常に有用です。データをメモリにすべて読み込むことなく、ストリームから少しずつデータを読み込んでハッシュ計算の状態(ハッシュコンテキスト)を逐次的に更新できるため、メモリ使用量を抑えながら効率的に処理を実行できます。
利用する際は、まずhash_init()
関数でハッシュ計算のためのコンテキストを初期化します。次に、このhash_update_stream()
関数に、初期化されたハッシュコンテキストと、データ源となるストリームリソース(例えば、fopen()
で開かれたファイルハンドルなど)を渡します。オプションとして、ストリームから読み込むバイト数を指定することも可能で、これを省略した場合はストリームの終端まですべてのデータが読み込まれます。
最終的なハッシュ値を取得するためには、この関数による更新後にhash_final()
関数を使用します。hash_update_stream()
関数は、更新処理が成功した場合はtrue
を、何らかの理由で失敗した場合はfalse
を返します。これにより、大規模なデータソースに対して安全かつ効率的なハッシュ計算を実現できます。
基本的な使い方
構文(syntax)
<?php
$context = hash_init('sha256');
$stream = fopen('php://temp', 'r+');
fwrite($stream, 'Hello, PHP!');
rewind($stream); // ストリームのポインタを先頭に戻す
$bytes_updated = hash_update_stream($context, $stream);
fclose($stream);
echo hash_final($context);
?>
引数(parameters)
HashContext $context, resource $stream, int $length = -1
- HashContext $context: ハッシュ計算のコンテキストを指定するHashContextオブジェクト
- resource $stream: ハッシュ計算の対象となるストリームリソース
- int $length = -1: ストリームから読み込むバイト数を指定する整数。-1を指定すると、ストリームの終端まで全て読み込みます。
戻り値(return)
int
ハッシュコンテキストにデータチャンクを更新したバイト数を返します。