PHPでは、 Stream_Get_Filters()は非常に便利な機能であり、現在利用可能なストリームフィルターを表示できます。ストリームフィルターは、圧縮、暗号化、エンコードなど、読み取りまたは書き込みの場合にデータを変換または処理するために使用できます。この記事では、Stream_Get_Filters()を使用してこれらのフィルターを表示し、簡単なアプリケーションの例を示します。
ストリームフィルターはPHPストリームラッパーの一部であり、データ送信のストリーミング中にデータを動的に処理するために使用されます。たとえば、データをファイルに書き込む前にデータを圧縮するか、ファイルからデータを読み取るときに自動的に解凍できます。
一般的なフィルターは次のとおりです。
string.rot13 :rot13文字列のエンコード。
string.toupper :文字列を大文字に変換します。
String.Tolower :文字列を小文字に変換します。
convert.base64-encodeおよびconvert.base64-decode :base64データのエンコードまたはデコード。
Stream_Get_Filters()関数を使用して、現在のPHP環境で利用可能なすべてのストリームフィルターをリストする配列を取得できます。
<?php
$filters = stream_get_filters();
echo "利用可能なフローフィルター:\n";
print_r($filters);
?>
このコードを実行した後、次のような出力が得られます。
利用可能なフローフィルター:
Array
(
[0] => zlib.*
[1] => string.rot13
[2] => string.toupper
[3] => string.tolower
[4] => convert.*
)
注:さまざまなPHPインストールでは、インストールされている拡張モジュールに応じて、異なるフィルターをリストする場合があります。
フィルターを使用してファイルコンテンツを大文字に変換する例を示しましょう。
<?php
$filename = 'output.txt';
$fp = fopen($filename, 'w');
// 書くときは適用します string.toupper フィルター
stream_filter_append($fp, 'string.toupper');
fwrite($fp, "hello, gitbox.net!\n");
fwrite($fp, "this is a test.\n");
fclose($fp);
echo "完全に書く,ファイルを確認してください $filename。\n";
?>
このコードは、 output.txtファイルを作成し、書かれたときにすべての文字を大文字に自動的に変換します。ファイルを開くと、コンテンツは次のとおりです。
HELLO, GITBOX.NET!
THIS IS A TEST.
PHPはローカルファイルストリームを操作するだけでなく、 fopen()を使用してURLストリームを開きます( aopto_url_fopenが許可されている場合)。例えば:
<?php
$url = 'https://gitbox.net/data.txt';
$fp = fopen($url, 'r');
// 読むときは適用します ROT13 フィルター
stream_filter_append($fp, 'string.rot13');
while (!feof($fp)) {
echo fgets($fp);
}
fclose($fp);
?>
https://gitbox.net/data.txtのコンテンツが通常のテキストであると仮定すると、このコードはrot13でコンテンツをエンコードし、リアルタイムで出力します。