
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ g$ t* |4 J& v: b( W% g8 L3 t我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 \4 F% \2 `/ t) I首先我创建MYSQL数据库表。
: z5 R0 \' j; M* wCREATE TABLE tablename (
9 {- j3 E9 E+ V6 T3 ?field type(max_length) DEFAULT 'default_value' (NOT) NULL
; N% R Z; t" U. R9 a}可以使用的SQL语句。6 ?. g6 ^/ `% }
CREATE TABLE useronline (( c' _% H8 }0 l
timestamp int(15) DEFAULT '0' NOT NULL,7 p( w! Y; j. [. H
ip varchar(40) NOT NULL,* I6 J+ x; u t* w' m
file varchar(100) NOT NULL,- C0 x4 B+ p- r7 Q6 D
PRIMARY KEY (timestamp),9 H6 [/ j$ ?- h& J3 k( X
KEY ip (ip),
# H$ E E3 x0 t3 Y0 c- a1 @KEY file (file)
$ ]1 t/ C) y* d$ Q);下面我们是PHP脚本,首先我定义MYSQL的信息。! T) c3 Z, D' k9 I' Q7 ~
$server = "localhost"; //你的服务器
' H( ^, f2 D- c; U% H i$ y7 u$db_user = "root"; //你的mysql的用户名
4 o1 t! [, Y9 h% B$db_pass = "password"; //你的mysql的密码
& z5 s0 h4 r4 @8 l* e0 t0 T: i$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% ]# E, P ]) c' e' E/ s. t$ n- i o
$timeoutseconds = 300;取当前时间。4 n+ X Y* J$ ~: p+ k
$timestamp = time();上面的完整代码:
+ c. N5 d7 ?; |( [8 y2 V5 i0 S<?php2 r, ~' a$ L! ?- j
$server = "localhost"; //your server
% K6 F# I2 W% \/ X* e$db_user = "root"; //your mysql database username
3 a; Z w/ M, q" \+ I- \8 e$db_pass = "password"; //your mysql database password if any
2 ?' l. y$ O% M/ H6 u/ x$database = "users"; //the db name
8 h) z2 g7 I; ^3 b$timeoutseconds = 300;//timeoutseconds limit1 K6 F3 e3 z5 F( U7 F) e
//get the current time
5 l3 ?/ K; f% V I$timestamp = time();
" K' P5 t( L4 h) J5 T. I0 M//calculate the lowest timestamp allowed" ?+ e( _5 d; C$ j7 C
$timeout = $timestamp-$timeoutseconds;/ i, _8 I4 N- m# P7 v
?>连接mysql
; q' N( B3 v& Y2 W7 d3 Q" vmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
) y7 d5 J" h z: zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& a7 l, F' l: k) z- T6 H
mysql_connect($server, $db_user);查询数据库的代码:/ @, ?/ i( q7 n) u. ~" v7 A5 E# `
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 ]. d: l/ y- F
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! D' t' I* y( n1 O S! ~
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 `& E$ r% o7 y; ]- R$ F如果用户用错误信息的话,这样处理。6 N6 M9 E) \% B9 h
if(!($insert)) {
' ?+ T0 I8 v/ o' @6 d8 L+ o- J, `print "Useronline Insert Failed > ";
0 K8 A$ b8 d! R: W}然后实现当超过设置的时间就删除该用户记录。( |/ i8 u( t6 |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。' L0 [4 S7 B4 B9 j! Y' P" n6 E
if(!($delete)) {
" |: K: x7 l- z# P0 C. g, M0 d% j0 |print "Useronline Delete Failed > ";9 D: l' [7 O1 m( t6 \
}下面我们解决数据库中不同IP的问题4 V2 j" N' M/ Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 \/ z5 R( s" Y0 Wmysql_num_rows(query);来统计用户,代码如下。2 W% b5 Y; X5 f: O# `( x
$user = mysql_num_rows($result);最后关闭数据库。
+ E. \, I0 M" i: n" |; u. Nmysql_close();显示在线的人数。2 \0 K* _- J9 F! z
if($user == 1) {# M0 l8 W c% J' V! g$ E: ^ a8 H' V; K
print("1 user online\n");& x( t: P9 A. d( @
} else {* T% C* @ q! p( l4 v! N
print("$user users online\n");: R$ V8 H8 g5 T: B2 |' s5 d
}最终把上面代码写成一个PHP文件如下。: C( [3 C* n" t6 X& B2 V- x7 O
<?php
8 t# i. B" n1 C& E4 a//Put your basic server info here
5 ?* E1 h5 h* l$ _& \, E$ D$server = "localhost"; //normally localhost# u6 L* F$ G7 w. K: j* c6 N, T
$db_user = "root"; //your MySQL database username) {! a6 n, }, o; L
$db_pass = "password"; //your MySQL database password
1 J; {, \; Q; b e( F$database = "users";' G/ \! `2 n0 @/ {9 |% R" }" r7 i
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 x+ i' y* _. g. ]// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! a/ a2 b& a2 Z) }" e* A// $timeoutseconds seconds)
# H, r3 z2 S7 ~3 p//this is where PHP gets the time6 s5 O" x7 t7 m2 x1 ]
$timestamp = time();4 n1 { l. U: x% b
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 E9 g: X- m) J% @# m% |
$timeout = $timestamp-$timeoutseconds;/ \& c! v' `" N. m5 n
//connect to database
% w- u1 L- Z; Lmysql_connect($server, $db_user);
& `, @" I) D% }7 R8 i//add the timestamp from the user to the online list
! }! R0 g+ r! j9 g$ n. G$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. g K6 k, Y" s0 q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 j2 q0 Y6 m/ [1 a% z% ]( f; jif(!($insert)) {
+ k% V2 a% A8 [: X5 s! E7 Rprint "Useronline Insert Failed > ";7 ]3 M& P4 z5 C
}' B( e0 ~( b/ p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: B% E' s& Q6 D2 r, G/ Y8 Z5 F$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% e. a3 M" Z7 p/ d# i( K0 p$ K. L
if(!($delete)) {
( \4 f; ?+ q& W" P8 q4 ^: W# b- L# m+ _print "Useronline Delete Failed > ";
& f- L! x u& ?/ [1 J5 X}
* |* [" ?& X5 A( Q6 V. k) g( D//select the amount of people online, all uniques, which are online on THIS page
) p$ v! \' |, |6 x% T, g. r$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");* {9 f8 J- \4 {' ^* t8 b5 c2 o6 n
if(!($result)) {1 k+ y* ` k' I, M! k2 D; z j
print "Useronline Select Error > ";! _# @. h/ V; C; ^- K! ?' Y
}0 q' D/ s2 v4 f. |3 d# n* d
//Count the number of rows = the number of people online/ d/ q p1 Z! B+ A2 ~
$user = mysql_num_rows($result);
1 v. m& L: s D6 h4 A8 t5 o: T//spit out the results
5 n" V, E2 a4 F7 `mysql_close();
* h& r( Z% r/ P0 b" ]8 H' qif($user == 1) {4 q% V- P5 o, V- o7 t( s6 ^
print("1 user online\n");; U) b: ]0 ^# e; h2 R& ]! q+ i4 m+ B1 m
} else {
3 ?) G: P. A' m6 M4 N. z8 c; Gprint("$user users online\n");/ h. ^: v- [1 m% ^ z& e1 ^
}( Z# H6 \1 n0 V; G% _
?>
' s7 [/ h2 G( p
* C5 n P% m8 X. y& ]7 ^) Z以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。3 q# d- h( Z5 |* a l8 ?
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
5 G9 S- w! Q5 [5 g: T我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" G& W' [8 w9 f' [+ ?当然啦,这两款主机也是相当不错的。, ?- [4 i+ _. y! E2 }
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ ~! [2 m2 @0 _" O
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
( m$ b9 T; }2 s5 r1 k9 @提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( h2 [" I0 f$ i8 V6 q& z3 ?. i: y, c
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
' b0 D) } W2 T: J* d自己加QQ去问吧。 |
|