
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- ?4 b F/ X U8 k$ g7 Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ h- r. @) |4 w( W; o3 T! H首先我创建MYSQL数据库表。; v) j4 r9 V. D1 w r' J! a
CREATE TABLE tablename (
( l; m; x2 y' X) Q$ ?4 B: P; }+ q7 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL
# ]6 x. s3 W) n, _}可以使用的SQL语句。
: h2 r+ ]% A9 k/ i( YCREATE TABLE useronline (" s a5 M7 k3 P0 O
timestamp int(15) DEFAULT '0' NOT NULL,
' E& L) I, h [( N" P' ^2 T: H! uip varchar(40) NOT NULL,
9 f' `' `, }& C- ffile varchar(100) NOT NULL,
6 I. ?; ^( \+ e5 c6 l4 V1 _) X/ z8 YPRIMARY KEY (timestamp),
: O" \9 r% T, s* S! v( n3 e& u; HKEY ip (ip),
8 a" _, c; A @5 s4 s& sKEY file (file)6 A+ ~; ~; y J) S
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ ?, f5 g2 S* r8 j* ~# a. J* F
$server = "localhost"; //你的服务器" H& s& C" n. ]& X# [- y1 K
$db_user = "root"; //你的mysql的用户名6 \% B5 X! k/ ?6 V6 M
$db_pass = "password"; //你的mysql的密码
1 X7 M7 | W6 m' x; [$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( [% J- H' M' u" i$timeoutseconds = 300;取当前时间。' o& G" M; |2 A7 x" {9 ?+ i
$timestamp = time();上面的完整代码:3 F- w2 N! f1 w c, f% a8 |0 W
<?php, F8 a. b2 O4 N. P' K3 P
$server = "localhost"; //your server
1 E: C* c4 p. A# V, X8 [% g$db_user = "root"; //your mysql database username
. g/ e* J( f9 @ h6 X1 }- H$db_pass = "password"; //your mysql database password if any
; Z/ ~ z8 U) B+ b( w6 y( ?9 `: A9 m/ ^$database = "users"; //the db name% u0 y$ ?7 Y( e% v
$timeoutseconds = 300;//timeoutseconds limit
/ U& S7 @1 N0 B/ Z//get the current time2 ?# u) Y/ d7 s
$timestamp = time();3 V7 P O: Q& n+ u
//calculate the lowest timestamp allowed9 u$ t# k ~, V- R8 X* l0 A/ }
$timeout = $timestamp-$timeoutseconds;
% @$ \: @: T: v: p8 g' {?>连接mysql! P; V, q5 v5 Q+ L' H. S
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! {( n6 P- G! L9 {4 b+ N
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* N% z2 ]6 F' K# R H% Z$ V3 emysql_connect($server, $db_user);查询数据库的代码:
7 ]& T" `0 y3 d- cmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。' p2 u4 @0 p; }# ?2 O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 X8 C" R# }! i+ f2 W('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, t) g$ F) }6 M! y: J
如果用户用错误信息的话,这样处理。
! A1 t9 C2 m4 m0 R: g) [if(!($insert)) {
- `) L, E) b" [3 k2 u) R6 b( Yprint "Useronline Insert Failed > ";. a0 f# }3 M; L; p" ?
}然后实现当超过设置的时间就删除该用户记录。( u: ^$ g O: e9 k; F' X+ h" d
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
; O# p) P; f+ `. C7 O3 Tif(!($delete)) {
: m8 b) `& A6 ?" X8 Uprint "Useronline Delete Failed > ";, S7 [4 {6 O3 L, Z
}下面我们解决数据库中不同IP的问题- R: u! `$ Q6 e, { L# J2 E$ o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 N6 K+ w0 z- U
mysql_num_rows(query);来统计用户,代码如下。: z* L7 z% H7 F/ o$ x& M: H
$user = mysql_num_rows($result);最后关闭数据库。
$ l5 n( ?( T& h9 a% zmysql_close();显示在线的人数。& H5 P( O( Q0 n/ F/ p0 i- b* `
if($user == 1) {
0 [- N5 Y Z7 w0 zprint("1 user online\n");
+ o" O, C. A! K} else {
( A* a( L' n E* E& e2 c/ |" X4 aprint("$user users online\n");( y3 f3 D W) Q, R7 {
}最终把上面代码写成一个PHP文件如下。
7 J5 v- d3 W5 N<?php# U& u& D h+ x. b7 X
//Put your basic server info here1 ~) o. H: T( Y) |
$server = "localhost"; //normally localhost
5 k" M0 |3 e: P( e1 B0 H$db_user = "root"; //your MySQL database username3 U# u0 ]5 V" _& \; L' V
$db_pass = "password"; //your MySQL database password
* \2 X6 J: N! w( J& V( i, ?$database = "users";) L$ k4 X% L2 f! Z! m
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" R# c9 H+ Q% r// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last L) a( `: u3 e$ u, Y2 g
// $timeoutseconds seconds)
% `/ O( M; H- O//this is where PHP gets the time
3 M5 [' ?) G/ w p6 r! m$timestamp = time();: ^: x7 z0 c: n5 o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 P6 k; B6 \) ]" d y$timeout = $timestamp-$timeoutseconds;
- i) |' R: q1 J# \5 r+ D% T//connect to database
. s) a& J( T- }+ Q8 N- O( c9 K dmysql_connect($server, $db_user);; u8 u ?& p% x# ^# U9 K7 M' F4 o
//add the timestamp from the user to the online list! M# b! u' ^, i: V
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ t" T" c5 H; ^0 }& g$ C('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; M- ~( P2 O% q7 D0 eif(!($insert)) {
+ ?( \. o j1 O* R6 h/ {1 R/ oprint "Useronline Insert Failed > ";% Q; B; ^7 r) l
}& N: A- i8 e( e
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
1 e3 d: ]2 {% s/ |' b' L, p$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. b' I: D8 D% L$ ~; d5 qif(!($delete)) {
* g* R- v! G! u0 Uprint "Useronline Delete Failed > ";& @4 Z. ?9 y; X
}
, D/ E2 g# ^$ J/ b3 A* `//select the amount of people online, all uniques, which are online on THIS page
; [* T) q5 e2 o. A9 U) |/ |1 Q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, W0 B3 G& Z! ^3 O ~! N( }; D4 u7 p
if(!($result)) {
+ G0 y5 p6 D6 k( [& J8 O' i$ vprint "Useronline Select Error > ";
2 @/ t+ b6 X! S) ~}+ P# W/ N- T* }2 k( }8 Y8 k
//Count the number of rows = the number of people online
- v, B. }9 q! S4 H5 D+ z H; s$user = mysql_num_rows($result);( Z8 q9 C. g8 |% `) E3 ]
//spit out the results5 |5 f. J+ S% E& ~% e5 z% x( p
mysql_close();; ]6 }% d# A7 Z+ g% L
if($user == 1) {
3 {- w" L5 ]6 H/ `3 ?4 W+ ?: Rprint("1 user online\n");
( F3 Q0 g1 U1 D3 C6 j; [6 z6 W, x. z} else {3 J- i R& }2 H
print("$user users online\n");
# ~# B( _- O ]}) Q4 n/ ~( v6 f$ R) a4 y( w1 |, F" F
?>! H4 E0 V) j1 Z
2 h7 {* C5 b, e/ i
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 C, z+ f6 K% M& c! r
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
& D3 U. x7 K# Z1 Q" Y我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ B; ]* a6 v- F, X! [2 X7 U
当然啦,这两款主机也是相当不错的。
: {$ [. h% [) k9 H$ D0 n1 `智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, t: K( }1 D. ^6 o8 q% z标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
' o! w- F) ~5 }1 ~4 b提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
8 N. c# k3 K7 m空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& ]7 L& O6 g6 ]- A( j6 ~( q
自己加QQ去问吧。 |
|