関数の概要
PHPの fflush 関数は、ファイルポインタに関連付けられた出力バッファを強制的に書き込み先(ファイルやストリーム)へフラッシュ(書き出し)するための関数です。通常、ファイルに書き込みを行う際はバッファにデータが溜まってから一括して書き込まれますが、fflush を使うことで即座に内容をディスクに反映させることが可能になります。ファイルへのログ書き出しやリアルタイム処理で重要な役割を果たします。
パラメータの説明
resource $stream– ファイルポインタ。fopen()やfsockopen()などで取得したリソースを指定します。
戻り値
成功した場合は true を返し、失敗した場合は false を返します。通常、書き込みバッファのフラッシュに成功すれば true が返りますが、ファイルポインタが無効な場合などは false となります。
使用例
基本的な使い方
<?php
// ファイルを開く
$fp = fopen('example.txt', 'w');
if ($fp === false) {
die('ファイルを開けませんでした。');
}
// ファイルに書き込み
fwrite($fp, "こんにちは、世界!n");
// バッファを即座にフラッシュして書き込み内容を反映
fflush($fp);
// ファイルを閉じる
fclose($fp);
?>
この例では、一旦ファイルに書き込みを行い fflush でバッファを即座に反映させています。これによって、スクリプト終了前でもデータが確実にファイルに保存されます。
ログファイルへの追記と即時反映
<?php
$logFile = 'app.log';
$fp = fopen($logFile, 'a');
if ($fp === false) {
exit('ログファイルを開けません。');
}
fwrite($fp, date('Y-m-d H:i:s') . " - 処理が実行されました。n");
// すぐに内容を反映させる
fflush($fp);
fclose($fp);
?>
ログファイルなどに書き込む際、処理がすぐにログとして反映されるように fflush を使います。サーバーダウンなどで途中で処理が止まってもログが残ります。
ソケット通信での利用例
<?php
// サーバーに接続
$fp = fsockopen('tcp://example.com', 80, $errno, $errstr, 30);
if (!$fp) {
echo "接続に失敗しました: $errstr ($errno)";
exit;
}
// HTTPリクエスト送信
fwrite($fp, "GET / HTTP/1.1rnHost: example.comrnrn");
// バッファをフラッシュして送信
fflush($fp);
// レスポンス受信
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
?>
ソケット通信で書き込み後に fflush を呼び出すことで、即座にサーバーへリクエストを送信できます。通信時のタイミング制御に役立ちます。
関連する関数
fwrite()– ファイルにデータを書き込むfopen()– ファイルを開くfclose()– ファイルを閉じるfsockopen()– ソケット接続を開くfflush()– ファイル・ストリームの出力バッファをフラッシュする
まとめ
fflush はPHPでファイルやストリームへ書き込んだデータを、バッファに貯めず即座に反映させたい場合に便利な関数です。ログ処理やリアルタイム通信など、データの即時保存や送信が必要な場面で活用できます。書き込みバッファの扱いを理解し、適切に fflush を使うことで信頼性の高いファイル操作が実現します。
