我在我的页面上放了一个点击计数器。它读取文本文件,递增文件中的数字,稍后在页面中,我输出递增的值。
$hitsFile = "hits/exps/stats.txt";
$hits = file($hitsFile);
$hits[0]++;
$fp = fopen($hitsFile , "w");
flock($fh, LOCK_EX);
fwrite($fp , $hits[0]);
fclose($fp);
我的问题是,如果我重新加载页面,代码将增加命中。我不希望这样。我想过使用会话来修复它,但是对于会话,为了再次点击增量,我需要退出该站点并再次访问。我也不想要那个。
我希望它在我重新加载页面时不会增加,但是当我重新访问页面时。
例如,假设我有两页网站,主页和联系人,在联系页面上我有一个点击计数器。如果我重新加载(刷新)联系页面,我不希望点击计数器增加,但如果我离开联系页面并访问主页,然后重新访问联系页面,我希望它增加。
简而言之,我不希望它在页面重新加载时增加。有没有办法做到这一点?
答案 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页面......
答案 2 :(得分:0)
$_SESSION['url']
。$_SESSION['url']
。答案 3 :(得分:0)
将session_start();
添加到顶部。
现在改变你的if:
if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
$hits[0]++;
}
$_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];
如果他们想要递增计数器,这基本上会迫使某人移动到另一个页面。