現在の位置: ホーム> 最新記事一覧> stream_get_filtersを使用して、ロードされたフィルターのリストを取得します

stream_get_filtersを使用して、ロードされたフィルターのリストを取得します

gitbox 2025-05-20

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でフィルターを使用します

場合によっては、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からコンテンツを読み取るときに大文字に直接変換します。