ob_flush

関数の概要

PHPの ob_flush 関数は、現在の出力バッファの内容をブラウザなどのクライアントに送信し、バッファを空にします。出力バッファリングを使用している場合、バッファに溜まったデータを手動で強制的に出力したいときに利用します。

パラメータの説明

  • ob_flush はパラメータを受け取らず、関数の呼び出しのみで処理が行われます。

戻り値

処理が成功すると true を返し、失敗した場合は false を返します。失敗の主な原因は、出力バッファリングが開始されていない場合です。

使用例

基本的な使い方

<?php
ob_start();

echo "処理開始...<br>";
ob_flush(); // バッファをクライアントに送信して空にする

sleep(2); // 処理の遅延を模擬

echo "処理中...<br>";
ob_flush();

sleep(2);

echo "処理完了。";

ob_end_flush();
?>

この例では、ob_start() で出力バッファリングを開始し、途中で ob_flush() を呼び出してバッファの内容を出力しています。sleep関数で処理の遅延を表現しつつ、途中経過を逐次クライアントに送信する使い方です。

バッファを使ったリアルタイム処理表示

<?php
ob_start();

for ($i = 1; $i <= 5; $i++) {
    echo "ステップ {$i} 完了。<br>";
    ob_flush();
    flush();
    sleep(1);
}

ob_end_flush();
?>

ループ処理の途中経過をリアルタイムで出力しています。ob_flush() で出力バッファの内容を送り、その後に flush() を使いサーバの出力バッファもクリアすることで、画面にすぐ反映させています。

外部出力との組み合わせ

<?php
ob_start();

echo "<h1>データ取得中...</h1>";
ob_flush();
flush();

// ここでAPIコールや重い処理を実行
sleep(3);

echo "<p>データ取得完了!</p>";
ob_end_flush();
?>

重い処理前にメッセージをクライアントに送り、処理中の待ち時間をユーザに見せる例です。ob_flush() 使用でバッファ出力をリアルタイムに行うため、ウェブページの応答性が良くなります。

関連する関数

  • ob_start() – 出力バッファリングを開始する
  • ob_end_flush() – バッファの内容を出力してバッファリングを終了する
  • flush() – PHPの内部バッファをサーバからクライアントへフラッシュする
  • ob_clean() – バッファの内容を破棄する(出力せずに空にする)

まとめ

ob_flush() は、PHPの出力バッファリングを利用している際に、溜まった出力を即座にクライアントへ送信したい場合に使う便利な関数です。バッファリング開始時の ob_start() と組み合わせて使い、適切にフラッシュを繰り返すことで処理の途中経過をリアルタイムに表示できます。特に重い処理やAPI通信などの待ち時間をユーザに見せる場面で有効です。出力バッファリングを開始していない状態では機能しないため、その点に注意しましょう。