捌玖网络工作室's Archiver

lilcy88 发表于 2008-5-28 10:40

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!*XQ vk?k
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。BllR%Ad Ie
首先我创建MYSQL数据库表。6SafYv7_
CREATE TABLE tablename (
:q2Y_!X PWU"a field type(max_length) DEFAULT 'default_value' (NOT) NULL
3C A-\k8O3J#W%gF }可以使用的SQL语句。~bZi/D4F
CREATE TABLE useronline (
Y&O]QK(m/h c'a J q timestamp int(15) DEFAULT '0' NOT NULL,
TR1ksHOv ip varchar(40) NOT NULL,
\0xeoSD'| T;k file varchar(100) NOT NULL,sQ^FA*v.Y
PRIMARY KEY (timestamp),a$c8y)q [ g-X
KEY ip (ip),
4c\9wnm!? KEY file (file)
C_-uv2j );下面我们是PHP脚本,首先我定义MYSQL的信息。
0D@~lHl#s Q $server = "localhost"; //你的服务器
-^?)eh+RG#xt8U"A $db_user = "root"; //你的mysql的用户名0P!{Aq u7S
$db_pass = "password"; //你的mysql的密码
3y{(qOrZa{ $database = "users"; //表的名字设置统计的时间(多少秒内在线人数)r @2i"e {0YZ(U \
$timeoutseconds = 300;取当前时间。
:KJ*J;X;v,t^n KR $timestamp = time();上面的完整代码:\ Lp$_ v.e
<?php
:X&D3^X| {] p $server = "localhost"; //your server!u!y%{k1L#yn
$db_user = "root"; //your mysql database username?/\BS[
$db_pass = "password"; //your mysql database password if anyE-Ha qc8g2m
$database = "users"; //the db name
wM d4P!fJo)}u3r6O $timeoutseconds = 300;//timeoutseconds limit
F9]&j ]&B0An7] //get the current time
)h*c4X9mSZc{6Q0r $timestamp = time();T9| R S"l-l?
//calculate the lowest timestamp allowed
(|ro.m+Q8@ $timeout = $timestamp-$timeoutseconds;,I%a%[5nf
?>连接mysql
`V2`[AC.U_B` Xj mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
V7B v M9^ _S)]4` mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2?*B Hp7|O,H mysql_connect($server, $db_user);查询数据库的代码:
$L*?9a2AG#q mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。Erc!Th7Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
DJ{;k{4D ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
-F+h"]j.R%i"T!X4S 如果用户用错误信息的话,这样处理。
K!a'V E'i if(!($insert)) {p+T` r r1U
print "Useronline Insert Failed > ";
3mZPghv }然后实现当超过设置的时间就删除该用户记录。
:w/Gd8x,_Q $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
*[ nw3s0y,Ux if(!($delete)) {4D/dN:e s
print "Useronline Delete Failed > ";
?*n;H+ml:^ }下面我们解决数据库中不同IP的问题
K Z4{"~7O9l-g $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
"`E0jd@x*G-wo L mysql_num_rows(query);来统计用户,代码如下。Ay/[hO0M6Ay
$user = mysql_num_rows($result);最后关闭数据库。@7ZHuO)iu$}z
mysql_close();显示在线的人数。
dk9QJ2o8M+_} if($user == 1) {^ `0}-U%La)Y)c
print("1 user online\n");
MKd,o%r!cB } else {Ii5~B^` QY
print("$user users online\n");
a6@7o~!Od5S }最终把上面代码写成一个PHP文件如下。9P(U Vi3H cd
<?php
L-}.d${4V-c;b //Put your basic server info here
Z;C$l8EWV$} X6f3? $server = "localhost"; //normally localhost
Mm iJ?[K,zN_!R $db_user = "root"; //your MySQL database username"UNq$Nv@9c
$db_pass = "password"; //your MySQL database password
/P(Z-?#ov7O $database = "users";h*I)f+d$_)okZ
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably aren`Vx:I,Q$F$j/g,[6g
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
f}C)o*xx_ J&j // $timeoutseconds seconds)
"b^R.m&M //this is where PHP gets the time
f/}a u0VRsg,D0K $timestamp = time();ELxYG] [0c2s
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed"d"y6[bC2P
$timeout = $timestamp-$timeoutseconds;
&HC9Q:CX l M o //connect to database
5r7Onw/zz["k mysql_connect($server, $db_user);-_t0]/o7M
//add the timestamp from the user to the online list
I0D0z$`G $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
\xpfm&h ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
Ak-]p7N bmg O6` if(!($insert)) {Z$E ?mc)? j
print "Useronline Insert Failed > ";
bh I~`h'n'u? }}Q u1b1]'~
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.:UV^)QX$Y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
&xQs~'tRc m if(!($delete)) {a\,[1nA6I
print "Useronline Delete Failed > ";K+G @W S8~&R$c8{
} K+@T:a8}:Z4C
//select the amount of people online, all uniques, which are online on THIS pageKTx4FbH]3J/`
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
5jVBH jo(D if(!($result)) {
e3y-HF*K\ print "Useronline Select Error > ";5m"q8M x7A O?[
}
9j{]*q)r0f7m#} //Count the number of rows = the number of people online8]y:R|;@OO?
$user = mysql_num_rows($result);(j0]*mTdwn
//spit out the results{DG2`%u7I4Dya
mysql_close();8A|]$W1W
if($user == 1) {
d8KB^Gg print("1 user online\n");O ]a:I/T
} else {
Z+[;a"Wn x dh%h `v print("$user users online\n");R0~!YK#e2y-c4C'I_&A
}c[r$kcQN? y
?>
P"?#S:s-O+S2m)?,ph [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]3Bq*QOw7l
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。!i/A4Ul/lY`:U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。txt%m9lN0_2?)A\
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。 ML#z-HT:^
当然啦,这两款主机也是相当不错的。
u)jQ8b8A!no 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年 Gp2?o)E+| F"f
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年ih6ooL#bh i_
提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url] ;?z3h?/es a]
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]0a(Uf4C yQ]ot
自己加QQ去问吧。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.