
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
2 M( V+ n/ F. w8 f5 q$ m" Z/ C' A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) |; m; V, C/ O& P
首先我创建MYSQL数据库表。
' ?" `& y5 l2 a4 \7 u% XCREATE TABLE tablename (# ~2 P6 M" M9 _) X/ X
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 F- |+ ?9 D$ s* w/ Q/ A$ F6 f1 `* y
}可以使用的SQL语句。
4 @# G' B9 c6 |) mCREATE TABLE useronline (6 d& m8 o) C9 [4 [* F
timestamp int(15) DEFAULT '0' NOT NULL,
& `! [6 M1 j8 ?* K$ Yip varchar(40) NOT NULL,
3 p' h7 R% ?2 rfile varchar(100) NOT NULL,4 B1 N7 n% E6 G( d5 H
PRIMARY KEY (timestamp),3 x5 R& B P% i- ?0 c2 J
KEY ip (ip),
' U" _; [( m: a9 ^+ h9 z! BKEY file (file)4 h5 `) ~2 _6 e @! B8 I; X
);下面我们是PHP脚本,首先我定义MYSQL的信息。- b2 X! D4 E: X) P- u
$server = "localhost"; //你的服务器 Z4 S: J+ U# L8 N4 S
$db_user = "root"; //你的mysql的用户名
! X; l( J3 f0 U0 R J; i' u$db_pass = "password"; //你的mysql的密码
- |( X& N p/ w! X; N$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ c4 r, L$ V: c3 L' \. `2 ?! O$timeoutseconds = 300;取当前时间。" Z- e% i5 v( f" q& C( t+ L2 o( _
$timestamp = time();上面的完整代码:
6 e' }7 k9 O4 ~6 Y<?php0 ]0 \% v3 K1 H; q
$server = "localhost"; //your server$ l: r5 ?2 _( ~" `6 e
$db_user = "root"; //your mysql database username" e" }9 b2 V4 I3 t8 C, S( Y
$db_pass = "password"; //your mysql database password if any
/ ?( z: @, E# I: M1 Z6 T" Q, n. m$database = "users"; //the db name7 G" a+ |& I/ O# N) J! B2 k5 q
$timeoutseconds = 300;//timeoutseconds limit5 M R, g3 ]! x. D) ^% s% m
//get the current time
: d7 {4 }+ }% ^4 h o$timestamp = time();
- o2 v2 {+ x# P$ j% `//calculate the lowest timestamp allowed
2 f' w" t# S9 u3 f$timeout = $timestamp-$timeoutseconds;/ N ?7 K! C/ C9 M# z" Y$ _% S
?>连接mysql
6 Q- K$ ~( M" I5 jmysql_connect('localhost', 'username', 'password');也允许使用变量形式。, ~7 l4 p7 k1 I7 t
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: L/ |) E) W* ^1 E, kmysql_connect($server, $db_user);查询数据库的代码:
/ w6 b; e3 ]' D! [ omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。, f6 D- h: t2 }$ _# s4 R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ s" v' z" i) K% S# H# W('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 n& Z8 q9 g& B! h5 Q
如果用户用错误信息的话,这样处理。
4 E# Y! y9 \7 P d5 Tif(!($insert)) {
7 n8 P Q' K5 u# Uprint "Useronline Insert Failed > ";
1 @1 t2 R& Z1 p% v" f}然后实现当超过设置的时间就删除该用户记录。
0 Z! w) q3 f8 |: |5 L1 e9 t- ^3 I$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
/ [/ ~9 W1 y- w1 W& E, Y- `if(!($delete)) {
) Y' Y( q. h: a a# _print "Useronline Delete Failed > ";
2 p1 Y& Z9 B8 ]4 G}下面我们解决数据库中不同IP的问题0 f3 X" O, r; Z8 [9 D2 J
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: P9 N9 x" t O; u a* t& wmysql_num_rows(query);来统计用户,代码如下。
, C" M. e: e. l& }+ s% o, @. F$user = mysql_num_rows($result);最后关闭数据库。
4 j' k6 a, \" xmysql_close();显示在线的人数。
D6 k0 v$ X3 a4 T, Kif($user == 1) {
; J6 ^5 _" P5 k* p0 C; x8 E3 Rprint("1 user online\n");
4 F$ o4 I" }" k$ V: o} else {$ y2 j) p( l, ]2 a0 g, H! X! a2 ?
print("$user users online\n");
+ t4 @- k, a$ B}最终把上面代码写成一个PHP文件如下。; z% T, b$ V, r# {3 g
<?php/ z( T- ?# F: f* q: j/ E
//Put your basic server info here
, w% z0 t: [# t# w( y5 d6 B$server = "localhost"; //normally localhost
' |4 {4 A6 O+ _) s- j) l$db_user = "root"; //your MySQL database username
0 `7 T6 |! w) ^" j v' z$db_pass = "password"; //your MySQL database password
, s8 P) N' M& C& ]4 A$database = "users";
7 A/ t3 B, f, k! F, l$ @$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: l$ L* D- u( Q5 h/ K; k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
b( e) M6 t- s" P7 ^// $timeoutseconds seconds)
# T; C& H1 w4 J/ v& h$ P" U//this is where PHP gets the time
, D1 n3 X5 r, C9 H0 U0 \' E9 A$timestamp = time();
: P( M; w( | E, Y- ], D//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* s- V! k% u$ Z5 |( x
$timeout = $timestamp-$timeoutseconds;& a- e0 `( e* l; ?
//connect to database
$ o3 {. [8 r: j! S l# ]6 Tmysql_connect($server, $db_user);
2 P+ }4 \. C( |//add the timestamp from the user to the online list* m( A/ J! E2 Y5 _2 W
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% X1 o8 x- l3 a5 S+ r('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 k! b$ R# j5 I- D
if(!($insert)) {& W5 f" f: d" d* d5 H
print "Useronline Insert Failed > ";/ m: i& ^9 `4 y6 v! ~3 K
}8 a0 u$ }- A6 w# C
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& U3 l9 o" ^. X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 I$ F g4 Z8 S8 nif(!($delete)) {; t/ M; ]5 v) B7 D9 C
print "Useronline Delete Failed > ";
+ }& m1 c9 d, j/ T) X& h+ W6 F# y+ Y}
4 U% c- ~) s7 V% J' R6 x5 f//select the amount of people online, all uniques, which are online on THIS page
9 W: `! r3 y( @7 G$ W9 P7 f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
; r# Q( ^6 |1 Y! \if(!($result)) {# x C* ~; }" i( q
print "Useronline Select Error > ";
) v( r, c5 c' {2 S" c}' c; k8 {* S# j: O1 M: C
//Count the number of rows = the number of people online- g9 [7 y" C0 A9 p3 J
$user = mysql_num_rows($result);
- O& L* E# j4 m: l* _% a3 L//spit out the results4 e, X5 Z/ ~+ _, @7 A
mysql_close();( j5 r" L0 z. A+ @ @+ U
if($user == 1) {
8 G3 v6 j' k5 I" Y( `: p2 A0 `print("1 user online\n");
4 I* |0 [0 z2 q- E) d} else {2 p! C6 Y$ V& K" f
print("$user users online\n");
3 C3 H9 H8 p3 k8 e}
* N! R* G7 m; i4 k9 }?>
4 i7 {5 R& P: m& k( @5 ^- r, T
$ a& q% [% p) | N' r以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 i! q$ c! V) a! w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. C+ {" a3 K- F
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
! @% o- b/ h+ j6 U当然啦,这两款主机也是相当不错的。! ~6 V4 t. q7 j6 B* p, `
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年5 k h# U, l& D7 ?
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年# [! n9 a; h3 S$ i G7 d( y @
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! j1 ?$ }* a8 d' ?4 d F! ^* n
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, I6 j) p! T! A# N! |! X, V自己加QQ去问吧。 |
|