|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 @, b( q4 } M; u6 w& [ ^
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. b, F5 J" @* r2 Z( `$ L
首先我创建MYSQL数据库表。
: {8 `: |4 c5 A, A# D# ~$ qCREATE TABLE tablename (, E$ d& J2 J) B9 H* y+ l, G7 Y% M5 ]
field type(max_length) DEFAULT 'default_value' (NOT) NULL0 t5 D- f% G: _- {( C
}可以使用的SQL语句。
% W0 v8 |5 }( y: \CREATE TABLE useronline (
, V' I, J! h. F8 E; z( }- |timestamp int(15) DEFAULT '0' NOT NULL,
* I, `5 M3 O1 ~4 q* Dip varchar(40) NOT NULL,) o5 ]/ }2 `: E( @1 L
file varchar(100) NOT NULL,) m. h8 W, h/ p4 |3 h. V
PRIMARY KEY (timestamp),/ W' r3 a4 l# c* ?
KEY ip (ip),
% O+ r" j7 F% c( l# j: kKEY file (file)- m |7 `' I0 X: ]' p: {
);下面我们是PHP脚本,首先我定义MYSQL的信息。
7 _6 y w( g1 `& U7 j, I$server = "localhost"; //你的服务器# T& U! h' o4 D. N
$db_user = "root"; //你的mysql的用户名8 X: g' Z! b, V* l- K" }& }
$db_pass = "password"; //你的mysql的密码
7 \- y4 Y7 `7 u, k4 J& d) P. l/ P$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 v" Q8 k" |1 `# O( E) |* ` |: a
$timeoutseconds = 300;取当前时间。
1 D8 Y* f( B6 J2 r1 u5 @$timestamp = time();上面的完整代码:
/ @9 @+ u4 L4 D2 y0 Q4 U<?php% P2 @+ j6 O* g
$server = "localhost"; //your server
# b0 H9 T# L! O& v: n8 Z ^9 [- w$db_user = "root"; //your mysql database username
6 K/ L/ z& H. y6 O/ P$db_pass = "password"; //your mysql database password if any
9 [& K4 E9 j8 g0 y4 ?$database = "users"; //the db name. o) U4 G+ q' w, o6 B
$timeoutseconds = 300;//timeoutseconds limit
. i4 g# ]- A0 Z3 I3 v+ E//get the current time, L: N7 R- X+ z3 W0 \: ]
$timestamp = time();
8 o' B* P6 P1 K//calculate the lowest timestamp allowed
; Z# m8 S( Z0 R$timeout = $timestamp-$timeoutseconds;7 o6 i% d* i3 `" u+ G0 ` C
?>连接mysql) s% D+ T5 k" ~0 E
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- ]' Q/ c7 u/ z) T/ x1 K* @
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! I/ n. l. I8 G" u/ {, q2 P2 g
mysql_connect($server, $db_user);查询数据库的代码:
2 A: }! Z( d. D9 N4 f1 J0 Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ G2 s* e! h) Z' q' G" x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% h" N: V7 m/ z& Q6 Z+ _3 W- A' R" y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" h j0 \9 A3 _: Q. F R如果用户用错误信息的话,这样处理。. w7 W3 A: Y8 | V7 h9 C
if(!($insert)) {3 Z; a- |, t: G
print "Useronline Insert Failed > ";* i# o9 | A; v, L' M/ `4 c" k
}然后实现当超过设置的时间就删除该用户记录。
8 c0 a, H* l" C) ~+ ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 G1 J/ j* A& I8 R$ Q, E- k- R
if(!($delete)) {
! q& y# e2 ^ G- {1 O( Xprint "Useronline Delete Failed > ";0 v' T- K8 u9 @; J" V$ O/ b
}下面我们解决数据库中不同IP的问题' f2 v1 p8 O" c$ H3 K7 g
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用$ {& p. Q, b f6 c
mysql_num_rows(query);来统计用户,代码如下。) v6 \4 U% f0 D& v
$user = mysql_num_rows($result);最后关闭数据库。
) c% v1 [6 d' u- amysql_close();显示在线的人数。
% V; [% v) i+ x! b/ sif($user == 1) {
( {# |, b' u& c7 pprint("1 user online\n");% T; R4 r; e/ k5 Y, [
} else {' D5 L% F' c! h; t! _
print("$user users online\n");
1 t8 _( L% k" h; I0 x: l9 Q}最终把上面代码写成一个PHP文件如下。
7 ?; I( H4 }/ r0 n5 X9 b<?php
4 m1 X4 H4 Y" y9 q) r3 m, p+ ~' O//Put your basic server info here. E" e- f8 U; C8 W3 T+ \0 g* g/ ?
$server = "localhost"; //normally localhost- p$ Q' j1 c2 E" G. Y1 T4 _* u
$db_user = "root"; //your MySQL database username
& c' @0 v& F1 z" ?$ B4 K8 A$db_pass = "password"; //your MySQL database password
' o& b3 l- f. n4 z' C( z/ e$database = "users";
/ E4 m7 p- R" I8 [6 F3 r$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 ^0 q2 ?# D1 L7 y% _// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ @+ n, M" b+ l4 a0 I0 x// $timeoutseconds seconds)
5 z0 }5 R3 @( x/ |5 w$ }5 g6 E//this is where PHP gets the time2 X- u0 U1 r. Q+ K! E* a* a4 n9 f
$timestamp = time();
: i! V# S0 w4 y2 q: @//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: v$ M2 y7 t- J* \9 x& u$timeout = $timestamp-$timeoutseconds;
2 S% j2 ^* [ z+ _& o//connect to database( Y/ s0 D8 ~- d0 S3 J! e, t f
mysql_connect($server, $db_user);
* p: ~2 l3 l- `: Q) k; z" e6 F0 n//add the timestamp from the user to the online list+ E% k3 u2 C, c- T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: @& H2 r) [$ _( l7 v0 D('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; Z. A! k5 s- w% I
if(!($insert)) {! K& E+ F, M- z k
print "Useronline Insert Failed > ";
5 F' J! T3 I/ ]% h! b" ^}
7 R% e9 D5 F/ Z+ V( R4 ~' \//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; p& T ?; ~6 O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 ]/ \" a. O2 w/ C9 y8 B) C0 Oif(!($delete)) {
# s( g" s- n J. V- V( [4 L8 tprint "Useronline Delete Failed > ";- Z) k* f% l# L$ L0 R( \
}1 c7 ]5 x$ e: b: P
//select the amount of people online, all uniques, which are online on THIS page
0 E& ] h: p2 y. k$ \8 k( N) q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");! h6 E) |, @0 Z1 y+ g0 ?$ h/ E
if(!($result)) {
) v. `+ _3 \# k, p5 p# Lprint "Useronline Select Error > ";
% x6 V( Z& t- e% \6 M9 Q: y5 j}
3 {) T5 `) H' @0 f; C//Count the number of rows = the number of people online" L3 y! y; B+ ]6 j" L' _$ `
$user = mysql_num_rows($result);1 [4 b. C! s6 r0 w" e8 @
//spit out the results
6 w& u, S6 _, \& [ I7 Qmysql_close();/ T1 \; g* f! @& p
if($user == 1) {$ Q& W1 u9 ^% A& n" B
print("1 user online\n");
' w- R% _/ I9 M+ R$ g} else {
9 r5 ~/ T- o2 b7 mprint("$user users online\n"); c$ `4 V, T) j$ l# _0 l4 U: \
}, b6 J7 v# b+ T
?>3 F& |$ n1 Z! b# v7 {

! c9 w* e+ ]' k. y+ [) n; C( f& z以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。1 \; f6 v4 c: Z
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: S' |% P8 t- V1 K+ ]: P我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 i/ C. m/ U$ }/ z0 x6 J! B7 {当然啦,这两款主机也是相当不错的。2 |2 l) _3 X6 g4 d/ ?) W& B+ `$ \, e
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年+ y# M5 m6 O# J# s/ H+ t- E
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年0 \3 ^+ s! O+ \& R
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* `+ \( a. Y; Q$ F% y空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# y5 Y2 I5 }% s: v$ z
自己加QQ去问吧。 |
|