PHPでは、ストリームフィルターは、ファイルストリームまたは他のタイプのデータストリームを処理するための非常に強力で柔軟な方法を提供します。フローフィルターを介して、入力データをリアルタイムで処理および変更できます。この記事では、 FOPENと組み合わせてStream_Get_Filters関数を使用してストリームフィルターの関数を実装する方法を詳細に検討します。
ストリームフィルターは、ファイルストリームまたはその他のストリームデータを処理するためにPHPが提供するメカニズムです。ストリームを読んだり書いたりするときにデータをフィルタリングできます。たとえば、ストリームフィルターを使用して、データ圧縮、暗号化、変換をエンコードする文字エンコードなどを実装できます。
PHPは、次のようなさまざまな内蔵ストリームフィルターを提供します。
Zlib.Inflate (減圧)
zlib.deflate (圧縮)
string.toupper (テキストを大文字に変換)
Stream_Get_Filtersは、現在利用可能なストリームフィルターのリストを返すPHPで非常に便利な機能です。それを使用して、後続のコードで使用するためにどのフィルターがPHPにロードされたかを確認できます。
array stream_get_filters ( void )
この関数にはパラメーターがありません。
利用可能なすべてのストリームフィルターを含む配列を返します。
Fopenは、ファイルストリームを開くためのPHPの関数です。これにより、読み取り、執筆、アプリェングなど、ファイルを開くさまざまなモードを指定できます。ファイルを開くと、 Stream_Filter_Append関数を介してStreamフィルターをファイルストリームに添付して、ファイルデータのリアルタイム処理を行うことができます。
resource fopen ( string $filename , string $mode )
resource stream_filter_append ( resource $stream , string $filtername , int $read_write [, mixed $params ] )
以下に、 Stream_Get_Filtersを使用する方法を示し、簡単な例を使用してStreamフィルターと組み合わせてFopenを示します。ファイル内のすべてのテキストを、 string.toupperストリームフィルターを介して大文字に変換します。
<?php
// 利用可能なすべてのストリームフィルターを取得します
$filters = stream_get_filters();
echo "利用可能なフローフィルター:\n";
print_r($filters);
// ファイルを開きます
$filename = "test.txt";
$file = fopen($filename, 'r+');
// 意思 'string.toupper' ストリームフィルターはファイルストリームに適用されます
stream_filter_append($file, 'string.toupper');
// ファイルを読み、コンテンツを出力します(内容意思被转换为大写)
while (($line = fgets($file)) !== false) {
echo $line;
}
// ファイルストリームを閉じます
fclose($file);
?>
まず、 Stream_Get_Filtersを使用して、利用可能なすべてのストリームフィルターを取得して出力します。
次に、 FOPENを介してファイルTEST.TXTを開き、 R+モードで読み取りと書き込みを開きます。
Stream_Filter_Append関数を使用して、 String.Toupperストリームフィルターをファイルストリームに適用します。つまり、ファイルから読み取られたものが大文字に自動的に変換されます。
次に、 FGETS関数を使用して、ラインごとにファイルコンテンツを読み取り、変換された資本コンテンツを画面に出力します。
最後に、 Fclose経由でファイルストリームを閉じます。
test.txtファイルのコンテンツが次のとおりの場合:
Hello world!
This is a test.
その場合、プログラムの出力は次のとおりです。
HELLO WORLD!
THIS IS A TEST.
ファイルストリーミングに加えて、PHPはURLのストリームフィルタリングもサポートしています。たとえば、ストリームフィルターを使用して、HTTP要求されたデータを処理できます。以下は、 FOPENを介してURLを開き、ストリームフィルターと組み合わせて処理する方法を示す簡単な例です。
<?php
// 使用 fopen 開ける URL,使用 gitbox.net ドメイン名として
$url = "http://gitbox.net/path/to/resource";
$stream = fopen($url, 'r');
// 意思 'string.toupper' フローフィルターが適用されます URL データフロー
stream_filter_append($stream, 'string.toupper');
// データを読み取り、出力します
while (($line = fgets($stream)) !== false) {
echo $line;
}
// ストリームを閉じます
fclose($stream);
?>
指定されたURL( gitbox.netドメイン名)を開きます。
string.toupperストリームフィルターをURLデータストリームに適用して、URLから取得したデータが出力で大文字に変換されるようにします。
ラインごとにデータを読み取ります。
最後に、ストリームを閉じます。
ストリームフィルターは、ファイルだけでなく、ネットワークフロー、パイプラインフローなどにも使用できます。
一部のフィルター(圧縮や暗号化など)がオーバーヘッドを追加する可能性があるため、ストリームフィルターを使用する場合はパフォーマンスに特に注意してください。
複数のフィルターを組み合わせて、より複雑な処理を行うことができます。たとえば、最初の圧縮してから暗号化します。
この記事を通して、 FOPENと組み合わせてStream_Get_Filters関数を使用してストリームフィルターを実装する方法を学びました。ストリームフィルターは、ファイルやネットワークデータをリアルタイムで処理するのに役立つ非常に強力で柔軟なツールです。単純なテキスト変換であろうと、より複雑なデータ処理であろうと、ストリームフィルターは非常に便利なソリューションを提供できます。