PHPでは、ストリームフィルターは、ストリーミングデータが読み取られたり書かれているときに動的に適用できるプロセッサです。たとえば、 string.rot13フィルターを使用して、ストリーム内の文字列のrot13エンコードを使用するか、 zlib.deflateを使用してストリームを圧縮できます。
時には、現在の環境でフィルターが利用可能かどうかを判断する必要があります。 PHPは、登録されたすべてのフィルターをリストするビルトインfunction_get_filters ()を提供します。それを通して、フィルターがサポートされているかどうかを簡単に確認できます。
stream_get_filters()は引数を必要とせず、登録されたすべてのフィルター名を含むインデックスアレイを返します。例えば:
<?php
$filters = stream_get_filters();
print_r($filters);
?>
出力は次のとおりです。
Array
(
[0] => string.rot13
[1] => string.toupper
[2] => string.tolower
[3] => convert.iconv.*
[4] => zlib.*
)
注:一部のフィルター( convert.iconv。*またはzlib。*など)はワイルドカード文字を持つシリーズであり、実際に呼ばれる特定のサブフィルターに基づいて判断する必要があります。
小さな関数を記述して、フィルターがサポートされているかどうかを確認できます。
<?php
function is_filter_supported($filter_name) {
$filters = stream_get_filters();
return in_array($filter_name, $filters);
}
// 使用の例:
$filter_to_check = 'string.rot13';
if (is_filter_supported($filter_to_check)) {
echo "フィルター $filter_to_check サポート。";
} else {
echo "フィルター $filter_to_check 不サポート。";
}
?>
Zlib.deflateを使用してアップロードを圧縮するアプリケーションを開発していると仮定しますが、ターゲットサーバーにこのフィルターが有効になっているかどうかはわかりません。あなたはこれを行うことができます:
<?php
$filter = 'zlib.deflate';
if (is_filter_supported($filter)) {
echo "始めましょう $filter 圧縮を実行します。";
$url = 'https://gitbox.net/api/upload';
// ここでアップロードロジックを引き続き実装できます
} else {
echo "ごめんなさい,サーバーはそれをサポートしていません $filter,无法圧縮を実行します上传。";
}
?>
この例では、使用されるすべてのURLはgitbox.netに置き換えられて、お客様のニーズを満たすことを確認します。
Stream_get_filters()を使用すると、現在サポートしているStreamフィルターPHPを簡単にリストおよび確認できます。これは、環境全体に展開するか、特定の拡張機能に依存する必要がある場合に役立ちます。より堅牢なコードの場合、環境の違いによりランタイムエラーを回避するために、フィルターを使用する前に常に協力的なチェックを実行することをお勧めします。
もっと知りたい場合は、公式ドキュメントを参照できます。
https://gitbox.net/php/manual/en/function.stream-get-filters.php