PHPでストリームを処理する場合、カスタマイズされたバッファリングを実装するためにデータブロック(バケット)の読み取りなど、より基礎となるストリームのデータを操作する必要がある場合があります。 PHPのストリームフィルターメカニズムは、 Stream_Bucket_Make_Writableがストリームのバッファーからデータブロックを取得できる重要な関数であり、それらを読み取り、操作できる強力なインターフェイスを提供します。
この記事では、 Stream_Bucket_Make_Writeableの役割、PHPストリームのデータブロックの読み取り方法、および実用的な例を介して特定のアプリケーションを実証する方法を詳細に紹介します。
Stream_Bucket_Make_Writableは、PHP Streamフィルター関連の機能であり、 PHP_STREAM_BUCKET構造の操作インターフェイスに属します。その機能は、ストリームの内部バッファーからデータブロック(バケット)を「取り出す」ことで、書き込み可能なバケットオブジェクトを返します。このバケットには、現在利用可能なデータが含まれており、直接読み取ったり変更できます。
この関数は、カスタムストリームフィルターの実装で一般的に使用されているため、開発者が圧縮、暗号化、デコード、その他の操作などのストリーミングデータを細かく制御できるようになります。
stream_bucket_make_writableを使用してデータブロックを読み取るには、ほぼ次の手順が必要です。
カスタムフローフィルターを作成して登録します<br> フローフィルタークラスは、 php_user_filterを継承し、フィルターメソッドをオーバーライドする必要があります。
Stream_bucket_make_writeable内部フィルターメソッドを呼び出します
この関数を通してバケツを取得して、データからデータを読み取ります。
読み取りデータブロックの処理<br> データを読み取り、変更、または次のフィルターに渡すことができます。
処理結果を返し、フィルター操作を完了します
次の例は、シンプルなカスタムストリームフィルターを定義し、フィルターメソッドでstream_bucket_make_writableを介してデータブロックを読み取り、内容を印刷する方法を示しています。
<?php
class MyReadFilter extends php_user_filter {
public function filter($in, $out, &$consumed, $closing) {
// すべてのデータブロックをループします
while ($bucket = stream_bucket_make_writeable($in)) {
// 読む bucket データ
$data = $bucket->data;
// 这里我们简单打印読む到的数据
echo "読む数据块内容: " . $data . "\n";
// マーカーで消費されるバイト数
$consumed += $bucket->datalen;
// 意思 bucket 次のフィルターまたは出力ストリームに渡します
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
// カスタムフィルターを登録します
stream_filter_register("myreadfilter", "MyReadFilter") or die("Failed to register filter");
// 使用の例:从文件流中読む数据并应用过滤器
$fp = fopen("gitbox.net/sample.txt", "r");
// カスタムフィルターをストリームに接続します
stream_filter_append($fp, "myreadfilter", STREAM_FILTER_READ);
// 読む文件内容,フィルターをトリガーします filter 方法
while (!feof($fp)) {
fread($fp, 8192);
}
fclose($fp);
?>
Stream_bucket_make_writable($ in) :入力バケットリストからバケツを取り出して返品します。返されたバケットオブジェクトには、プロパティデータ(String Data)とDatalen (データの長さ)が含まれています。
データを読んだ後、 Stream_bucket_append($ out、$ bucket)を呼び出して、バケットを出力チェーンに渡して、ストリーム処理チェーンの通常の実行を確保する必要があります。
$消費されたのは、ストリームフィルターに消費されるデータブロックの数を伝えるために使用され、ストリームバッファの管理に影響します。
通常、フィルターの戻り値は、 psfs_pass_onを使用して通常のデータ送信を示すために使用されます。
Stream_bucket_make_writableは、PHPストリームフィルターメカニズムでストリームデータブロックを読み取るためのコアインターフェイスであり、開発者がストリームバッファーでデータを直接操作できるようにします。カスタムストリームフィルターを介して、リアルタイム圧縮、暗号化、ログモニタリングなど、複雑なデータ処理ロジックを実装できます。
ストリームの基礎となるデータブロック操作をマスターすると、大規模なファイルとネットワークストリーミングデータを処理する際に、より柔軟性とパフォーマンスを高めることができます。
開発中にストリーム操作でパフォーマンスボトルネックに遭遇したり、ストリームで細かいデータ処理を実行する必要がある場合は、 Stream_Bucket_Make_Writableおよび関連するストリームフィルターAPIを詳細に学習および適用することをお勧めします。