PHP Flock写入打开文件

时间:2013-03-15 23:41:41

标签: php fopen flock fclose

我有一个PHP脚本,可以记录网站的广告(横幅)并将它们存储到.dat文件中。在此文件中,将保存ID,URL和其他重要信息。我遇到的问题是,在任何给定时间页面上都有4个广告,因此当php脚本在打开时尝试写入时,.dat文件经常会损坏。
我检查并尝试了这个解决方案,但它没有帮助我: PHP Simultaneous file access / flock() issue

我目前使用的功能如下:

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);
}

任何帮助都会受到赞赏,因为我一直在摸不着头脑。 侧面的信息,客户端不希望他们的代码被重写为使用数据库而不是文件,以便选项出来。

谢谢!

2 个答案:

答案 0 :(得分:1)

fopen with'w'在你可以选择植绒之前截断文件。

答案 1 :(得分:0)

您几乎不想使用flock解锁文件;只需使用fclose;当句柄关闭时,文件将被解锁,这样你知道解锁后不会发生缓冲写入。