【问题标题】:PHP counter resetsPHP 计数器重置
【发布时间】:2013-04-16 17:27:54
【问题描述】:

我的 PHP 计数器有问题。我需要计算两个变量,用 | 分隔,但计数器经常重置为 |1。我已经使用了flock 函数,但它仍然不起作用。此外,有时它不会增加变量的值。

numeri.txt(计数器):

5098|561307

这是 PHP 脚本:

$filename="numeri.txt";
$contents=file_get_contents($filename);
$fp=fopen($filename,'a');
if(!flock($fp,LOCK_EX))
{
    while(true)
    {
        usleep(100000);
        if(flock($fp,LOCK_EX))
        {
            break;
        }
    }
}
ftruncate($fp,0);
$contents=explode("|",$contents);
$clicks=$contents[0];
$impressions=$contents[1]+1;
fwrite($fp,$clicks."|".$impressions);
flock($fp,LOCK_UN);
fclose($fp);

如何修复代码?

【问题讨论】:

  • 这是你的作业吗? :D
  • 这个问题有什么关系?
  • 为什么你在 flock 调用中做一个非阻塞,然后用一个 while 循环阻塞脚本?为什么不让操作系统做阻塞呢?
  • 我应该删除“LOCK_NB”吗?
  • 条件 if($locked) 什么都不做,到你的脚本的这一点,$locked 将始终为真。

标签: php counter reset


【解决方案1】:

如果您的输出重置为“|1”,则您的 $contents 变量未设置为任何有用的值。

也尝试每次都编写 $contents 变量,以便在输出为“|1”的情况下查看它是什么。

我认为 $contents 是问题所在,但您没有显示该变量最初设置的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-08
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多