現在の位置: ホーム> 最新記事一覧> Stream_get_filtersとstream_filter_removeの共同使用の例

Stream_get_filtersとstream_filter_removeの共同使用の例

gitbox 2025-05-28

PHPでは、ストリームはファイル、ネットワーク、デバイスなどの入力と出力を処理するメカニズムです。PHPは、ストリーム内のデータをフィルタリングおよび変更できる強力なストリームフィルターを提供します。 Stream_Get_FiltersStream_Filter_Removeは、一般的に使用されるストリームフィルタリング機能です。この記事では、これら2つの機能を組み合わせてストリームフィルタリングを実装する方法について詳しく説明します。

1。フローフィルターとは何ですか?

ストリームフィルターは、ストリームに適用されるメカニズムであり、ストリームデータを変更、変換、フィルターすることができます。たとえば、ストリームフィルターを使用して、ファイルストリームで暗号化、復号化、圧縮、減圧、その他の操作を使用できます。

PHPはさまざまな内蔵ストリームフィルターを提供し、ユーザーはストリームフィルターをカスタマイズすることもできます。 String.Toupperなどの一般的なフィルターは、ストリーム内のデータを大文字に変換できます。

2。Stream_Get_Filters関数

Stream_Get_Filters()関数は、PHPで利用可能なすべてのストリームフィルターのリストを返します。この関数は、すべてのフィルター名を含む配列を返します。

 $filters = stream_get_filters();
print_r($filters);

このコードを実行すると、利用可能なすべてのフィルターがリストされます。このリストを介してすべてのPHPサポートされたフィルターを表示し、ニーズに適したフィルターを決定できます。

3。Stream_Filter_Remove関数

Stream_Filter_Remove()関数は、ストリームに適用されたフィルターを削除するために使用されます。これは、ストリームを処理するためにフィルターが必要ない場合、この機能を使用して削除できることを意味します。この操作はフローを閉じませんが、フローのフィルタリングを停止するだけです。

 $filter = stream_filter_append($stream, 'string.toupper');
stream_filter_remove($filter);

このコードでは、 Stream_Filter_Append()を使用して、データを大文字に変換するStream $ Streamにフィルターを追加し、 Stream_Filter_Remove()を介してこのフィルターを削除します。

4。実用的な例: Stream_Get_FiltersStream_Filter_Removeの組み合わせ

テキストストリームがあると仮定し、すべてのテキストを大文字に変換するためにストリームにフィルターを追加する必要があります。特定の条件下では、このフィルターを取り外して元のテキストを復元します。

サンプルコード

<?php
// テキストストリームを開きます
$stream = fopen('php://temp', 'r+');
fwrite($stream, "Hello World! This is a test message.");
rewind($stream);

// 利用可能なすべてのフィルターを取得します
$filters = stream_get_filters();
echo "Available filters:\n";
print_r($filters);

// フィルターを適用します,コンテンツを大文字に変換します
$filter = stream_filter_append($stream, 'string.toupper');

// ストリーム内のデータを読み取り、出力します(すでに首都)
rewind($stream);
echo "After applying 'string.toupper' filter:\n";
echo fread($stream); // 出力: HELLO WORLD! THIS IS A TEST MESSAGE.

// フィルターを取り外します
stream_filter_remove($filter);

// 重新ストリーム内のデータを読み取り、出力します(元のテキストを復元します)
rewind($stream);
echo "\nAfter removing the filter:\n";
echo fread($stream); // 出力: Hello World! This is a test message.
?>

コード解析

  1. ストリームを開くFopen( 'php:// temp'、 'r+')を介して一時的なメモリストリームを開き、テキストデータを書き込みます。

  2. 利用可能なすべてのフィルターを取得stream_get_filters()を使用して、登録されたすべてのフィルターを取得して印刷します。このリストから、適用するフィルターを選択できます。

  3. フィルターを適用Stream_Filter_Append()関数を使用して、 String.Toupperフィルターをストリームに追加します。これは、すべてのテキストを大文字に変換します。

  4. フィルターを削除Stream_Filter_Remove()を使用してフィルターを削除して、ストリーム内のデータが元の状態に戻ります。

  5. 出力データ:フィルターを適用して削除した後、 FREAD()を介してストリームにデータを出力して、フィルター効果の変化を示します。

コード出力の例:

 Available filters:
Array
(
    [0] => string.toupper
    [1] => convert.iconv.utf-8.utf-16
    [2] => convert.iconv.utf-16.utf-8
    [3] => string.rot13
    [4] => string.lower
    ...
)

After applying 'string.toupper' filter:
HELLO WORLD! THIS IS A TEST MESSAGE.

After removing the filter:
Hello World! This is a test message.

説明する

  1. Stream_get_filters()関数は、ストリームデータを処理するために直接使用できるすべての使用可能なフィルターを返します。

  2. string.toupperフィルターは、ストリーム内のすべてを大文字に変換します。

  3. Stream_Filter_Remove()関数がフィルターを削除すると、ストリーム内のコンテンツが元の状態に戻ります。

5。概要

Stream_Get_FiltersStream_Filter_Removeを使用すると、フローデータのプロセスを柔軟に制御できます。これらの2つの機能は、動的に変化するフローフィルタリングが必要ないくつかのシナリオで非常に役立ちます。実行時に異なるフィルターを選択するか、特定の条件下でそれらを削除して元のデータを復元することもできます。