网页不同页面上的页面计数器
问题描述:
<?php
ob_start();
session_start();
$counter_name = "index.txt";
// Check if a text file exists. If not create one and initialize it to zero.
if (!file_exists($counter_name)) {
$f = fopen($counter_name, "w");
fwrite($f,"0");
fclose($f);
}
// Read the current value of our counter file
$f = fopen($counter_name,"r");
$counterVal = fread($f, filesize($counter_name));
fclose($f);
// Has visitor been counted in this session?
// If not, increase counter value by one
if(!isset($_SESSION['hasVisited'])){
$_SESSION['hasVisited']="yes";
$counterVal++`enter code here`;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
}
?>
我使用此代码来计算一个页面上使用会话的访问者数量。 但我想在所有其他页面上保留页面计数器。所以当我将代码复制并粘贴到其他页面时,值不会递增。它只会在第一页上增加,而不会在我访问的其他页面上增加。什么是可能的解决方案?网页不同页面上的页面计数器
答
我在我的网站上通过在数据库中存储信息来做到这一点。这比使用txt文件更安全,所以你应该考虑这样做。而且您可以使用IP与SESSION一起更加彻底地保存记录。制作一个流量日志记录文件,将其包含在将使用请求URI,IP,会话标识/用户标识的头文件中。
通过使用请求URI,您可以将单一流量记录脚本放在所有页面上,以处理您想要跟踪的所有不同网页。如果你愿意,我可以添加一些代码示例。
希望这可以帮助你!
*/
Define Variables You Want To Store..In this case it is preparing a timestamp, the page (i.e. the $_SERVER['REQUEST_URI']), and the IP
/*
$time = time();
$page = $_SERVER['REQUEST_URI'];
//This is used to sort out the correct IP Address to store //
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} elseif(filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else {
$ip = $remote;
}
//Use this if you want to see if the data exists already, I usually just store all traffic to make sure people aren't up to anything fishy//
$stmt = $database->prepare("SELECT ID FROM traffic WHERE IP = :IP AND page = :page");
$stmt->bindParam(':IP', $ip);
$stmt->bindParam(':page', $page);
$stmt->execute();
$result = $stmt->FetchALL(PDO::FETCH_ASSOC);
if (!isset($result)) {
$sql = "INSERT INTO traffic (time,IP,page) VALUES (:time, :ip, :page)";
$params = array(
':time' => $time,
':ip' => $ip,
':page' => $page,
);
$stmt = $database->prepare($sql);
$stmt->execute($params);
}
+0
非常感谢。请添加一些代码,以便我可以正确理解它 –
答
您需要在mysql或sqlite或其他数据库服务器中使用,以保存访问的名称和数量。 您首先需要创建数据库并学习如何使用它。不要跑.... 随着TXT文件,你不能到达很远...
这里有一些问题,但没有理由为什么该逻辑不应该在您的网站的其他网页上工作。但是,您应该使用绝对路径来确保所有脚本都处理服务器端文件系统中相同的文件位置。 – arkascha
对于其他页面我有不同的文本文件存储计数器值。问题是一旦我的会话开始在一个网页上,它仍然像当我切换到其他页面,因此其他页面计数器值没有得到增量。 –
对不起,但我无法理解你最后的评论。如果所有这些都是关于跟踪访问者和数字的,那么为什么不简单使用现有的和经过验证的解决方案,比如'piwik'或apache日志文件分析器?更容易,你获得更多,更精确的信息。 – arkascha