返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) b9 o; q; w8 L/ f我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。/ j1 Y4 W1 W) J
首先我创建MYSQL数据库表。
* @/ F/ z4 Z0 X- wCREATE TABLE tablename (
& v. U2 [- f1 l+ m; G6 Ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
- a" w& f7 j) p  j' k/ }* I7 @3 r}可以使用的SQL语句。
! K  l0 g) o/ ]( h5 L. f6 S$ rCREATE TABLE useronline (4 e. M/ N/ U- H( U2 {
timestamp int(15) DEFAULT '0' NOT NULL,
( B5 v2 E' \" E5 s, g# b' q. Uip varchar(40) NOT NULL,& N/ u/ j1 b8 n& [; S  u( r
file varchar(100) NOT NULL,- B5 v# c' b" N/ t
PRIMARY KEY (timestamp),  _7 z  K% Q0 ?. K3 l, v
KEY ip (ip),0 B9 q, a9 J2 [" m, T
KEY file (file)& I3 F2 i" o/ P! q) l0 a
);下面我们是PHP脚本,首先我定义MYSQL的信息。
3 K  Z" ^$ Z% A* Z$server = "localhost"; //你的服务器4 `. p* H! n! T; Y
$db_user = "root"; //你的mysql的用户名; ?8 q$ x% _& T
$db_pass = "password"; //你的mysql的密码0 L" Q0 N+ v6 X( @
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
3 ?7 g- l( V$ M) u/ o" s$timeoutseconds = 300;取当前时间。
) Q' ~6 y- M9 ~3 J( T7 e8 e0 m- ^$timestamp = time();上面的完整代码:
6 D/ ^) f! K8 l; D<?php* M  {! L6 N1 M- {
$server = "localhost"; //your server
. P- j6 F2 }+ _2 S9 t$db_user = "root"; //your mysql database username
6 q# `  H3 T9 E$db_pass = "password"; //your mysql database password if any
) a* Y2 A! s: u  T$database = "users"; //the db name& @$ p. i/ ~+ m- A- }
$timeoutseconds = 300;//timeoutseconds limit3 F. X/ j  M' P% V* L3 D& Y
//get the current time
# A) b0 }8 u% Y3 P$timestamp = time();; U( y" t9 u3 p/ l
//calculate the lowest timestamp allowed
' ~$ g% d3 B2 @6 V2 o/ [; X1 d$timeout = $timestamp-$timeoutseconds;5 g4 }6 j0 {  }
?>连接mysql) }  I. T9 [& \$ Z
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- O/ h( V, D& V( W7 d+ ]3 e/ Kmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接9 R- O* _2 Y8 B* d( P
mysql_connect($server, $db_user);查询数据库的代码:) |1 W2 E" g' p! o$ }
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。6 k# a" y# O9 }4 u1 n/ B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ r2 z8 _. ?! b2 R
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* U4 i9 x0 D& {如果用户用错误信息的话,这样处理。
9 q, L1 W! s1 y  `& @if(!($insert)) {. h; H2 z" S2 ?
print "Useronline Insert Failed > ";' @( `/ W4 o  H+ M
}然后实现当超过设置的时间就删除该用户记录。
, o! A# M  O, q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ {. N& ]% I; x. Z
if(!($delete)) {8 v* c+ \, u1 n! q. v2 B
print "Useronline Delete Failed > ";
& Y+ L/ J( q9 _% W, G}下面我们解决数据库中不同IP的问题7 F1 f( j1 _% I& |  H" E7 K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 d# ]/ s  {, S; T* qmysql_num_rows(query);来统计用户,代码如下。
3 p$ J7 K# x$ u; U6 j+ v$user = mysql_num_rows($result);最后关闭数据库。- B. b8 s0 ?8 V: g! u8 H) q
mysql_close();显示在线的人数。2 G5 ?/ r+ N% Z1 T! e+ J  o4 R
if($user == 1) {" Q) Y% w/ u- ^+ x. G6 @! P
print("1 user online\n");6 Q* [) H6 q5 \6 M
} else {
& k- k2 y1 j" h3 Y/ cprint("$user users online\n");0 g2 \; T% Z* r# F
}最终把上面代码写成一个PHP文件如下。" H" ~. A$ ~5 {8 e" G& C1 R. N3 _
<?php+ y7 a2 b7 ?* `  e- Y; g$ F
//Put your basic server info here( N7 ^0 N( T( ~. P1 q# ?
$server = "localhost"; //normally localhost' q9 S* I( T8 ]- z- |6 m' e
$db_user = "root"; //your MySQL database username
0 {4 c9 `; d% h7 S; y% H9 y$db_pass = "password"; //your MySQL database password
' s: r7 N' d  g: B7 ]$database = "users";/ R# R1 d4 f3 z7 j+ y$ Q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, Q% D* }) T5 @$ l" I// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
# l* l3 L9 ~0 H7 s) _; s- p// $timeoutseconds seconds)0 \" q6 B1 E" }4 w: z# w
//this is where PHP gets the time
1 U8 T" j- [1 \" Y- S8 c% c$timestamp = time();
! F( R( A* [* y5 H//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed( S; Y7 X$ P3 j
$timeout = $timestamp-$timeoutseconds;5 W! |9 j% V2 M% p
//connect to database
& C/ s  v/ L/ Q) X4 ]mysql_connect($server, $db_user);) Z  ]& a, x5 q$ A' T& A$ |1 a
//add the timestamp from the user to the online list
1 r2 c( q0 p, Y  S  ^! D2 W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES/ M) `" v( E: `" K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 T( w6 d; S! |7 t# y- w
if(!($insert)) {
4 J$ e8 B: `, @5 i  tprint "Useronline Insert Failed > ";- f' t% p' z: s- _
}
% W. \) a1 S6 ~% L$ Q8 R; C//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
. X+ O# V4 M0 o. l( ^$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 W; M- r" N# ?% f7 z2 q8 pif(!($delete)) {& i/ \3 _8 {9 Q
print "Useronline Delete Failed > ";
* x/ T. R9 U, ?; O! p+ c0 K7 P}
- R3 }( p4 U0 S6 h: b  n//select the amount of people online, all uniques, which are online on THIS page
# |6 o( Q% H: s; T  X* V0 |& Y; a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: E" e3 x! Q0 M! Y/ S: R& h
if(!($result)) {6 y4 o: l6 M0 _! L3 F9 ~+ m
print "Useronline Select Error > ";
5 ]3 j7 h, R9 O& x}
; {/ `1 y( `& M3 y" u0 ?//Count the number of rows = the number of people online
4 O) g3 s9 H7 Y" t9 h- c5 W$user = mysql_num_rows($result);# |- E( n$ k8 B5 q" D
//spit out the results
! {/ H8 h* v, l7 R* @- _' C( nmysql_close();+ a7 a- c+ q) |9 k  m4 T2 v3 g, |( c
if($user == 1) {3 {5 I6 F3 h, G" l! I
print("1 user online\n");
) O2 z7 b% y% _0 ^# M6 _% {, y" `} else {& z$ K# |' C( b
print("$user users online\n");+ Q0 Q4 W" w, ]% m( \
}
$ R, q  f  O# X  n# ~?>
: t! F+ m. e1 i
+ g! a! v# o) |以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. w, |, A* r) G! p' P1 p2 J
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* H; c: g  T- O8 \( b; X* X- C
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; k; {4 a0 c: l) P' F& x
当然啦,这两款主机也是相当不错的。0 L6 J/ c8 ^: f6 C/ x5 K0 t
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! [5 J; `) ?% O( ~- v1 y) A. g
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# u/ d7 }" o8 T6 ?提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 _8 y* n/ ^7 l  s8 n( q- f9 T
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 i% r. ~# g. L% \/ Z; Q& P* y
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: