|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我先解释一下我的学习思路。统计|在线|在耳目数 在服装论坛里有人问我若何统计在耳目数?我也不晓得甚么是最好的办法。上面是本站的完成的道理,我把它写出来,供人人参考。这只是我的办法,一定不是最好的,还但愿高手们予以斧正。
其实,要真正统计同时在并发在线的人数,是一件不太实际的事,这是由于HTTP协定是种无形态的协定。当客户端向办事器收回一个恳求时,办事器会即刻创立一个新的TCP/IP毗连,在该会话停止后,如页面完整载入后,这个毗连就封闭了。普通来讲,在耳目数指的定是在必定工夫段内同时会见站点的人数,而不是基于HTTP协定的并发毗连数。
让咱们先来看看一个访客是若何会见一个网站的。他在阅读器的地址栏里输出了方针网站的地址,然后在一段工夫内延续阅读该网站的网页,最初,封闭阅读器或输出新的网址――阅读停止了。关于办事器端来讲,访客到来是可以晓得的,访客在阅读页面也是可以晓得的,可是怎样晓得甚么时分走的呢?因为HTTP协定是无形态的,所以没法晓得。凡是的做法是记下访客最初一次阅读站点页面的工夫。假如该访客在一个特定的工夫内没有新的举措,那末可以以为他走了。
依据下面的这个思绪,我感觉最好用数据库,由于数据库要比其他办法如文本文件的效力要高。上面的例子是利用MySQL的,很轻易利用其他类型的数据库体系。然后,在一切的页面中挪用这个PHP文件,一方面更新数据,另外一方面可以显示在线的人数。然而,有一个成绩--究竟在多长工夫内会见的人算是并发的呢?普通来讲,是半个小时,也就是1800秒,详细的要依据网站的情形来肯定。这个工夫越长,统计出的并发在线的人数就越多。本站的是15分钟,900秒。用会见者的IP地址暗示一个会见者是个不错的办法。在拨号上彀的情形下,被分派了不异IP地址的两个用户在短工夫内阅读统一个网站的几率是很小的。
起首,用MySQL的东西建一个表:
CREATE TABLE ccol(
id integer not null auto_increment, #纪录的ID
ip char(15) not null, #会见者的IP地址
dtstamp datetime not null, #最初会见工夫
uri char(255), #会见者恳求的URI
primary key (id)
);
然后,写一段PHP代码:
<?
/*
文件:ccol.php - ConCurrent OnLine statistics
目标:统计同时在线阅读的人数
作者:Hunte, hunte@phpuser.com
修正:2000-4-25
*/
$duration=1800;
require "db.php";
//包括DBSQL,概况可以参考我的另外一篇文章
$ccol=new dbSQL;
$ccol->connect();
$ccol->query("DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))>$duration");
//删除超越半小时的纪录
$ccol->query("SELECT * FROM ccol WHERE ip='$REMOTE_ADDR'");
//判别以后的IP是不是在该表中存在
if ($ccol->nf())//有?
{
$ccol->next_record();//下移找到的纪录数组的指针
$id=$ccol->f('id');
$ccol->query("UPDATE ccol SET dtstamp=now(), uri='$REQUEST_URI' WHERE id=$id");
//设置最初会见工夫和会见页面
}
else//没有
{
$ccol->query("INSERT INTO ccol VALUES (0, '$REMOTE_ADDR', now(), '$REQUEST_URI')");
}
$ccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=$duration");
//找出在半个小时内的纪录,前面的WHERE子句无关紧要--超越工夫的已被删除
$ccol->next_record()
echo "在耳目数:", $ccol->f('ccol');
$ccol->free_result();
?>
怎样用呢?在站点的每一个页面的下面挪用这个法式,举例来讲:
--index.php
...
<!--显示在耳目数->
<?require ../stats/ccol.php?>
...
固然,这段代码还有改善的余地。例如,在每次挪用是都要删除半小时前的纪录,这是没有需要并且会下降效力。可以一个甚么举措过更长的工夫再做,好比6小时。人人自各儿想一想吧,我就不说了。
这类办法只需稍做修正,就能够派上其余用途,如SESSION的办理、网站的会见统计剖析等。
--接待高手斧正!
从刚开始练习的PHP基础语法练习,到PHP语言在WEB中的应用,再到实际的项目开发,如留言版,相册系统,中小型公司网站系统,以及期间做过的有关团队合作的小游戏,让我受益匪浅,学到了很多。 |
|