用1小时/ 24小时编写点击次数的程序(PHP)

时间:2013-10-15 22:47:38

标签: php mysql

我正在尝试编写点击封顶程序 - 基本上是流量控制。 (在PHP中)

我的目标是记录(到文本文件)每小时的点击次数(使用增量计数器)。从那里,我将编写一个程序,根据是否满足点击上限重定向流量。所以...伪代码

if ($cap <= $currentCount){   //cap is the max, currentCount is the current click rate
    go here
}else{
    go here
}

我不确定如何访问的数据是$ currentCount。基本上,它是24小时内的总点击次数。我该如何记录?

我怎么会开始接近这个?任何线索,提示或提示?对于如何解决这个问题,我一点也不知道。

:编辑:

我发现了这个问题的合理解决方案。对于今后遇到这种需求的人,我将在下面重点介绍。

我的公司处理buku数量的流量。因此,我们需要一种方法来管理多余的部分,并在需要的地方进行指导。目标是编写某种点击计数器,以便我们维持点击次数(如果我们获得一个广告每天的最大点击次数,我们不希望通过将其发送到该网站来浪费我们的流量,那些广告,我们希望能够重定向到另一个广告。)

我们将使用Redis来执行此任务,因为在流量非常大的情况下使用数据库的i / o会耗尽数据库,并且出于同样的原因使用文件系统解决方案是不可能的(并且如下所述,将导致文件锁定,并失去点击日志记录)。

这样的事情:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$redis->set('key', 'val');

echo $redis->get('key'); 
$redis->incr( 'counter', 1 ); // increment your counter
$counter = $redis->get( 'counter' );
if ( $counter > 100000 ) redirect( site1 );
redirect( site2 );

感谢所有帮助过的人!

2 个答案:

答案 0 :(得分:2)

我首先开始关注jQuery。

实际捕获鼠标点击的唯一方法是客户端。对此方法是在每次点击时向服务器发送AJAX请求,或者跟踪计数器并每隔几分钟将其发送到服务器,但请注意,客户端方法很容易被其他人伪造,因此即使没有必要也会触发您的脚本。

但是,您可能需要详细说明点击的确切含义,因为上述内容似乎不太可能。如果你的意思是访问请求,你可以

  1. 在过去一小时内解析Apache访问日志文件中的请求
  2. 在每个请求中输入数据库
  3. 为每个请求写一个单独的文件
  4. 我建议采用第一种方法,因为这对你的表现影响最小。

    希望我完全回答:)

答案 1 :(得分:2)

使用文本文件是一个非常糟糕的主意,因为有两件事:

  1. 并发访问。如果两个用户在同一时间点击怎么办?这两个幸运中最快的一个将打开文本文件并写入它。如果有文件锁定,第二个将无法写入,因为它无法锁定文件,或者(如果你写了一些复杂的东西)它将等待并占用处理时间,直到它可以打开文件。如果没有文件锁定,则两个进程将同时打开同一个文件,并且只有最后一个保存文件的文件实际上会保存其更改。从本质上讲,要么只有其中一个用户会被记录,要么第二个用户会遇到恼人的延迟。

  2. 文件可能会变大。它越大,添加到日志和检索日志所需的时间就越长。

  3. 您应该使用数据库表(如MYSQL),而不是使用文本文件。这真的很容易。 (如果你使用MYSQL,请使用mysqli或pdo。不要使用mysql_ *因为它已被弃用。因特网上有许多mysql_ *函数的例子,因为它们是旧的例子。不要使用它们。)

    您所要做的就是拥有一些基本代码,每次有人点击您的页面时都会在数据库表中插入一行。此表应该有一个时间戳列,名称类似ClickTime,设置为自动将其自身设置为CURRENT_TIMESTAMP而无需执行任何操作。如果您需要的唯一信息是发生了点击,您只需要说

    INSERT INTO clicklogtable
    

    如果您需要跟踪IP地址,则更像是

    INSERT INTO clicklogtable (ClickIP) VALUE ('xxx.xxx.xxx.xxx')
    

    然后,您可以要求数据库轻松地为您提供过去24小时内的行数:

     SELECT COUNT(ClickID) AS NumberOfClicks FROM clicklogtable
     WHERE ClickTime >= NOW() - INTERVAL 1 DAY
    

    那里的“NumberOfClicks”值是对最后一天点击次数的回答。相同的语法可以为您提供最后一小时,最后45分钟或您想要的任何其他时间间隔。