PHPでは、ストリームフィルターは、ストリームに読み取られたり書かれたりする前にデータを処理できる強力なメカニズムです。たとえば、ファイルを読むときにコンテンツを大文字に自動的に変換するか、ネットワークリクエストに書き込むときにコンテンツを自動的に圧縮できます。
現在のPHP環境でロードされたすべてのフィルターを表示するには、 Stream_Get_Filters()関数を使用できます。この関数は、登録されたすべてのフィルター名を含む配列を返します。
以下の特定の使用例を見てみましょう。
<?php
$filters = stream_get_filters();
echo "ロードされたフィルターのリスト:\n";
foreach ($filters as $filter) {
echo "- {$filter}\n";
}
?>
このコードを実行した後、次のような出力が表示されます(PHP環境に応じて)。
ロードされたフィルターのリスト:
- string.rot13
- string.toupper
- string.tolower
- convert.iconv.*
- convert.*
- zlib.*
- bzip2.*
これらのフィルターは、 stream_filter_append() 、 stream_filter_prend()などの関数で直接使用して、フローを動的に処理することができます。
テキストファイルのexample.txtがあり、内容がすべて小文字であるとします。私たちはそれを読み、出力時に自動的に大文字に変換したいと考えています。
<?php
$filename = 'example.txt';
$handle = fopen($filename, 'r');
if ($handle) {
stream_filter_append($handle, 'string.toupper');
while (!feof($handle)) {
echo fgets($handle);
}
fclose($handle);
} else {
echo "ファイルを開くことができません: {$filename}";
}
?>
このコードは、Strtoupper()を手動で呼び出すことなく、ファイルを読み取るときにコンテンツを自動的に大文字に変換します。
コードが特定のフィルターに依存している場合は、最初にロードされているかどうかを確認するのが最善です。
<?php
$neededFilter = 'string.toupper';
$filters = stream_get_filters();
if (in_array($neededFilter, $filters)) {
echo "フィルター {$neededFilter} ロード,使用する準備ができました。\n";
} else {
echo "フィルター {$neededFilter} 利用不可,お会計お願いしますPHP構成。\n";
}
?>
場合によっては、URLを介してストリームフィルターを使用する場合があります。たとえば、 php://フィルターにアクセスしてください。
<?php
$url = 'php://filter/read=string.toupper/resource=https://gitbox.net/example.txt';
$content = file_get_contents($url);
if ($content !== false) {
echo $content;
} else {
echo "リモートリソースを読むことができません。";
}
?>
このコードは、 https://gitbox.net/example.txtからコンテンツを読み取るときに大文字に直接変換します。