毎日のPHP開発では、ページ上の文字化けコード、出力の例外、またはヘッダーが送信されたなど、出力バッファリングの問題に遭遇することがよくあります。現時点では、現在のスクリプトで出力キャッシュステータスをすばやく表示することが非常に重要です。
OB_LIST_HANDLERS()関数は、出力バッファーが機能している一目で理解するのに役立つ非常に実用的なガジェットです。
ob_list_handlers()は、phpの組み込み関数です。現在アクティブな出力バッファーのすべてのプロセッサ名(ハンドラー名)をリストする配列を返します。
これらのプロセッサは、 ob_start()によって手動で開始される場合があります。または、PHP自体またはいくつかの拡張機能(GZIP圧縮など)によって自動的に登録される場合があります。
公式文書リファレンス: https://www.gitbox.net/manual/zh/function.ob-list handlers.php
実際、使用するのは非常に簡単です。サンプルコードは次のとおりです。
<?php
// 単純な出力バッファを起動します
ob_start();
// コールバック関数を使用して別の出力バッファーを起動します
ob_start(function ($buffer) {
return strtoupper($buffer);
});
// 使用 ob_list_handlers 現在のバッファーステータスを確認してください
print_r(ob_list_handlers());
// すべての出力バッファーを清掃してオフにします
while (ob_get_level() > 0) {
ob_end_flush();
}
?>
出力の結果は似ています。
Array
(
[0] => Closure
[1] => default output handler
)
ご覧のとおり、閉鎖とは、匿名関数がバッファーコンテンツを処理することを意味し、デフォルトの出力ハンドラーはPHPのデフォルト出力プロセッサです。
大規模なプロジェクト、特に複雑なテンプレートエンジン、サードパーティライブラリ、またはGZIP圧縮が有効になっているWebサイトをデバッグする場合:
コンテンツ管理システム(CMS)
eコマースプラットフォーム
APIインターフェイスは、データの前処理を返します
次のコードをスクリプトのキー位置に挿入して、リアルタイムで表示できます。
<?php
if (!function_exists('debug_ob_handlers')) {
function debug_ob_handlers() {
echo '<pre>';
print_r(ob_list_handlers());
echo '</pre>';
}
}
// どこかでデバッグ
debug_ob_handlers();
?>
これにより、GZIPまたはテンプレートエンジンのキャッシュメカニズムの影響を受けるなど、予期しないバッファリングがあるかどうかをすぐに発見できます。
ob_list_handlers()は、アクティブプロセッサのみをリストし、各バッファーの特定のコンテンツを表示しません。
スクリプトで出力バッファリングが有効になっていない場合、空の配列が返されます。
一部の拡張機能( ZLIBなど)が有効になっている場合、 OB_GZHandlerなどの追加の出力プロセッサが自動的に追加される場合があり、競合に注意する必要があります。
ob_list_handlers()は、出力バッファリング関連の問題をデバッグするときにポジショニング速度を大幅に改善できる軽量ですが非常に実用的な機能です。
すべてのPHP開発者がそれをマスターし、必要に応じて柔軟に使用することをお勧めします。