hash_update_stream()は、データストリームをハッシュするために使用されるphpの関数です。この関数は、PHPのハッシュ拡張の一部であり、大量のデータをハッシュするときに計算するためのより効率的な方法を提供します。この関数は通常、データ全体を一度に読み取るのではなく、ハッシュ値を段階的に更新する必要があるシナリオで使用されます。
hash_update_stream()関数は、データストリームを処理することにより、ハッシュ値を徐々に更新します。これは、すべてのデータをメモリにロードせずにブロックごとにブロックおよび更新されたハッシュごとにデータを読み取ることができるため、大きなファイルの処理やネットワークストリームからデータを取得するのに非常に効果的です。この関数は通常、 hash_init()およびhash_final()と組み合わせて使用して、ハッシュ計算プロセスを完了します。
bool hash_update_stream ( resource $context , resource $stream [, int $length ] )
$コンテキスト: hash_init()関数によって初期化されたハッシュコンテキストリソースです。
$ stream :データを読むためのストリームリソースは、ファイルストリーム、ネットワークストリームなどです。
$ length :オプションのパラメーター、読み取るバイト数を指定します。
HASH_UPDATE_STREAM()関数は、複数のタイプのリソースを処理するために使用できます。以下は、この関数によってサポートされるリソースタイプです。
ファイルフローリソース
これは最も一般的なリソースタイプであり、ファイル読み取り操作に適しています。 fopen()やfile_get_contents()などの関数を介してファイルストリームを開き、 hash_update_stream()関数に渡すことができます。このようにして、関数はファイルのコンテンツを徐々に読み取り、ハッシュ値を更新します。
サンプルコード:
$file = fopen('http://m66.net/somefile.txt', 'r'); // ファイルストリームを開きます
$hash_context = hash_init('sha256'); // ハッシュコンテキストを初期化します
hash_update_stream($hash_context, $file); // ハッシュを更新します
fclose($file); // ファイルストリームを閉じます
ネットワークフローリソース
Hash_update_stream()は、ネットワークリソースストリームからのハッシュ値の更新もサポートしています。このリソースタイプは、FOPEN()関数を介してネットワーク接続を開くことができます。たとえば、HTTPストリームを開いて、データを段階的に読み取ることができます。
サンプルコード:
$url = 'http://m66.net/somefile.txt';
$stream = fopen($url, 'r'); // 開けるURL流れ
$context = hash_init('sha256'); // ハッシュコンテキストを初期化します
hash_update_stream($context, $stream); // 逐步ハッシュを更新します值
fclose($stream); // ストリームを閉じますれ
標準の入力ストリーム
コマンドラインでは、PHPは標準の入力ストリームを処理できます。 Hash_update_stream()は、標準の入力ストリーム( php:// stdinを介して取得したストリームなど)のハッシュ更新もサポートしています。
サンプルコード:
$stdin = fopen('php://stdin', 'r'); // 開ける标准输入流れ
$context = hash_init('sha256'); // ハッシュコンテキストを初期化します
hash_update_stream($context, $stdin); // 逐步ハッシュを更新します值
fclose($stdin); // 標準の入力ストリームを閉じますれ
メモリストリーム(php:// tempまたはphp://メモリ経由)
PHPのメモリストリーミングリソースを使用することもできます(たとえば、php:// tempまたはphp://メモリなど)。これらのストリームは一時的なデータを保存でき、少量から中程度のデータの処理に最適です。
サンプルコード:
$memory_stream = fopen('php://temp', 'r+'); // 開ける内存流れ
fwrite($memory_stream, 'Hello, this is a test string.');
rewind($memory_stream); // 重置流れ指针到开始位置
$context = hash_init('sha256'); // ハッシュコンテキストを初期化します
hash_update_stream($context, $memory_stream); // 逐步ハッシュを更新します值
fclose($memory_stream); // メモリストリームを閉じますれ
hash_update_stream()関数は、ファイルストリーム、ネットワークストリーム、標準入力ストリーム、メモリストリームなど、さまざまな種類のストリームリソースを処理できます。ディスクからファイルを読み取るか、ネットワークからデータを取得するか、メモリ内の一時データを処理しているかにかかわらず、この関数を使用してハッシュ値を徐々に更新できます。これにより、大規模なファイルを処理したり、データストリームをリアルタイムで取得したりすると、非常に効率的かつ効率的になります。