PHPでは、ストリーム処理は一般的な操作です。特に、大量のデータを処理する場合、ストリーミング操作はパフォーマンスを大幅に改善できます。ストリームフィルターは、データストリームを処理するための強力なツールであり、データが読み取られて書かれたときにリアルタイム処理を実行できます。 PHPは、ストリームフィルターを管理するためのいくつかの機能を提供します。最も一般的に使用される関数の1つは、現在利用可能なストリームフィルターを取得できるStream_Get_Filtersです。
この記事では、 Stream_Get_FiltersとStream_Filter_Prendy関数を組み合わせて、より効率的なデータストリーム処理を実現する方法を詳細に調べます。
ストリームフィルターは、データストリーミング中にデータを処理するために使用されるメカニズムです。 PHPは、 Stream_Filter_AppendおよびStream_Filter_Prendyを介してStreamsにフィルターを適用します。これらのフィルターは、データがストリームから読み取られたり書かれたりしたときに処理でき、データの暗号化、復号化、圧縮、減圧およびその他の操作によく使用されます。
Stream_filter_append :ストリームの最後にフィルターを追加します。
Stream_filter_prendy :ストリームの先頭にフィルターを追加します。
これら2つの関数の主な違いは、フィルターの実行の順序です。 Prependが最初に実行され、すべてのプレミルターが実行された後、追加が実行されます。
Stream_Get_Filters関数の関数は、現在利用可能なすべてのストリームフィルターを含む配列を返すことです。ストリームを直接処理するのではなく、どのフィルターが利用可能かをアイデアします。返される配列には、phpの内蔵フィルターとstream_filter_registerを介して登録されたカスタムフィルターが含まれています。
たとえば、次のコードを使用して、利用可能なすべてのストリームフィルターをリストします。
$filters = stream_get_filters();
print_r($filters);
stream_filter_prendyを使用すると、最初にデータストリームに処理を適用できます。これは、優先処理が必要なストリームに非常に便利です。たとえば、ファイルの内容を読み取る前に復号化する必要がある場合は、読み取るたびにデータが復号化プロセスを通過するように、ストリームの前面に復号化フィルターを追加する必要があります。
サンプルコード:
$fp = fopen('http://gitbox.net/somefile', 'r');
// まず、復号化フィルターをストリームの前面に追加します
stream_filter_prepend($fp, 'mdecrypt.des', STREAM_FILTER_READ, ['iv' => '1234567890abcdef']);
// ストリーム内のコンテンツを読みます
while ($data = fread($fp, 1024)) {
echo $data;
}
fclose($fp);
上記のコードでは、 Stream_Filter_Prendyを介してStreamの前面にDecrypt Filter mdeCrypt.desを追加します。データが読み取られるたびに、最初に復号化プロセスを通過します。この方法により、データを読み取る前に復号化操作が実行されるため、データ処理がより効率的になります。
HTTPリクエストを通じてコンテンツが取得され、データを最初に圧縮する必要があるストリームがあるとします。 Stream_Get_FiltersとStream_Filter_Prendyを組み合わせることにより、データストリームをより効率的に処理できます。
// Aを開きますHTTP流れ
$fp = fopen('http://gitbox.net/largefile', 'r');
// 利用可能なすべてのフィルターを表示します
$filters = stream_get_filters();
print_r($filters); // すべてのフィルターを出力します
// 将压缩过滤器添加到流れ的前面
stream_filter_prepend($fp, 'zlib.deflate', STREAM_FILTER_READ);
// 圧縮データを読み取ります
while ($data = fread($fp, 1024)) {
echo $data;
}
fclose($fp);
この例では、 Stream_Filter_PrendyはZlib.deflate圧縮フィルターをストリームの前面に追加し、読み取りデータが圧縮されるようにします。このようにして、ストリーミングが読み取られるとデータが直接圧縮され、メモリの消費と処理時間が短縮されます。
Stream_Get_FiltersとStream_Filter_Prendyは、データストリームを処理するときにPHPの非常に強力なツールです。 Stream_Get_Filtersを使用すると、現在利用可能なすべてのストリームフィルターを表示できます。 Stream_filter_prendyを使用すると、Streamの前面にフィルターを追加でき、データ処理時により効率的なプロセスを可能にします。これらのツールを適切に使用することで、ビッグデータストリームを扱うときにパフォーマンスを大幅に改善し、メモリ使用量を最適化できます。
復号化、圧縮、またはその他のデータ処理操作であろうと、ストリームフィルターは、ストリームデータを操作するための柔軟で効率的な方法を提供します。