PHPプログラミングでは、 exitとob_end_flush()が2つの一般的な関数です。 exitはスクリプトの実行を終了するために使用され、 ob_end_flush()はキャッシュされたコンテンツを出力し、出力バッファーを閉じるために使用されます。 2つの機能は異なって行いますが、場合によっては一緒に使用することがあります。それで、 exitとob_end_flush()が一緒に使用されると、それらは競合しますか?詳細な分析を通じて、それらの互換性を理解します。
exit()関数は、現在のスクリプトの実行を終了するか、ステータスコードを出力して実行を終了するために使用されます。次のように、非常に簡単に使用できます。
exit("Goodbye!");
このコード行には、「さようなら!」と印刷されます。スクリプトの実行を終了します。 Exitは、スクリプト実行のステータスコードとして整数パラメーターを受信することもできます。スクリプトが致命的なエラーに遭遇した場合、出口(1)を介して出口が一般的であり、通常は出口(0)を介して終了することができます。
exit(1); // ステータスコードを終了して返します 1
ob_end_flush()は、php出力バッファーに関連する関数です。その目的は、バッファコンテンツをブラウザに出力し、出力バッファーを閉じることです。出力バッファがオンになっていない場合、この関数を呼び出すと警告が発生します。
ob_start(); // 出力バッファリングを開始します
echo "Hello, world!";
ob_end_flush(); // バッファを出力してバッファを閉じます
ob_end_flush()を呼び出すとexit()を使用すると、 exit()はスクリプトの実行を直接終了します。これは、 Exit()が呼び出された場合、出力される可能性のあるバッファーコンテンツを含む後続のPHPコードの実行を停止することを意味します。したがって、 exit()は、出力バッファーの内容がブラウザに完全に送信されるのを防ぎます。
ob_start(); // 出力バッファリングを開始します
echo "Hello, ";
ob_end_flush(); // 最初に出力キャッシュ
exit("Goodbye!"); // 埋め込む exit,スクリプト終了
この例では、 「こんにちは」はob_end_flush()と「さようなら!」を介して出力されます。 Exit()によって中止されます。したがって、 exit()の前にob_end_flush()が呼び出された場合、以前のコンテンツは正しく出力されますが、次のexit()は再び出力されません。
最初にOB_END_FLUSH()を実行し、出力バッファーのコンテンツが現時点でブラウザに送信された場合、 Exit()が後で呼び出された場合でも、ブラウザは出力を受信し、 Exit()の影響を受けなくなります。言い換えれば、 ob_end_flush()は最初にバッファの内容をブラウザにリリースし、 exit()はスクリプトの実行を終了します。
ob_start(); // 出力バッファリングを開始します
echo "Starting...";
ob_end_flush(); // バッファを出力してバッファを閉じます
exit("Ending now.");
この例では、ブラウザは最初に「起動...」を表示し、次にスクリプトはすぐに終了し、 「今すぐ終了」します。表示されません。
最初にob_end_flush()を呼び出し、exit() :通常は問題ありません。OB_END_FLUSH ()はバッファーコンテンツを出力し、 Exit()はスクリプトの実行を終了します。
最初にexit()を呼び出し、次にob_end_flush()を呼び出してから、 exit()がob_end_flush()の前に呼び出された場合、出力バッファコンテンツはブラウザに送信されません。 exit()はスクリプトの実行を直接終了するため、すべての後続のコード( ob_end_flush()を含む)は実行されません。
ネストされた出力バッファリング: OB_START()またはOB_FLUSH()がOB_END_FLUSH()を呼び出す前に複数回使用されている場合、出力またはバッファーエラーの不必要な複製を避けるために、コール注文に注意してください。
exit()およびob_end_flush()で使用すると競合が発生するかどうかは、呼び出しの順序によって異なります。不必要な問題を回避するには、 ob_end_flush()を呼び出した後、常にexit()を呼び出すことをお勧めします。これにより、スクリプトが終了する前に出力バッファーの内容が正しく出力されるようにします。 ob_end_flush()がexit()の前に呼び出された場合、バッファコンテンツが処理され、 exit()がスクリプトの実行にのみ影響することを確認できます。
これら2つの機能のコールオーダーを合理的に管理することにより、プログラムの出力がexit()のコールによって影響を受けることがなく、競合を回避することができます。