flush

関数の概要

PHPの flush 関数は、出力バッファに溜まった内容をブラウザに即座に送信するために使われます。通常、PHPは出力を一定量貯めてからまとめて送信しますが、flush を使うことでバッファ内のデータを強制的に送ることができ、ユーザーに対してリアルタイムな情報表示が可能になります。

パラメータの説明

  • flush() はパラメータを受け取りません。

戻り値

flush は成功時に true、失敗時に false を返します。しかし、多くの場合戻り値は無視されることが一般的です。

使用例

例1: 基本的な使い方

<?php
echo "処理開始...<br>";
flush(); // ここでブラウザに出力を送る

sleep(3); // 3秒待つ

echo "処理完了!<br>";
?>

このコードは「処理開始…」をすぐにブラウザに表示し、その後3秒待ってから「処理完了!」を表示します。通常はすべての出力がまとめて表示されるため、顕著な違いを感じられます。

例2: 長時間処理の経過を表示する

<?php
echo "データ処理中...<br>";
flush();

for ($i = 1; $i <= 5; $i++) {
    echo "ステップ {$i} 完了<br>";
    flush();
    sleep(1);
}
echo "全ての処理が終わりました。<br>";
?>

この例ではループごとに出力を送信し、ユーザーに処理の進捗を逐次的に通知します。

例3: output_buffering が有効な場合の注意点

<?php
// output_buffering が有効な場合、このコードだけではブラウザに即座に出力されないことがあります
echo "バッファリング中...<br>";
flush(); // 期待通りに動作しない場合がある

// バッファを明示的にクリアする
while (ob_get_level()) {
    ob_end_flush();
}
flush();
?>

PHPの設定で output_buffering が有効だと、flush() の効果が限定的になります。バッファを手動でクリアしてから flush() を使うと確実に送信できます。

関連する関数

  • ob_flush() – PHPの出力バッファをフラッシュ(クリア)する
  • ob_end_flush() – 出力バッファをフラッシュしてバッファリングを終了する
  • implicit_flush() – 出力を自動的にフラッシュする設定を行う

まとめ

flush() はPHPの出力バッファに溜まったデータを即座にブラウザに送信するための関数です。リアルタイムに処理の途中経過を表示したい場合などに重宝します。ただし、PHPのoutput_buffering設定やWebサーバの設定、ブラウザの仕様によっては期待どおりに動作しないこともあります。必要に応じて ob_flush() と組み合わせたり、出力バッファリングの設定を調整することが推奨されます。