PHPでは、 OB_LIST_HANDLERS関数を使用すると、現在有効になっている出力バッファハンドラーを表示できます。出力バッファリングは、すぐにブラウザに送信するのではなく、メモリにスクリプト出力を一時的に保存できるPHPの機能です。これにより、最終的にブラウザに送信される前に、出力を処理または変更して操作できます。
この記事では、ob_list_handlers関数を使用して、PHPで複数のキャッシュハンドラーを表示および管理する方法について説明します。
OB_LIST_HANDLERS関数は、現在アクティブな出力バッファハンドラーをリストするために使用されます。出力バッファハンドラーは、ob_start()が呼び出されたときに設定された関数であり、バッファが閉じたときに実行されます。
ob_list_handlers(): array
この関数は、登録されているすべての出力バッファハンドラー名を含む配列を返します。
まず、 OB_LIST_HANDLERSを使用して現在有効になっているすべての出力バッファリングハンドラーを表示する方法を示す簡単な例を見てみましょう。
<?php
// 出力バッファリングを開始します
ob_start(function($buffer) {
// 出力バッファーの終わりに,出力コンテンツを変更します
return strtoupper($buffer);
});
// 一部のコンテンツを出力します
echo "Hello, World!";
// 使用 ob_list_handlers すべての出力バッファハンドラーを表示します
$handlers = ob_list_handlers();
// 出力ハンドラーのリスト
print_r($handlers);
?>
Array
(
[0] => default output handler
[1] => user-defined callback handler
)
この例では、最初にOB_STARTを使用してバッファを起動し、すべての出力を大文字に変換するコールバック関数を指定します。次に、 OB_LIST_HANDLERSを呼び出して、現在登録されているすべてのバッファハンドラーを表示します。最終出力は、デフォルトのハンドラーとカスタムコールバック関数を示しています。
出力バッファハンドラーが不要になった場合は、 OB_END_FLUSHまたはOB_END_CLEANを使用して現在のバッファを閉じることができます。
ob_end_flush()は、バッファー内の内容をブラウザに出力し、バッファーを閉じます。
OB_END_CLEAN()は、バッファー内の内容物を破棄し、バッファーを閉じます。
たとえば、複数のバッファーが開始され、最初のバッファを閉じたいとします。
<?php
// 最初のバッファを起動します
ob_start(function($buffer) {
return strtoupper($buffer);
});
// 2番目のバッファを起動します
ob_start(function($buffer) {
return strrev($buffer);
});
// 一部のコンテンツを出力します
echo "Hello, World!";
// 使用 ob_list_handlers すべての出力バッファハンドラーを表示します
$handlers = ob_list_handlers();
print_r($handlers);
// 最初のバッファを閉じて結果を出力します
ob_end_flush(); // これは出力されます "HELLO, WORLD!"
// 使用 ob_list_handlers バッファハンドラーをもう一度確認してください
$handlers = ob_list_handlers();
print_r($handlers);
?>
Array
(
[0] => user-defined callback handler
[1] => user-defined callback handler
)
HELLO, WORLD!
Array
(
[0] => user-defined callback handler
)
この例では、最初に2つのバッファを開始します。 ob_end_flush()を呼び出すことにより、最初のバッファーが閉じてコンテンツが出力され、結果は2番目のバッファーがまだアクティブであることを示しています。
すべてのバッファーを削除し、バッファーの内容をクリアする場合は、 OB_CLEAN()とOB_END_CLEAN()を使用して、出力せずにすべてのバッファーをクリーニングできます。
<?php
// バッファを起動します
ob_start();
echo "Hello, World!";
// すべてのバッファーを削除します
while (ob_get_level()) {
ob_end_clean();
}
// 現在のバッファリストを出力します
$handlers = ob_list_handlers();
print_r($handlers); // 空の配列を表示する必要があります
?>
この例では、すべてのバッファーがクリーンアップされるため、 ob_list_handlersは空の配列を返します。
PHPアプリケーションが外部APIまたはリソースの読み込み(URLを介してデータを取得するなど)が含まれる場合、出力バッファリングを使用してこのコンテンツをキャプチャおよび処理することもできます。たとえば、 file_get_contentsを介してURLからデータを取得し、ブラウザに表示する必要があるとします。
<?php
// 出力バッファリングを開始します区
ob_start();
// 指定されたものからURLコンテンツを取得します
$content = file_get_contents('https://gitbox.net/api/data');
// 出力コンテンツ
echo $content;
// 現在の出力バッファハンドラーを表示します
$handlers = ob_list_handlers();
print_r($handlers);
// バッファーをクリーニングし、結果を出力します
ob_end_flush();
?>
Array
(
[0] => default output handler
)
この例では、 file_get_contentsを介してgitbox.netでコンテンツを取得し、出力バッファーを使用してコンテンツをキャプチャし、 ob_list_handlersを介して現在のバッファハンドラーを表示します。
ob_list_handlersは、開発者が複数の出力バッファリングプログラムを表示および管理するのに役立つ非常に便利なツールです。特に出力コンテンツを処理する場合、PHP開発により柔軟性が向上します。実際には、出力バッファー機能を組み合わせて、コンテンツの表示の順序を制御するか、コンテンツをクライアントに渡す前に形式を変更することにより、出力ストリームを最適化できます。
これらのバッファリング機能を正しく使用することにより、PHP開発者は、特にプログラムの応答速度やユーザーエクスペリエンスを改善できるAPIデータなどの外部リソースを処理する場合、パフォーマンスのボトルネックを避けて、大規模なアプリケーションでの出力をより効率的に処理できます。