首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP计数器问题

PHP计数器问题
EN

Stack Overflow用户
提问于 2015-06-25 04:24:12
回答 1查看 96关注 0票数 1

我有一个计数器,它应该递增1,但它却递增2。我有控制器和视图。这是一个简单的练习,但我不确定为什么它会递增2。

http://screencast.com/t/w9w7GndQK

控制器

代码语言:javascript
复制
function setCount($fileName = 'counter.txt') {
if (file_exists($fileName)) {

    //read the value
    $handle = fopen($fileName, 'r');

    // increment it by one
    $count = (int) fread($handle, 20) + 1;

    // write the new value
    $handle = fopen($fileName, 'w');
    fwrite($handle, $count);

    // close the file
    fclose($handle);
} else {

    // create the file
    $handle = fopen($fileName, 'w+');
    $count = 1;

    // set a default value of 1
    fwrite($handle, $count);
    fclose($handle);
}


return $count;
}

$count = setCount();

require('index.tmpl.php');

查看:

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Counter</title>
    <link rel="stylesheet" href="#">
</head>
<body>
    <p>You are the <?php echo $count; ?>visitor to this website.</p>
</body>
</html>
EN

回答 1

Stack Overflow用户

发布于 2015-06-25 05:09:36

为此使用文本文件是不好的做法,并且可能导致不一致的行为。例如,当两个访问者同时访问网站时:访问者1打开文件,将存储值增加到5到6,在保存更改之前,另一个访问者打开文件并执行相同的操作。现在一个访问者被删除了,因为在这两种情况下,计数器只会增加两个访问者的位置。

相反,您应该使用像MySQL这样的数据库来存储数据。这也使得构建更详细的计数器变得很容易。例如,您可以获得关于每天有多少人访问该页面的统计数据,或者哪些时间是访问最频繁的时间。还可以跟踪用户系统的详细信息(例如,用户代理,它显示用户的浏览器+版本和操作系统),或者记录referer,以获得您的访问者从哪个页面访问您的信息。

简单的计数器表可以由时间戳和访问者的ip地址组成。

代码语言:javascript
复制
CREATE TABLE pageviews(
    datetime INT UNSIGNED NOT NULL,
    ip VARCHAR(15) NOT NULL
);

要跟踪访问者,您需要运行以下查询:

代码语言:javascript
复制
INSERT INTO pageviews
SET datetime = UNIX_TIMESTAMP(),
    ip = "' . $db->escape( $_SERVER['REMOTE_ADDR'] ) . '"

现在,您可以根据需要提取数据。对于total-COUNT,您可以简单地对表执行COUNT(*):

代码语言:javascript
复制
SELECT COUNT(*) AS totalViews
FROM pageviews

你可以自由地展示你想要的东西,例如我之前提到的每天分组。

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

https://stackoverflow.com/questions/31036291

复制
相关文章

相似问题

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