0

Web サイトの広告 (バナー) をログに記録し、それらを .dat ファイルに保存する php スクリプトがあります。このファイル内には、ID、URL、その他の重要な情報が保存されます。私が抱えている問題は、常にページに 4 つの広告があるため、.dat ファイルが開いているときに php スクリプトが書き込もうとすると、.dat ファイルが破損することが多いことです。
この解決策を確認して試してみましたが、役に立ちませんでした: PHP 同時ファイル アクセス / flock() の問題

私が現在使用している関数は次のようになります。

function writeads(){
    global $bannerAdsPath, $ads, $bannerAds;
    $data = fopen($bannerAdsPath, 'w') or die();
    flock($data, 2) or die();
    fputs($data, @join("\n", $ads)."\n");
    while (list ($key, $val) = each ($bannerAds)) {
        if (($key != '') && ($val != '')) {
            fputs($data, $key.'='.$val."\n");
        }
    }
    flock($data, 3);
    fclose($data);
    reset($bannerAds);
}

私はこれについてしばらく頭を悩ませていたので、どんな助けもいただければ幸いです。ちょっとした情報ですが、クライアントは、ファイルの代わりにデータベースを使用するようにコードを書き直すことを望んでいなかったため、そのオプションはありません。

ありがとう!

4

2 に答える 2

2

'w' を指定した fopen は、ファイルをフロックするオプションを選択する前に、ファイルを切り捨てます。

于 2013-05-10T16:46:11.327 に答える
0

flockファイルのロックを解除するために使用することはほとんどありません。使用するだけfcloseです; ハンドルを閉じるとファイルのロックが解除されます。これにより、ロックを解除した後、バッファリングされた書き込みが発生しないことがわかります。

于 2013-03-15T23:44:01.150 に答える