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($ algorithm) :コンストラクターは、 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クラスの実装を直接変更できます。