返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 n& V! D* `8 I/ t# F9 g  l  l$ A0 ]我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 j! @5 p3 G6 @* i
首先我创建MYSQL数据库表。
& q/ }6 D, y, B0 KCREATE TABLE tablename (; ^, I4 m0 _, B. ^/ k
field type(max_length) DEFAULT 'default_value' (NOT) NULL
. e5 z. f* g: i}可以使用的SQL语句。
9 j/ Y- W( J2 T$ ?) OCREATE TABLE useronline (. w0 b- L" f( P7 V$ T: o
timestamp int(15) DEFAULT '0' NOT NULL,& i+ @0 D  }3 n- t$ u1 Y$ F% W+ i3 B, h
ip varchar(40) NOT NULL,( H3 r- @- R+ D8 _; c' [7 R
file varchar(100) NOT NULL,! s) Y; {+ j6 ~' w4 i6 c
PRIMARY KEY (timestamp)," K1 L2 U0 b2 H: R3 g5 V
KEY ip (ip),8 K! v4 ^2 @% J: c* g' p0 y
KEY file (file)
( L$ j  x; b1 t( g);下面我们是PHP脚本,首先我定义MYSQL的信息。# Y2 O7 p. L# b! t. |
$server = "localhost"; //你的服务器
3 i& [$ I8 U  h$ W# X" v! u7 y& @$db_user = "root"; //你的mysql的用户名
9 ]5 n! U7 O' w7 n$db_pass = "password"; //你的mysql的密码; }( z7 M  U5 I1 W
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
& Z* V  `1 E5 `. a+ S% [1 \$timeoutseconds = 300;取当前时间。
, h) }5 D! W4 e7 h4 a$timestamp = time();上面的完整代码:
6 M7 O* [, N6 ~0 f<?php
. W# z, B) |$ _$ z8 Q8 r1 P: H$server = "localhost"; //your server
8 g/ X7 r( T4 q, ^- q$db_user = "root"; //your mysql database username% F3 F# C( ~9 [( i2 \! r- J/ o
$db_pass = "password"; //your mysql database password if any
/ n! B( t5 o! S2 i9 R9 b5 g! k$database = "users"; //the db name2 H, {; j; o9 X; B
$timeoutseconds = 300;//timeoutseconds limit
  v5 b4 a, b  d% n0 U- _4 l/ ]//get the current time; }' |) F5 n% j; `+ m+ ]. H
$timestamp = time();
8 I- R& T6 e+ C; m  G" x//calculate the lowest timestamp allowed$ z& d% e2 Z" E0 g) @) c3 q! D
$timeout = $timestamp-$timeoutseconds;
2 O6 I& R9 P8 }( s7 u' d?>连接mysql
  u5 D! D2 Z$ |1 a* [mysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 g) @5 f& G0 ?$ S
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接) Q# @: y: b9 S8 U$ _
mysql_connect($server, $db_user);查询数据库的代码:! r3 A2 ]$ c; f1 m& {: V
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 f! p+ g7 T- z. w5 C' i$ Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 i; I! w( v4 i+ x# q: I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 Z3 B: k0 ]7 X) |3 ^
如果用户用错误信息的话,这样处理。3 e( s. w  ?$ u1 B# _& h) B
if(!($insert)) {1 f/ P5 d! B# w7 c  F9 i0 A8 m; l( N
print "Useronline Insert Failed > ";# d5 M  Q7 K" p
}然后实现当超过设置的时间就删除该用户记录。4 _) K) k2 j* K; V. Z9 \" O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ j. U- l! }* ?' I" L  \if(!($delete)) {
* t  n% ?) n& I9 |# S% ?print "Useronline Delete Failed > ";  v3 z+ Y8 [5 G. `2 U+ I) M4 F
}下面我们解决数据库中不同IP的问题3 |! o1 {; I9 h" W$ R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用( D2 |" y+ N, y# y
mysql_num_rows(query);来统计用户,代码如下。
- }# c# d1 j  v9 H$user = mysql_num_rows($result);最后关闭数据库。
7 E' j* _9 x( s: W8 x  Pmysql_close();显示在线的人数。3 N9 R) K4 W. {/ d2 y
if($user == 1) {# h, u0 p, h( m4 z! p6 w  V2 ^) x' ]
print("1 user online\n");
% P6 L0 G/ s3 s& @. a} else {
2 W+ t1 Y; F( @0 y2 e5 @7 Y+ bprint("$user users online\n");0 `0 P+ K( X# f/ S8 i$ P/ r
}最终把上面代码写成一个PHP文件如下。, i8 k# r( d7 ?* \/ T8 U2 `8 d
<?php# J2 |4 e! y7 D8 d; e1 l% U
//Put your basic server info here: r; k4 ~* D- ^2 l* _  A
$server = "localhost"; //normally localhost) X9 j  @) T0 q" P4 }  q
$db_user = "root"; //your MySQL database username3 @' a7 B* m( `* k; ]1 E
$db_pass = "password"; //your MySQL database password
0 Y1 i. V. d/ V5 s! L% H, M& M$database = "users";
" d6 X6 P- v, J$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
# o' Y, B6 H4 Z& P// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
4 C1 c4 f$ g4 y6 x0 d* t! k' h// $timeoutseconds seconds)
. P" |5 f+ K# M; q. ]+ Q+ F//this is where PHP gets the time5 z" x6 i& `+ l2 q
$timestamp = time();, S9 D2 j" o- [9 u
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed; o  _* N3 Z8 d0 L
$timeout = $timestamp-$timeoutseconds;# r# q9 n9 Y" N+ \- S1 P5 a
//connect to database4 E/ E+ i3 M, h" E$ J* V: e7 \
mysql_connect($server, $db_user);
/ d+ k' g9 ]; ^& w$ }! ^8 s8 I  E  n//add the timestamp from the user to the online list
# H" W& W( f! A9 L$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ g% |% a/ P4 Z7 J1 i$ i
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* `' U" A& {7 \, Oif(!($insert)) {
8 x: f8 V8 L( }print "Useronline Insert Failed > ";3 g5 Z) n" E4 J. C' v* `7 X9 O4 s; `
}
" z/ b( m4 U1 c' z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
1 d1 G" C. s% E  \3 V6 U( d6 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 P3 U% A% ]/ x$ Y. C+ g4 c
if(!($delete)) {+ @9 U/ Y7 s* l* }8 Q
print "Useronline Delete Failed > ";, V2 L! a  N7 ~% q0 a2 e; _9 K
}0 ^* A1 H; O& A6 m; l8 S- u
//select the amount of people online, all uniques, which are online on THIS page/ a: j: v( A( V  v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 ]6 X* Q7 j5 L; C9 [9 C. b% b
if(!($result)) {
6 a) p8 [) ?" m+ n3 f" x) c( y  o3 \print "Useronline Select Error > ";; \0 x; i7 O. d$ m
}
3 f( G0 d  p$ r//Count the number of rows = the number of people online* y  j. c: O1 [2 t5 T) O* y2 N
$user = mysql_num_rows($result);
5 y' s1 Z5 Q% t7 q9 r//spit out the results
/ s, e( i) n, @2 ?/ Rmysql_close();1 C. q' r+ a' p9 K9 o
if($user == 1) {( B' u) z' t; J3 R0 }3 Y  l
print("1 user online\n");5 p6 r, {5 m2 Y8 b+ h& p8 x
} else {4 k4 U; e  v* |4 w% t: p  X* |" J
print("$user users online\n");7 B1 Q0 }9 c/ H5 o: H( ^
}
' ?$ u+ C% l: R! S5 z6 J?>, p7 d6 m/ W/ A/ v6 X8 C; u, S

. C8 l9 V8 k1 }9 S  O以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
; W9 ~7 J! @$ _4 ]7 `' ~$ P' [时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' a8 H! q% j. R$ p. f7 `3 i我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% J1 R& O' }* b! E0 H! Z/ v当然啦,这两款主机也是相当不错的。% T  @7 C5 n" {3 ]# G* }( {. p
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年9 X5 w! R1 O* h: G& [2 t
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ t: F2 a% k- |
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 q  h5 c+ Z2 d# _% `! d
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 H8 I# Z. V; d2 t5 Q% ?自己加QQ去问吧。

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