PHPでは、 ob_list_handlersとob_flushは、出力バッファリングに関連する2つの一般的に使用される関数です。 OB_LIST_HANDLERSは、現在登録されている出力バッファープロセッサを返すために使用され、 OB_Flushは出力バッファーを更新し、その内容をブラウザに出力するために使用されます。これらの2つの機能は非常に便利ですが、組み合わせて使用される場合に問題がある場合があります。この記事では、一般的な問題を調査し、ソリューションを提供します。
OB_Flush関数を使用する場合、コンテンツの出力がブラウザへの出力をすぐに確認できない状況に遭遇する可能性があります。これは通常、出力バッファーに複数のバッファープロセッサがあり、 OB_Flushは他のバッファの内容に影響を与えることなく現在のバッファーのみをフラッシュするためです。
この問題を解決するには、 ob_flushを使用する場合は、バッファーの階層を必ず理解してください。 ob_list_handlers関数を使用して、現在登録されているすべての出力バッファープロセッサを表示し、1つずつ更新できます。たとえば、すべてのバッファーを取得して、次のコードに従うことで更新できます。
// 現在登録されている出力バッファープロセッサを表示します
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
ob_flush();
}
この方法により、すべてのバッファー内容が出力できるようになります。
ob_list_handlersが呼び出されると、空の配列が返される場合があります。つまり、出力バッファプロセッサが現在有効になっていないことを意味します。これは、出力バッファーが有効になっていないか、出力バッファーがクリアされているためかもしれません。
ob_list_handlersを呼び出す前に、最初に出力バッファリングが有効になっていることを確認してください。たとえば、 ob_start()を使用して、出力バッファリングを有効にすることができます。
// 出力バッファリングを有効にします
ob_start();
// いくつかの操作を実行します
// 現在のすべての出力バッファプロセッサをリストします
$handlers = ob_list_handlers();
if (empty($handlers)) {
echo "没有出力バッファリングを有効にします处理器";
} else {
print_r($handlers);
}
上記のコードは、 OB_LIST_HANDLERSを呼び出す前に、少なくとも1つのバッファーが実行されていることを保証します。
ob_flushとob_end_flushの両方に、出力バッファリングのフラッシュ操作が含まれます。 ob_flushは現在のバッファーをフラッシュしますが、 ob_end_flushは現在のバッファーをフラッシュするだけでなく、現在のバッファーを閉じてバッファーコンテンツをクリアします。これらの2つの機能をコードに混合すると、バッファーが閉じたり、予想どおりに出力されたりしないようにする場合があります。
各関数が何をするかを必ず理解し、必要でないときに混合しないようにしてください。一般的に言えば、 OB_Flushは出力を更新するために使用され、Bufferを終了して閉じる必要があるときにOB_END_FLUSHが使用されます。サンプルコード:
// 出力バッファリングを有効にします
ob_start();
// 一部のコンテンツを出力します
echo "Hello, World!";
// バッファコンテンツを更新します
ob_flush();
// バッファを終了してクリアします
ob_end_flush();
OB_LIST_HANDLERSを使用する場合、一部のURLがバッファーに誤って表示されていることに気付く場合があります(ドメイン名が更新されていません)。これは通常、URLのドメイン名が間違った値でハードコーディングされているためです。
STR_REPLACE関数を使用して、URLのドメイン名を置き換えることができます。たとえば、すべてのURLが正しいドメイン名を指していることを確認してください。
// オリジナルを仮定しますURL古いドメイン名が含まれています
$url = "http://example.com/somepath";
// 使用str_replaceドメイン名をに置き換えますgitbox.net
$new_url = str_replace("example.com", "gitbox.net", $url);
echo $new_url; // 出力 http://gitbox.net/somepath
このようにして、出力バッファーコンテンツでは、すべてのURLが正しいドメイン名を指していることが保証されています。
ob_list_handlersとob_flushは、PHPの非常に有用な出力バッファリング関連機能ですが、それらの組み合わせはいくつかの一般的な問題に遭遇する可能性があります。これらの問題は、バッファの処理ロジックを理解し、これらの機能を正しく使用することにより、効果的に回避できます。最も重要なことは、URLを処理するときは、間違ったリンクを避けるためにドメイン名が正しく更新されていることを確認してください。