【求助】一段PHP访客计数代码

lsh511744 2009-06-16 08:35:20
<?php
$counterFile="counter.txt";

function displayCounter($counterFile) {

if (!file_exists($counterFile)) {
$num=1;
}
else
{
$fp=fopen($counterFile, "r");
$num = fgets($fp,5);
$num += 1;

fclose($fp);
}
print "<div id=\"footer\">您是第 "."$num"." 位无聊的人</div>";

$fp=fopen($counterFile, "w");
fputs($fp, "$num");
fclose($fp);
}

displayCounter($counterFile);

?>

这是一段php访客计数的代码。可是,这样写有个问题,就是每刷新一次页面,都会计数一次。请问,应该如何修改,使访客在退出浏览器之前不重复计数?
...全文
177 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsh511744 2009-06-18
  • 打赏
  • 举报
回复
感谢楼上的回答,我也想过用cookie,可是自己还没学会。
您给的代码我试了试,很可惜,没有什么变化。
Exbox 2009-06-18
  • 打赏
  • 举报
回复
理解错了吗?= =?
唔……这是用楼主代码改的,楼主看看符合要求不
<?php
session_start();
if (!isset($_SESSION['guest'])){
$_SESSION['guest']='online';
}else{
$_SESSION['guest']='end';
}
$counterFile="counter.txt";

function displayCounter($counterFile) {

if (!file_exists($counterFile)) {
$num=1;
}
else
{
$fp=fopen($counterFile, "r");
$num = fgets($fp,5);
if ($_SESSION['guest']=='online'){
$num += 1;
$_SESSION['guest']='end';
}

fclose($fp);
}
print " <div id=\"footer\">您是第"."$num"."用户</div>";

$fp=fopen($counterFile, "w");
fputs($fp, "$num");
fclose($fp);
}

displayCounter($counterFile);
?>
xuelang0725 2009-06-18
  • 打赏
  • 举报
回复
个人认为
不支持使用cookie。。。。。。。
觉得session不错
考虑过脚本没
雪碧爱可乐 2009-06-17
  • 打赏
  • 举报
回复
那么就使用cookie吧!这是一种常用的方法!


<?php
$counterFile="counter.txt";

function displayCounter($counterFile) {

if (isset($_COOKIE["访问已记录"])) {
return;
}
//函数setcookie("cookie名","cookie记录内容", "有效时间"),默认有效时间不关闭浏览器之间有效
setcookie("访问已记录", "");//time()+3600*12
if (!file_exists($counterFile)) {
$num=1;
}
else {
$fp=fopen($counterFile, "r");
$num = fgets($fp,5);
$num += 1;

fclose($fp);
}
print "<div id=\"footer\">您是第 ".$num." 位无聊的人 </div>";

$fp=fopen($counterFile, "w");
fputs($fp, "$num");
fclose($fp);
}

displayCounter($counterFile);

lsh511744 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Exbox 的回复:]
在访问时设置一个$_SESSION值,因为$_SESSION值关闭浏览器后会失效,就可以判断用户是否关闭浏览器了


PHP code$num = fgets($fp,5);
if (!isset($_SESSION['变量名'])){ //如果没有$_SESSION值,那么加1
$num += 1;
}
[/Quote]
非常感谢,虽然您没有帮我解决我的问题(可能是我没有表述清楚),但是帮我解决了另外一个我一直头疼的问题。非常感谢……
lsh511744 2009-06-17
  • 打赏
  • 举报
回复
多谢楼上两位指教。刚刚开始自学PHP,有很多都不懂。
楼上,我是希望这样:
同一台电脑在关闭浏览器后,重新登录算一次。可是关闭浏览器之前刷新页面不要计数。
huaihuajio 2009-06-16
  • 打赏
  • 举报
回复
不知道楼主怎么样来计数
一台电脑每天无论访问多少次都算一次?
还是一台电脑进入一次网站就算一次?
如果是后者,楼上方法可行
如果是前者,恐怕要结合IP地址的判断了,已经访问过的IP计入一个文件中,刷新时先判断IP是否已经存在。但是这样也有一个问题,就是如果用户使用的是代理IP,那么无论多少用户使用该IP他们访问你的站点每天最多只能有一次。
还有一种方法就是使用客户端的MAC地址,但是这要使用JS才行,受限于用户浏览器安全级别。
Exbox 2009-06-16
  • 打赏
  • 举报
回复
在访问时设置一个$_SESSION值,因为$_SESSION值关闭浏览器后会失效,就可以判断用户是否关闭浏览器了

$num = fgets($fp,5);
if (!isset($_SESSION['变量名'])){ //如果没有$_SESSION值,那么加1
$num += 1;
}

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧