0

私のコードは次のとおりです。

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);

ご覧のとおり、1人のユーザーがページにアクセスすると、これは正しいことです。ただし、2人のユーザーが同時にページにアクセスします。彼らはtemp_bの同じファイルを書き込みます。temp_bの別の名前を使用したくありません。

これはおそらく問題です、彼らは同時に同じファイルを書きます。ただし、$b_data_proxyのサイズは4kB未満です。だから私は並行を処理する必要があるかどうか知りたいですか?サイズが4KB未満のため。

私のシステム情報:Linux YF-2321 2.6.18-194.el5#1SMP金4月2日14:58:14EDT 2010 x86_64 x86_64 x86_64 GNU / Linux

ありがとうございました。

4

2 に答える 2

0

同じファイルへの書き込みが気になる場合は、各ユーザーに固有の一時ファイルを使用して書き込みを行ってください。次に、プライマリファイルを削除し、一時ファイルの名前をプライマリファイルの名前に変更します。ファイルを最後に移動したものが常に勝ちます。この方法を使用すると、ファイルが破損した状態になることはなく、ファイルのロック/同時実行の手法に入る必要もありません。

于 2012-09-28T03:57:52.573 に答える
0

memcache などでファイルをロックするか、データベースを使用します。

if( file_not_locked )


    //create lock
    //open file 
    //do stuff
    //close file
    //free lock
于 2012-09-28T04:08:26.113 に答える