0

我有一个 php 脚本,用于记录网站的广告(横幅)并将它们存储到 .dat 文件中。在此文件中保存了 ID、URL 和其他重要信息。我遇到的问题是页面上在任何给定时间都有 4 个广告,因此当 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 回答