[PHP-users 10949] Flockについて

Yoshi php-users@php.gr.jp
Fri, 18 Oct 2002 20:31:34 -0700


flock()をしてるんですが、サーバーファイル内のデータ消えた
と言われる方おられますか??

普段は消えないんですが、アクセスが多くなってくると
消える確立が高くなってきます。
設定としてはサーバー内の他のプログラムなどが
同じファイルを参照したりはしてないはずなんですが、
多分PHPを通じてファイルへの書き込みアクセスが
重複したときに消えてる見たいです・・・

以前PHPではPHP以外の外部プログラムからの
ファイル参照を完全にLOCKできないと何処かで
見たような気がするんですが、同じPHP上でも
完全にLOCK出来ないんでしょうか?

この現象にはほとほと困っています。
どなたかお助けを・・・


サーバーはDebian GNU/Linux 2.2で、
PHP4(i18n非対応)で、CIGとして動かしてます。
問題のファイル参照時はこんな感じのFUNCTIONを使ってます。
あと、wlockinはあまりに消えるんで、自分でもう一つファイルを
作ってLOCKをする関数を作って適応してます。
(これは実際の書き込みはしないので、気にしないで下さい)


  function file_write( $FileName , $DATA , $mode ){

   if( $lockid = wlockin ( $FileName ) ){ //ファイルロック(自作)

    if($fp = @fopen ( $FileName , "$mode")){

     if(flock( $fp , LOCK_EX )){ //flock

      fputs ($fp , $DATA );

      fflush ( $fp );

      flock ( $fp , LOCK_UN ); //flock

      fclose ($fp);

     }

    }

    wlockout( $lockid );//ファイルロック開放(自作)

    return 1;

   }

  }