付録 N. 利用できるフィルタのリスト

以下は、 stream_filter_append() で利用できる 組み込みフィルタのリストです。PHP のバージョンによっては このリスト以外のフィルタがあったり、このリストにあるフィルタが存在 しなかったりするかもしれません。

stream_filter_append() stream_filter_prepend() のちょっとした違いに ついて説明します。 すべての PHP ストリームはその内部に小さな 読み込みバッファ を持っており、ファイルシステムもしくは他のリソースから読み込まれた データはこのバッファに格納されます。このことで、データをより効率的に 扱うことができるのです。リソースがストリームの内部バッファに 取り込まれたら、アプリケーション側で準備ができているかどうかに かかわらずすぐにフィルタ処理が行われます。フィルタが append されていた場合、読み込みバッファに はいってきたデータはすぐにフィルタ処理されます。つまり、バッファの 存在をまったく意識せずに扱えるということです。しかし、もしフィルタが prepend されていた場合、読み込みバッファにデータが 入ってきた段階ではフィルタ処理 されません 。 リソースから次のデータブロックが読み込まれるまで、フィルタ処理を 待機するのです。

あなたが使っている PHP にどのようなフィルタが登録されているかを 知るには、 stream_get_filters() を利用します。

文字列フィルタ

これらのフィルタは、まさしくその名が示すとおりの働きをし、PHP 組み込み の文字列処理関数と同じように動作します。これらのフィルタについての より詳しい情報は、対応する関数のマニュアルを参照してください。

string.rot13 (PHP 4.3.0 以降) このフィルタは、すべてのストリームデータに対して str_rot13() 関数を適用するのと同じ動作をします。

例 N-1. string.rot13

<?php
$fp
= fopen ( 'php://output' , 'w' );
stream_filter_append ( $fp , 'string.rot13' );
fwrite ( $fp , "This is a test.\n" );
/* 出力:     Guvf vf n grfg.   */
?>

string.toupper (PHP 5.0.0 以降) このフィルタは、すべてのストリームデータに対して strtoupper() 関数を適用するのと同じ動作をします。

例 N-2. string.toupper

<?php
$fp
= fopen ( 'php://output' , 'w' );
stream_filter_append ( $fp , 'string.toupper' );
fwrite ( $fp , "This is a test.\n" );
/* Outputs:  THIS IS A TEST.   */
?>

string.tolower (PHP 5.0.0 以降) このフィルタは、すべてのストリームデータに対して strtolower() 関数を適用するのと同じ動作をします。

例 N-3. string.tolower

<?php
$fp
= fopen ( 'php://output' , 'w' );
stream_filter_append ( $fp , 'string.tolower' );
fwrite ( $fp , "This is a test.\n" );
/* 出力:     this is a test.   */
?>

string.strip_tags (PHP 5.0.0 以降) このフィルタは、すべてのストリームデータに対して strip_tags() 関数を適用するのと同じ動作をします。 以下の2つのうちどちらかの形式でパラメータを渡すことができます。 ひとつは、 strip_tags() 関数の第2パラメータと同じ 形式でタグを並べた文字列、もうひとつはタグ名の配列です。

例 N-4. string.strip_tags

<?php
$fp
= fopen ( 'php://output' , 'w' );
stream_filter_append ( $fp , 'string.strip_tags' , STREAM_FILTER_WRITE , "<b><i><u>" );
fwrite ( $fp , "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n" );
fclose ( $fp );
/* 出力:     <b>bolded text</b> enlarged to a level 1 heading   */

$fp = fopen ( 'php://output' , 'w' );
stream_filter_append ( $fp , 'string.strip_tags' , STREAM_FILTER_WRITE , array( 'b' , 'i' , 'u' ));
fwrite ( $fp , "<b>bolded text</b> enlarged to a <h1>level 1 heading</h1>\n" );
fclose ( $fp );
/* 出力:     <b>bolded text</b> enlarged to a level 1 heading   */
?>