現在の位置: ホーム> 最新記事一覧> ob_clean()の要件は何ですか。その後、ob_flush()を使用しますか?それらを一緒に使用するとき、どのような詳細を注意する必要がありますか?

ob_clean()の要件は何ですか。その後、ob_flush()を使用しますか?それらを一緒に使用するとき、どのような詳細を注意する必要がありますか?

M66 2025-07-04

1。出力バッファリングとは何ですか?

出力バッファリングとは、PHPがスクリプトを実行すると、出力コンテンツをメモリバッファーに保存することを意味します。 PHPは、スクリプトが実行されるまでこれらのコンテンツをブラウザに送信しません。出力バッファリングは、出力のタイミングを効果的に制御し、不要な出力を減らし、ページの読み込みを加速させることができます。

PHPは、出力バッファリングに関連するいくつかの機能を提供し、その中でOB_CLEAN()OB_Flush()が最も一般的に使用されている2つです。


2。OB_CLEAN ()およびOB_FLUSH()の役割

1。OB_CLEAN ()関数

OB_CLEAN()の目的は、現在の出力バッファーの内容をクリアすることですが、バッファを閉じません。生成時に出力を変更または再処理する場合は、 OB_CLEAN()を使用して、現在のバッファーコンテンツをクリアできます。例えば:

 ob_start(); // 出力バッファリングを開始します
echo "Hello, world!";
ob_clean(); // バッファをクリアします
echo "New content"; // 新しいコンテンツを出力します
ob_end_flush(); // ブラウザにバッファコンテンツを出力します

上記のコードでは、 ob_clean()がhello、worldを削除します!最終出力が新しいコンテンツになるように。

2。OB_FLUSH ()関数

ob_flush()の目的は、現在のバッファーの内容をブラウザに送信することですが、バッファーはクリアされません。バッファー内のコンテンツをブラウザに「フリーズ」しましたが、それでもバッファのコンテンツを保持してから使用します。例えば:

 ob_start();
echo "This is buffered.";
ob_flush(); // ブラウザにコンテンツを送信します,但不バッファをクリアします
echo "Next output.";
ob_end_flush(); // 最後に、すべてのバッファコンテンツをブラウザに出力します

ob_flush()は、多くの場合、コンテンツをリアルタイムで更新するために使用されます。たとえば、大規模なファイルのダウンロードやストリーミングを処理するときに、ファイル全体が完了するのを待たずにコンテンツの一部をクライアントに送信するために使用できます。


3. OB_CLEAN()OB_FLUSH()を一緒に使用する場合の注意

ob_clean()ob_flush()は一緒に使用できますが、注文と使用シナリオには特別な注意が必要です。

  1. 最初にクリアしてから更新します:
    バッファーの現在の出力をクリアし、すぐにブラウザに新しいコンテンツを送信する場合は、次の2つの機能を使用できます。

     ob_start(); // 出力バッファリングを開始します
    echo "Old content";
    ob_clean(); // バッファをクリアします
    echo "New content"; // 新しいコンテンツ
    ob_flush(); // 将新しいコンテンツ发送到浏览器
    

    この方法は、出力に古いコンテンツを含めないシナリオに適しており、すぐにブラウザに出力を更新します。

  2. 乱雑なバッファーを避けてください:
    OB_CLEAN()がOB_Flush()を使用した後に実行されない場合、未処理の出力がバッファに保持される場合があります。特に、 OB_Flush()が複数回呼び出される場合、出力コンテンツに重複または混乱を引き起こし、最終結果に影響を与える可能性があります。

  3. ob_flush()への複数の呼び出しの注意事項:
    長期にわたるスクリプト(大きなファイルのアップロードやダウンロードなど)などのいくつかのシナリオでは、処理中にob_flush()を複数回呼び出して、バッファのコンテンツをリアルタイムで更新する必要があります。使用する場合は、各更新が必要であり、 OB_CLEAN()と矛盾しないことを確認してください。


4。組み合わせて使用​​するときに注意すべきこと

  1. バッファがオンになっていることを確認するには:
    ob_clean()またはob_flush()を使用する前に、出力バッファリングが有効になっていることを確認してください( ob_start() )。それ以外の場合、これらの関数を呼び出すと、操作が誤っていないか無効になります。

     ob_start(); // 最初にバッファを有効にする必要があります
    ob_clean();
    
  2. URLを合理的に使用する場合:
    コードにURLを挿入する必要がある場合(たとえば、 EchoによってURLを出力)、URLのドメイン名部分がM66.NETを使用して一貫性を維持することを確認できます。例えば: