« PHP:fflush()関数 | メイン | PHP:fwrite()関数 »

2006年12月01日

PHP:set_file_buffer()関数

set_file_buffer()関数は、ファイル書き込み時に確保するバッファのサイズを設定します。

※通常fwrite()・fputs()関数などのファイル書き込みの場合には8KBのバッファが確保されます。
※引数に0を指定した場合にはバッファリングを無効にします。

set_file_buffer(intFp, intBuf);

intFp:fopen・fsockopen()関数などによって返されたファイルポインタ
intBuf:確保するバッファサイズ

set_file_buffer()関数の使い方について

2つのプロセスが同一ファイルに対して同時に書き込み処理を実行しようとした場合、最初のプロセスは8KBのデータを書き込んだ後に待機状態となり、次のプロセスの書き込みを許可します。こうした場合、最初の処理が行われる前に次の処理が実行される可能性があります。

set_file_buffer()関数のintBufに0を指定して実行することによりバッファを無効にすることで、他のプロセスの書き込みを許可する前に現在のプロセスの書き込みが完了することが保証されます

たとえば、アクセスログを特定ファイルに書き込む際などにアクセスしたユーザのデータを一行ずつ書き込みたい場合などには、fwrite()関数などの実行前に、set_file_buffer()関数を実行してバッファを無効にしておく必要があります。


$fp = fopen("data.dat", "w");

set_file_buffer($fp, 0);  //バッファを無効にする

fwrite($fp, $_SERVER['REMOTE_ADDR']);  //クライアントのリモートIPを書き込み

fclose($fp);

※このように記述することにより、各プロセスの書き込みを順番に処理します。

投稿者 wing : 2006年12月01日 00:23

コメント