現在の位置: ホーム> 最新記事一覧> Stream_Filter_Appendを使用して単純なテキスト変換フィルターを作成する方法は?

Stream_Filter_Appendを使用して単純なテキスト変換フィルターを作成する方法は?

gitbox 2025-09-29

Stream_Filter_Appendを使用して単純なテキスト変換フィルターを作成する方法は?

PHPでは、 Stream_Filter_Append()関数により、ストリームにフィルターを接続できるようになり、ストリーム内のデータをリアルタイムで処理および変換できます。この記事では、 Stream_Filter_Append()を使用して、単純なテキスト変換フィルターを作成し、ストリーム内のデータを操作し、大文字の変換、小文字の変換など、いくつかの一般的なテキスト変換を実行する方法を紹介します。

stream_filter_append()とは何ですか?

Stream_Filter_Append()は、特定のストリームにフィルターを追加できるPHPビルトイン関数です。フィルターの機能は、変更、変換、圧縮など、ストリーム内のデータを処理することです。フローフィルターは、組み込みまたはカスタマイズできます。

基本的な構文

<span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(resource </span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filtername</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$read_write</span></span><span> = STREAM_FILTER_READ, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$params</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ストリーム:フィルターを取り付けるためのストリーム。

  • $フィルタン:フィルターの名前。ビルトインフィルターまたはカスタムフィルターを使用できます。

  • $ read_write :ストリームの読み取りか書き込みかを指定します。 stream_filter_readは読み取りストリームを表し、 stream_filter_writeは書き込みストリームを表します。

  • $ params :フィルターに渡されたパラメーター(オプション)。

単純なテキスト変換フィルターを作成します

テキスト変換フィルターを作成する例は次のとおりです。テキストを大文字に変換するフィルターを実装します。

ステップ1:カスタムフィルターを定義します

まず、シンプルなフィルタークラスを作成し、 php_user_filterクラスを継承し、そのメソッドを実装する必要があります。このフィルターは、ストリーム内のテキストを大文字に変換します。

 <span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">UppercaseFilter</span></span><span> </span><span><span class="hljs-keyword">extends</span></span><span> </span><span><span class="hljs-title">php_user_filter</span></span><span> {
    </span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">filter</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$in</span></span></span><span>, </span><span><span class="hljs-variable">$out</span></span><span>, &amp;</span><span><span class="hljs-variable">$consumed</span></span><span>, </span><span><span class="hljs-variable">$closing</span></span><span>) {
        </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$bucket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_bucket_make_writeable</span></span><span>(</span><span><span class="hljs-variable">$in</span></span><span>)) {
            </span><span><span class="hljs-comment">// ストリームのデータを大文字に変換します</span></span><span>
            </span><span><span class="hljs-variable">$bucket</span></span><span>-&gt;data = </span><span><span class="hljs-title function_ invoke__">strtoupper</span></span><span>(</span><span><span class="hljs-variable">$bucket</span></span><span>-&gt;data);
            </span><span><span class="hljs-comment">// 変換されたデータをターゲットストリームに出力します</span></span><span>
            </span><span><span class="hljs-title function_ invoke__">stream_bucket_append</span></span><span>(</span><span><span class="hljs-variable">$out</span></span><span>, </span><span><span class="hljs-variable">$bucket</span></span><span>);
        }
        </span><span><span class="hljs-keyword">return</span></span><span> PSFS_PASS_ON;
    }
}
</span></span>

このクラスでは、フィルター()メソッドが最も重要な部分です。入力ストリームのデータを受信し、大文字に変換してから、ターゲットストリームに出力します。

ステップ2:フィルターを登録します

次に、 Stream_filter_register()関数を使用して、このカスタムフィルターをPHP環境に登録する必要があります。

 <span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);
</span></span>

このステップを通じて、 ApperCaseFilterを大文字と呼ばれるフィルターとして登録して、ストリーム処理で使用します。

ステップ3: Stream_Filter_Append()を使用してフィルターを追加します

Stream_filter_append()を介して登録されたフィルターをストリームに接続できます。テキストファイルを読み取り、ストリームフィルターを介してコンテンツを大文字に変換する方法を示す例を示します。

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// フィルターを登録します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_register</span></span><span>(</span><span><span class="hljs-string">"uppercase"</span></span><span>, </span><span><span class="hljs-string">"UppercaseFilter"</span></span><span>) </span><span><span class="hljs-keyword">or</span></span><span> </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Filter registration failed"</span></span><span>);

</span><span><span class="hljs-comment">// ファイルストリームを開きます</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">"example.txt"</span></span><span>, </span><span><span class="hljs-string">"r"</span></span><span>);

</span><span><span class="hljs-comment">// ファイルストリームにカスタム変換フィルターを接続します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">stream_filter_append</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-string">"uppercase"</span></span><span>, STREAM_FILTER_READ);

</span><span><span class="hljs-comment">// ファイルのコンテンツを読んで出力します</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
}

</span><span><span class="hljs-comment">// ファイルストリームを閉じます</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

上記の例では、 example.txtという名前のファイルを開き、大文字フィルターをファイルストリームに添付します。ストリーム内のデータを読み取るたびに、フィルターは自動的に大文字に変換し、出力します。

ステップ4:テストと検証

example.txtファイルのコンテンツは次のとおりであると仮定します。

 <span><span>hello world
</span><span><span class="hljs-keyword">this</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> a test.
</span></span>

上記のコードを実行した後、出力は次のとおりです。

 <span><span>HELLO WORLD
THIS IS </span><span><span class="hljs-selector-tag">A</span></span><span> TEST.
</span></span>

ご覧のとおり、すべてのテキストは大文字に変換されています。

要約します

Stream_filter_append()を使用すると、Filtersをストリームに簡単に追加して、データのリアルタイム処理を実現できます。この記事では、入力テキストを大文字に変換する単純なテキスト変換フィルターを作成しました。カスタムフィルターとストリームの組み合わせにより、PHPはさまざまな複雑なシナリオニーズを満たすことができる強力なストリームデータ処理機能を提供します。

この簡単な例を使用して、 Stream_Filter_Append()を使用して独自のストリームフィルターを作成し、テキスト処理に適用する方法を理解できることを願っています。