不要在页面重新加载时增加

时间:2014-08-09 19:27:25

标签: php hitcounter

我在我的页面上放了一个点击计数器。它读取文本文件,递增文件中的数字,稍后在页面中,我输出递增的值。

$hitsFile   = "hits/exps/stats.txt";
$hits       = file($hitsFile);
$hits[0]++;
$fp = fopen($hitsFile , "w");
flock($fh, LOCK_EX);
fwrite($fp , $hits[0]);
fclose($fp);

我的问题是,如果我重新加载页面,代码将增加命中。我不希望这样。我想过使用会话来修复它,但是对于会话,为了再次点击增量,我需要退出该站点并再次访问。我也不想要那个。

我希望它在我重新加载页面时不会增加,但是当我重新访问页面时。

例如,假设我有两页网站,主页和联系人,在联系页面上我有一个点击计数器。如果我重新加载(刷新)联系页面,我不希望点击计数器增加,但如果我离开联系页面并访问主页,然后重新访问联系页面,我希望它增加。

简而言之,我不希望它在页面重新加载时增加。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:2)

在每个页面中,您需要在会话中编写页面名称 做这样的事情:

$_SESSION['page'] = 'contact';

在您需要计算点击数的页面上,您需要检查此会话密钥 例如,如果您在页面上“联系”,那么$_SESSION['page'] == 'contact' 现在当你去参观'主页'时:

$page = $_SESSION['page'];
if($page != 'homepage')
{
    //increment your hits counter
    $_SESSION['page'] = 'homepage';
}

答案 1 :(得分:1)

我建议这个方法,是我的首选,在root中创建这些文件夹:“cnt”和“log”...然后在“cnt”文件夹中放入以下文件“cnt.php”和“showcnt.php”。 ..

cnt.php

<?php
  ##############################################################################
  # Php Counter With Advanced Technology For The Prevention Of Reloading Pages #
  # Version: 1.4 - Date: 13.11.2014 - Created By Alessandro Marinuzzi [Alecos] #
  ##############################################################################
  function cnt($file) {
    session_start();
    global $pagecnt;
    $reloaded = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
    $thispage = basename($_SERVER['SCRIPT_FILENAME']);
    if (!isset($_SESSION['first_go'])) {
      $_SESSION['first_go'] = 1;
      $first_go = TRUE;
    } else {
      $first_go = FALSE;
    }
    if (!isset($_SESSION['thispage'])) {
      $_SESSION['thispage'] = $thispage;
    }
    if ($_SESSION['thispage'] != $thispage) {
      $_SESSION['thispage'] = $thispage;
      $new_page = TRUE;
    } else {
      $new_page = FALSE;
    }
    $pagecnt = rtrim(file_get_contents($file));
    if ((!$reloaded) && ($new_page == TRUE) || ($first_go == TRUE)) {
      $fd = fopen($file, 'w+');
      flock($fd, LOCK_EX);
      fwrite($fd, ++$pagecnt);
      flock($fd, LOCK_UN);
      fclose($fd);
    }
  }
?>

showcnt.php

<?php
  ##############################################################################
  # Show Counter Results - v.1.4 - 13.11.2014 By Alessandro Marinuzzi [Alecos] #
  ##############################################################################
  function gfxcnt($file) {
    global $number;
    $number = rtrim(file_get_contents($file));
    $lenght = strlen($number);
    $gfxcnt = "";
    for ($i = 0; $i < $lenght; $i++) {
      $gfxcnt .= $number[$i];
    }
    $gfxind = "<span class=\"counter\"><span class=\"number\">$gfxcnt</span></span>";
    echo $gfxind;
  }
?>

那么,然后编辑你的index.php或其他php页面......并在这段代码的开头加上:

<?php session_start(); include("cnt/cnt.php"); cnt("log/index.txt"); include("cnt/showcnt.php"); ?>

好吧,然后编辑index.php或其他php页面......并使用这段代码读取计数器文件:

<?php gfxcnt("log/index.txt"); ?>

这就是全部,我希望你会发现我的答案很有用:)我的计数器可以写/读多个php页面......

来源:我的博客(https://www.alecos.it/new/101/101.php

答案 2 :(得分:0)

  1. 仅当当前网址未存储在$_SESSION['url']
  2. 时才更新匹配计数
  3. 更新点击次数后,将当前网址存储在$_SESSION['url']

答案 3 :(得分:0)

session_start();添加到顶部。

现在改变你的if:

if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
   $hits[0]++;
}

$_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];

如果他们想要递增计数器,这基本上会迫使某人移动到另一个页面。