每个页面的点击计数器 PHP
Hit counter for each page with PHP
我想在我的网页上集成一个计数器,到目前为止我已经做到了,所以计数器可以正常工作。但我真正想要的是这个计数器针对每个 id
生成的每个页面是特定的
<?php
session_start();
$counter_name = 'counter'.$id.'.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']="no";
$counterVal++;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
}
else {
$counterVal++;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
}
$counterVal = str_pad($counterVal, 5, "0", STR_PAD_LEFT);
$chars = preg_split('//', $counterVal);
$im = imagecreatefrompng("canvas.png");
$src1 = imagecreatefrompng("$chars[1].png");
$src2 = imagecreatefrompng("$chars[2].png");
$src3 = imagecreatefrompng("$chars[3].png");
$src4 = imagecreatefrompng("$chars[4].png");
$src5 = imagecreatefrompng("$chars[5].png");
imagecopymerge($im, $src1, 0, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src2, 15, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src3, 30, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src4, 45, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src5, 60, 0, 0, 0, 15, 15, 100);
// Output and free from memory
header('Content-Type: image/png');
echo imagepng($im);
imagedestroy($im);
?>
使用这段代码,我只能看到主页的点击量。它在每个页面上显示相同的编号
例如
page 1 count: 100
page 2 count: 100
我刷新第 1 页 50 次后
page 1 count: 150
page 2 count: 150
文件名为counter.php
并在模板文件上实现,代码如下
<img style="padding-left: 2px;" alt="Hit counter" src="http://www.example.com/counter/counter.php" />
我一直在寻找解决方案,但到目前为止还没有找到任何解决方案。
提前致谢。
此致,
BujarA.
对于您正在使用的未定义 $id
变量,您可以使用例如来自服务器的路径信息:
<?php
session_start();
$id = preg_replace('[^\w-]', '', $_SERVER['PATH_INFO']);
$counter_name = 'counter' . $id . '.txt';
// etc.
请注意,我已删除所有特殊字符以避免出现问题。
我想在我的网页上集成一个计数器,到目前为止我已经做到了,所以计数器可以正常工作。但我真正想要的是这个计数器针对每个 id
<?php
session_start();
$counter_name = 'counter'.$id.'.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']="no";
$counterVal++;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
}
else {
$counterVal++;
$f = fopen($counter_name, "w");
fwrite($f, $counterVal);
fclose($f);
}
$counterVal = str_pad($counterVal, 5, "0", STR_PAD_LEFT);
$chars = preg_split('//', $counterVal);
$im = imagecreatefrompng("canvas.png");
$src1 = imagecreatefrompng("$chars[1].png");
$src2 = imagecreatefrompng("$chars[2].png");
$src3 = imagecreatefrompng("$chars[3].png");
$src4 = imagecreatefrompng("$chars[4].png");
$src5 = imagecreatefrompng("$chars[5].png");
imagecopymerge($im, $src1, 0, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src2, 15, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src3, 30, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src4, 45, 0, 0, 0, 15, 15, 100);
imagecopymerge($im, $src5, 60, 0, 0, 0, 15, 15, 100);
// Output and free from memory
header('Content-Type: image/png');
echo imagepng($im);
imagedestroy($im);
?>
使用这段代码,我只能看到主页的点击量。它在每个页面上显示相同的编号 例如
page 1 count: 100
page 2 count: 100
我刷新第 1 页 50 次后
page 1 count: 150
page 2 count: 150
文件名为counter.php
并在模板文件上实现,代码如下
<img style="padding-left: 2px;" alt="Hit counter" src="http://www.example.com/counter/counter.php" />
我一直在寻找解决方案,但到目前为止还没有找到任何解决方案。
提前致谢。
此致,
BujarA.
对于您正在使用的未定义 $id
变量,您可以使用例如来自服务器的路径信息:
<?php
session_start();
$id = preg_replace('[^\w-]', '', $_SERVER['PATH_INFO']);
$counter_name = 'counter' . $id . '.txt';
// etc.
请注意,我已删除所有特殊字符以避免出现问题。