首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命中计数器随机重置/丢弃非常低的值

命中计数器随机重置/丢弃非常低的值
EN

Stack Overflow用户
提问于 2012-07-12 20:19:30
回答 2查看 195关注 0票数 0

我正在使用以下基本PHP:

代码语言:javascript
复制
<?php

    if (file_exists('count_file.txt')) 
    {
        $fil = fopen('count_file.txt', r);
        $dat = fread($fil, filesize('count_file.txt')); 
        echo $dat+1;
        fclose($fil);
        $fil = fopen('count_file.txt', w);
        fwrite($fil, $dat+1);
    }

    else
    {
        $fil = fopen('count_file.txt', w);
        fwrite($fil, 1);
        echo '1';
        fclose($fil);
    }
?>

作为一个点击计数器(我不想有,但有人坚持要)。txt文件会记录点击次数,它会随机works...however计数器(有时是几周后,有时是几个月后),然后决定出错并从4300下降到11。有谁能告诉我如何纠正它,因为它变得很烦人?

EN

回答 2

Stack Overflow用户

发布于 2012-07-12 20:22:04

您没有使用任何锁定。如果两个或更多的请求同时访问您的服务器,它们将会互相践踏对方的文件操作。这类事情最好在数据库中完成。

票数 1
EN

Stack Overflow用户

发布于 2012-07-12 20:25:08

filesize函数告诉您文件中的字节数。PHP.net可以向您描述函数是如何工作的。与使用该函数不同,您应该从文件中读取一行(fgets) (该行上应该有命中计数),然后将命中计数加1,然后重新保存。

让我给你一个类比。你在厨房里,拿出一个装满蓝莓的容器,你想知道里面有多少蓝莓,但你却问容器有多少英寸长。然后你把所有的蓝莓都扔掉,把几英寸+1英寸的蓝莓放进容器里。这没有任何意义,但这就是你的脚本所做的。如果您将行:$dat = fread($fil,filesize('count_file.txt'));更改为$dat = fgets($fil);,您应该读取您有多少个蓝莓,将该数字加1,然后重新保存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11451701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档