Php 页面重新加载时不增加

Php 页面重新加载时不增加,php,hitcounter,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); 我的问题是,如果我重新加载页面,代码将增加命中率。我不想那样。我想

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

$hitsFile   = "hits/exps/stats.txt";
$hits       = file($hitsFile);
$hits[0]++;
$fp = fopen($hitsFile , "w");
flock($fh, LOCK_EX);
fwrite($fp , $hits[0]);
fclose($fp);
我的问题是,如果我重新加载页面,代码将增加命中率。我不想那样。我想用session来解决这个问题,但是使用session,为了再次增加点击量,我需要退出站点并再次访问。我也不想那样

我希望它不是在重新加载页面时增加,而是在重新访问页面时增加

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

简而言之,我不希望它在页面重新加载时增加。有办法吗

  • 仅当当前URL未存储在
    $\u会话['URL']
    中时,才更新命中计数
  • 更新命中计数后,将当前URL存储在
    $\u会话['URL']
  • 仅当当前URL未存储在
    $\u会话['URL']
    中时,才更新命中计数
  • 更新命中计数后,将当前URL存储在
    $\u会话['URL']
  • 仅当当前URL未存储在
    $\u会话['URL']
    中时,才更新命中计数
  • 更新命中计数后,将当前URL存储在
    $\u会话['URL']
  • 仅当当前URL未存储在
    $\u会话['URL']
    中时,才更新命中计数
  • 更新命中计数后,将当前URL存储在
    $\u会话['URL']
  • 添加
    session_start()到顶部

    现在将您的if更改为:

    if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
       $hits[0]++;
    }
    
    $_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];
    
    这基本上会迫使某人移动到另一个页面,如果他们想增加计数器。

    Add
    session_start()到顶部

    现在将您的if更改为:

    if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
       $hits[0]++;
    }
    
    $_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];
    
    这基本上会迫使某人移动到另一个页面,如果他们想增加计数器。

    Add
    session_start()到顶部

    现在将您的if更改为:

    if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
       $hits[0]++;
    }
    
    $_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];
    
    这基本上会迫使某人移动到另一个页面,如果他们想增加计数器。

    Add
    session_start()到顶部

    现在将您的if更改为:

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

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

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

    $_SESSION['page'] = 'contact';
    
    在需要计算点击次数的页面上,需要检查此会话密钥。
    例如,如果您在“联系人”页面,则
    $\u会话['page']=='contact'

    现在,当您访问“主页”时:

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

    在每个页面中,您需要在会话中写入页面名称。
    这样做:

    $_SESSION['page'] = 'contact';
    
    在需要计算点击次数的页面上,需要检查此会话密钥。
    例如,如果您在“联系人”页面,则
    $\u会话['page']=='contact'

    现在,当您访问“主页”时:

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

    在每个页面中,您需要在会话中写入页面名称。
    这样做:

    $_SESSION['page'] = 'contact';
    
    在需要计算点击次数的页面上,需要检查此会话密钥。
    例如,如果您在“联系人”页面,则
    $\u会话['page']=='contact'

    现在,当您访问“主页”时:

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

    在每个页面中,您需要在会话中写入页面名称。
    这样做:

    $_SESSION['page'] = 'contact';
    
    在需要计算点击次数的页面上,需要检查此会话密钥。
    例如,如果您在“联系人”页面,则
    $\u会话['page']=='contact'

    现在,当您访问“主页”时:

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

    我建议,我更喜欢这种方法,在根目录中创建以下文件夹:cntlog。。。然后将以下文件放入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);
        }
      }
    ?>
    
    <?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页面


    来源:我的博客()

    我建议这种方法,是我的首选,在根目录中创建这些文件夹:cntlog。。。然后将以下文件放入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);
        }
      }
    ?>
    
    <?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页面


    来源:我的博客()

    我建议这种方法,是我的首选,在根目录中创建这些文件夹:cntlog。。。然后将以下文件放入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);
        }
      }
    ?>
    
    <?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页面


    来源:我的博客()

    我建议这种方法,是我的首选,在根目录中创建这些文件夹:cntlog。。。然后将以下文件放入cnt文件夹
    cnt.php
    showcnt.php