捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下! u)mB k.i,H
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
!I!JD3]S*~g'Qe2F 首先我创建MYSQL数据库表。i6rWR;c(Y7Zr}}
CREATE TABLE tablename (eg ZS|
field type(max_length) DEFAULT 'default_value' (NOT) NULL
J qm9e:_2] L7_0k }可以使用的SQL语句。
v7\%H&Z:Z/}m7g_x CREATE TABLE useronline (
Ya`B"L{)AS timestamp int(15) DEFAULT '0' NOT NULL,
~ g6r#Y5ZQ9g6r1K ip varchar(40) NOT NULL, b*XK(fV V1i!f
file varchar(100) NOT NULL,N1i MXN qU
PRIMARY KEY (timestamp),
"@L `F]/Cm8_#y Y5S KEY ip (ip),5rJ!_Mp9Az5uL^p
KEY file (file)
|*Hd E[m[ );下面我们是PHP脚本,首先我定义MYSQL的信息。-K7k7|_?l
$server = "localhost"; //你的服务器&{$s5C J!M4X
$db_user = "root"; //你的mysql的用户名 bL_9KcoM?
$db_pass = "password"; //你的mysql的密码F9Q5|u0E mE&D
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
l;dH)c:W)G @ | $timeoutseconds = 300;取当前时间。 lA3F&Q%b9N7\ O6J
$timestamp = time();上面的完整代码:
9b*u8N*[4ZEw*} <?phpCryE`u
$server = "localhost"; //your server
y j8FWI $db_user = "root"; //your mysql database usernameSzx~;m!{
$db_pass = "password"; //your mysql database password if any
Y] |tV $database = "users"; //the db name
F/Na&E:ab ^ K&Pm $timeoutseconds = 300;//timeoutseconds limit0vU^#s.y F8P t
//get the current time
;b#sfF[ $timestamp = time();.V+ku(I|]-_o
//calculate the lowest timestamp allowedx:Z EB)zQ oZs
$timeout = $timestamp-$timeoutseconds;
O@0G8^5Vb ?>连接mysqln } b@o
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
'^ D5]a'EXF/Zp4n-{ mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
Wx np;W7^Ik mysql_connect($server, $db_user);查询数据库的代码:
;ZKN/X9R*?"]S]X mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
o Ac4h6^Z*Ed|/{ $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0h6@*XAEsx)J ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
W6d oB:{J-m 如果用户用错误信息的话,这样处理。
I+Ia#d'yON$|jX if(!($insert)) {$fRCk kbL
print "Useronline Insert Failed > "; {3R1ef s-s Fj:^B
}然后实现当超过设置的时间就删除该用户记录。
]Cf8K~O5Xazg6?1F $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。W-n3jRn c
if(!($delete)) {
7@N]2f'r lF8g'H"g+Y print "Useronline Delete Failed > ";
tlu#_| ]I'W }下面我们解决数据库中不同IP的问题3I^ i(E4y0m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用'p5Z w(C.?H!V0~
mysql_num_rows(query);来统计用户,代码如下。.B t&E:j*j5B)t7l
$user = mysql_num_rows($result);最后关闭数据库。
B7Pf{x1x1sR8Z mysql_close();显示在线的人数。)R8\9P.b D
if($user == 1) {
2Sg/\Ft,d print("1 user online\n");\2Q2Az4q2}
} else {O4~X shT
print("$user users online\n");
E%XQY1nmZ&a8v+s }最终把上面代码写成一个PHP文件如下。
XN/oY2M~4b <?php
.]1`&a;lmi XL //Put your basic server info herebf{KzN.W
$server = "localhost"; //normally localhostK-X'M8xs8y
$db_user = "root"; //your MySQL database username
|p4n2O?IH $db_pass = "password"; //your MySQL database passwordj6@w s"Y}vW"~/n
$database = "users";H-_:f/U&Z:nru9UZ
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4V6e L5q$C }d} // offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
-|%@3j)|7k^I8B+Jzc // $timeoutseconds seconds);E/v-S,yl&O.P:q2L%n
//this is where PHP gets the time
#W;vPB/}4TQ $timestamp = time();J/q3NdQ^*L%{
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
|'L6i6hB8{7_3a $timeout = $timestamp-$timeoutseconds;
vh*iBek9y.epS //connect to database
'GD lX1~ mysql_connect($server, $db_user);
o7PA7]E"R+@(G'h //add the timestamp from the user to the online listOB!W;]v H8D`${
$insert = mysql_db_query($database, "INSERT INTO useronline VALUESy[M u-N*afe
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/BP!H'C5uAD if(!($insert)) {
O)u$F3Xm5f"Z print "Useronline Insert Failed > ";dEViEqC/~ I W+G
})z;[0U otid N
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
QH:Ebjhl $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");:i"EF1Fy%J*H,H
if(!($delete)) {v/w p/BQ;}(D"k%}{
print "Useronline Delete Failed > ";
P(\^s+{ DxJx }]3Dn _6J r)t
//select the amount of people online, all uniques, which are online on THIS pageXp4o-Yr ~z4|
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
.V \a9`#Mjddn if(!($result)) {
(rQ@#[z print "Useronline Select Error > ";"a;LMn7h/R*[s|E:H
}
;E%s8b/rX&~x&iS1M r B //Count the number of rows = the number of people online
R#y)i5@6]0}*`VX $user = mysql_num_rows($result);
#a)QGXzT [ //spit out the results
1? d-g1W-E.H5`J"[K'bh mysql_close();fk/qBRIg$Z
if($user == 1) {
3D-A `gV print("1 user online\n");o4?Tf{b$D`
} else {$gkyat6P)g
print("$user users online\n");O_#y!T!s}T
} @f'D%Ob+g+K6J;w}
?>
']B FNr?!Q*p{8|+h [url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
L w/@m&[j2w 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。i qT3^0M\E/U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
'K|e"UH'@oIH u 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
#wM!lqP U 当然啦,这两款主机也是相当不错的。
-wDj2lcW,YH 智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
Ho]$a:R7F"n 标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
Y#U7K$LI@![ 提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
%q;ulS6q&tD@,M 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]-Rt*H0Il TSj&g
自己加QQ去问吧。

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


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