現在の位置: ホーム> 最新記事一覧> カールを組み合わせてストリームを読み取り、ハッシュ値を動的に計算します

カールを組み合わせてストリームを読み取り、ハッシュ値を動的に計算します

M66 2025-05-27

PHPでは、 HASH_UPDATE_STREAM関数は、特にストリームデータを処理する場合、ハッシュ値を動的に更新する方法です。 Curlと組み合わせることで、大きなファイルをダウンロードしたり、データをストリーミングしたりするときに、リアルタイムでハッシュ値の計算を実現できます。この記事では、これを達成するためにhash_update_streamcurlを使用する方法について説明します。

1。Hash_update_streamとは何ですか?

hash_update_stream関数は、phpの組み込みハッシュ関数の1つであり、ハッシュ計算を徐々に更新するために使用されます。これは、大量のデータストリームを処理すると、ファイル全体をメモリにロードせずにファイルのハッシュ値を徐々に計算できることを意味します。その構文は次のとおりです。

 bool hash_update_stream ( resource $context , resource $stream )
  • $コンテキストhash_init()を使用して初期化されたハッシュコンテキストリソース。

  • $ stream :通常、ファイルまたはネットワークストリームを介して作成されたデータストリームのリソース。

2。カールとは何ですか?

Curlは、URLを介してさまざまなネットワークリソースと対話できる強力なPHP拡張機能です。 Curlを介して、リクエストをサーバーに送信して応答を受信でき、HTTP、HTTPS、FTPなどの複数のプロトコルをサポートできます。アプリケーションシナリオでは、 CURLを使用してリモートリソースをダウンロードし、データストリームをHASH_UPDATE_STREAM関数に渡すことができます。

3。例: hash_update_streamcurlを使用してハッシュ値を動的に計算する

この例では、 Curlを使用してファイルを動的にダウンロードし、 Hash_update_stream関数と組み合わせてファイルのハッシュ値をリアルタイムで計算します。

ステップ1:ハッシュコンテキストを初期化します

まず、ハッシュコンテキストを初期化する必要があります。 SHA256など、一般的に使用されるハッシュアルゴリズムを選択できます。

 $hashContext = hash_init('sha256'); // 初期化 sha256 ハッシュコンテキスト

ステップ2:カールセッションを初期化します

次に、 Curlを使用してセッションを初期化し、対応するオプションを設定してリモートファイルのデータストリームを取得します。

 $url = "http://example.com/largefile"; // ダウンロードするファイル URL
$ch = curl_init($url); // 初期化 curl セッション

// 設定 curl オプション
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 直接出力の代わりに応答を返します
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // リダイレクトをサポートします
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁止する SSL 証明書の確認(自己署名証明書に適しています)

// ファイルストリームを開いてデータを取得します
$stream = curl_exec($ch);

ステップ3:ストリームを動的に読み取り、ハッシュ値を更新します

これで、 hash_update_stream関数を使用して、 curlによって取得されたデータストリームを渡してリアルタイムハッシュ計算を実行できます。

 if ($stream) {
    $fp = fopen('php://memory', 'r+'); // メモリストリームを作成します
    fwrite($fp, $stream); // ダウンロードされたコンテンツをメモリストリームに書き込みます
    rewind($fp); // ストリームポインターを開始位置に戻します

    // 使用 hash_update_stream ハッシュ値を動的に更新します
    hash_update_stream($hashContext, $fp); 

    fclose($fp); // ストリームを閉じます
}

ステップ4:ハッシュ計算を完了します

最後に、 hash_final()を介して最終的なハッシュ値を取得できます。