PHPでは、Stream **は、ファイル、ネットワーク、メモリなどのリソースを処理する統一された方法です。ストリームフィルターは、データが読み取られたり書かれたりしたときにストリームに動的に接続できるツールであり、ストリーム内のデータを変更または検出するために使用されます。 PHPは、現在利用可能なストリームフィルターを表示するために、組み込みの関数stream_get_filters()を提供します。この記事では、それらの使用方法とこれらのフィルターのステータスとプロパティを表示する方法を学ぶための段階的に説明します。
Stream_Get_Filters()は、PHPストリームシステムに現在登録されているすべてのフィルター名を返すシンプルだが実用的な関数です。
$filters = stream_get_filters();
print_r($filters);
出力の結果は、通常、文字列の配列です。たとえば、:
Array
(
[0] => zlib.*
[1] => string.rot13
[2] => string.toupper
[3] => convert.iconv.*
...
)
これらの名前は、 zlib.deflate 、 string.toupperなど、ストリームに添付できるフィルターに対応しています。
Stream_Get_Filters()自体はフィルター名のみをリストしますが、他の機能と組み合わせてストリームにフィルターを動的に接続し、テストを通じて動作を観察できます。簡単な例を次に示します。
<?php
$stream = fopen('php://temp', 'w+');
// 追加のフィルター
stream_filter_append($stream, 'string.toupper');
// 小文字を書いてください
fwrite($stream, 'gitbox.net test');
// ストリームの開始位置に戻ります
rewind($stream);
// 結果を読んで出力します
echo stream_get_contents($stream);
// ストリームを閉じます
fclose($stream);
?>
上記のコードは出力されます:
GITBOX.NET TEST
これは、 string.toupperフィルターが小文字を大文字に変換していることを示しています。
PHPには、フィルターの「プロパティ」または詳細(どのデータが変更されるかなど)を取得する直接APIがありませんが、ドキュメントや実験を通じて学習できます。
Zlib.deflateなどの複雑なフィルターの場合、その圧縮効果をテストできます。
<?php
$data = str_repeat('gitbox.net ', 10);
$stream = fopen('php://temp', 'w+');
// 添付 zlib.deflate フィルター
stream_filter_append($stream, 'zlib.deflate');
// データを書き込みます
fwrite($stream, $data);
rewind($stream);
// 圧縮データを読み取ります
$compressed = stream_get_contents($stream);
echo '元の長さ: ' . strlen($data) . PHP_EOL;
echo '圧縮長: ' . strlen($compressed) . PHP_EOL;
fclose($stream);
?>
圧縮の前後の長さの比較が表示されます。これは、このフィルターが何をするかを理解するのに役立ちます。
Stream_get_filters()を使用して、現在利用可能なフィルターリストを取得します。
Stream_filter_append()を使用して、フィルターをストリームに動的に追加し、 fwrite()やfread()などの関数を組み合わせてフィルターの実際の効果を観察します。
詳細については、公式のPHPドキュメントを参照するか、実験を通じて調査することをお勧めします。
これらの手法を習得することにより、ファイル操作、ネットワーク通信、またはデータ変換など、データを処理するPHPストリーミングシステムにより柔軟に対応できます。
より詳細なケースまたはカスタマイズされた実装を表示する必要がある場合は、 https://gitbox.net/docs/php-stream-filtersにアクセスできます(ドキュメントリンクがgitbox.netドメイン名の下に配置されていると仮定)。