
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!% a- E: Q# c* o) U* W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 Y, O7 q% l* o首先我创建MYSQL数据库表。* N7 ^+ k# R" Z- D7 P" O8 O1 X4 M
CREATE TABLE tablename (
8 M3 v' K/ b; N& c0 cfield type(max_length) DEFAULT 'default_value' (NOT) NULL. e1 Y* J1 [% J }0 r3 O" F' ?! s7 K
}可以使用的SQL语句。
6 n% ~+ B9 w* Z# {/ t4 ?CREATE TABLE useronline (6 E- j! w3 t" x. K% S% x
timestamp int(15) DEFAULT '0' NOT NULL," c: s) a! S) L
ip varchar(40) NOT NULL,
& r3 O: R2 V" wfile varchar(100) NOT NULL,
" O) V0 m% X1 v. ~+ y7 gPRIMARY KEY (timestamp),4 y& y0 ^: e, u8 C3 L9 H
KEY ip (ip),
8 f0 s: {- T/ p$ J, e. ]KEY file (file); }7 N- g6 |# v5 A/ \. l
);下面我们是PHP脚本,首先我定义MYSQL的信息。* S$ H4 s) [/ d% A2 \
$server = "localhost"; //你的服务器
+ q/ q8 I$ ?! K! }: n! S$ s$ u6 R$db_user = "root"; //你的mysql的用户名% a6 H/ Y8 G( S7 P* d
$db_pass = "password"; //你的mysql的密码3 G& D9 j/ @5 L+ ^8 v; w6 a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" u: ?: ^' d8 g
$timeoutseconds = 300;取当前时间。
1 f+ A- z. C; H! Y$timestamp = time();上面的完整代码:
5 n/ V8 c; z3 J J: ^/ J9 q' _<?php1 ~0 E5 V5 \$ v2 Y9 e: B% G: X
$server = "localhost"; //your server
- i. h: p, O% Y( G$db_user = "root"; //your mysql database username
! \, l) Q! L* u$db_pass = "password"; //your mysql database password if any4 u; E/ P9 }2 s% y; {
$database = "users"; //the db name
! a* e8 ?* Y- C) Q$timeoutseconds = 300;//timeoutseconds limit/ t( p6 D; Q- i7 X- |/ P5 X
//get the current time
2 Q0 c% }0 u1 L$timestamp = time();8 q. \& _# c0 Q1 l* Q
//calculate the lowest timestamp allowed
2 C* E$ c$ b0 Y" B, Q) O' T$timeout = $timestamp-$timeoutseconds;) _6 o( M$ E2 \) z: }
?>连接mysql
+ V1 ]" A8 c0 Lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。- I$ {; C: e0 N7 O) O
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 m, y9 u" l! e' Z3 v6 e
mysql_connect($server, $db_user);查询数据库的代码:, L" j6 R+ H) d0 x% Z/ b
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
1 q6 ?+ m& O) j: p% R1 X) @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- ` G$ y$ }9 v7 v9 L2 O+ } W, b
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ j# J6 i! p' l' S
如果用户用错误信息的话,这样处理。. L: y" G4 [. n9 ~0 Y2 `
if(!($insert)) {
- V2 x7 b, V! f$ z3 j; \8 @5 |print "Useronline Insert Failed > ";
6 }: o5 |, b$ M: w! w2 y9 o}然后实现当超过设置的时间就删除该用户记录。4 S B, ~& n( W( f. {7 x. ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。! v* _. B) l3 W% ^' `6 K
if(!($delete)) {
. @) n$ o* {+ x3 Q' eprint "Useronline Delete Failed > ";
+ }% _& z/ I) J, U4 O; I}下面我们解决数据库中不同IP的问题! p( @9 b) E9 s1 [- P, i1 o7 I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; c, O6 w( w# Q$ [' Tmysql_num_rows(query);来统计用户,代码如下。
5 e# P( b3 T) U4 d$user = mysql_num_rows($result);最后关闭数据库。% R5 k/ T5 `+ O# z2 y0 z
mysql_close();显示在线的人数。
1 g- z5 C H2 ^( x3 E# w& gif($user == 1) {
+ z8 `$ e, v: d7 s( z8 y2 Xprint("1 user online\n");( O, L1 A/ w* z7 g
} else {5 t0 ]( ^# G) Z4 P% s+ J
print("$user users online\n");
, y' \* c* S8 A}最终把上面代码写成一个PHP文件如下。
. G0 M/ h& |3 o/ L, m2 P# [- r; C<?php8 S2 Z( m) x5 j- ^
//Put your basic server info here, I8 i0 b- T5 t+ X( @
$server = "localhost"; //normally localhost
7 {$ Y `) N [1 P$db_user = "root"; //your MySQL database username7 t" n# H- E8 C
$db_pass = "password"; //your MySQL database password5 ?8 h5 \) j, K E. F5 i4 S/ d# s' z
$database = "users";' u# C% Q) s/ `; O" X1 c& C5 G' J
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
* s. i/ d" m2 Y" A7 B0 D// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
, N- o; H. v, E- J @8 c# I- g% c+ n1 h// $timeoutseconds seconds)
) s7 d, U6 J9 @" E5 U5 E//this is where PHP gets the time% s: p/ S( |! e9 h' S$ |5 I& Q
$timestamp = time();
: {( H8 R+ ^( q, j/ D//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& V. m2 N/ e* O I# i3 d
$timeout = $timestamp-$timeoutseconds;
# M7 K V5 }: e, \//connect to database
5 g1 ^8 t$ {. F* W8 J/ [( ]mysql_connect($server, $db_user);
- T! j( a; Z. s: C$ l//add the timestamp from the user to the online list
( N% M/ H) _1 J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) D% S; g1 O! V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 R( h$ W' w+ }. X+ w/ y. z& _
if(!($insert)) {; h. k! p' Z" P. O* t8 ]$ @
print "Useronline Insert Failed > ";6 e. U+ h- ^, R4 F- ]) K' D+ } Q
}
. X2 O A: Q7 U- P//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 g: T( _( G: p4 V# z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 n; O7 B) f9 o9 {" x
if(!($delete)) {
& n* Q! @6 V9 _& T- Sprint "Useronline Delete Failed > ";5 r0 H2 V% A. o* m$ u0 l8 L
}
( v, r4 z! Z7 A9 Z//select the amount of people online, all uniques, which are online on THIS page0 ]9 b( ^" Y, j! l: I a5 B% b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
: h. A6 ` Z c7 Z4 f: {8 Xif(!($result)) {
2 g3 t" c; r iprint "Useronline Select Error > ";7 ^: A0 o( H- X6 m1 `0 m" i, z
}
, M, x/ r# q: z4 |//Count the number of rows = the number of people online
& m( }) @4 p' p) l$user = mysql_num_rows($result);- G8 }4 n/ \; v' b8 B5 X
//spit out the results" ]6 {8 A3 i+ P* f& k
mysql_close();# F7 U t0 A9 D4 ^$ t
if($user == 1) {
4 ~* H0 {* U2 [* Q' wprint("1 user online\n");6 F7 f. o- D w1 f
} else {- ^4 m& y6 e: g0 ]1 M _
print("$user users online\n");
' ]0 V) [3 Y+ a: J T}) ^3 o& e y8 c' @" m g
?>4 G8 G$ v a7 D. P3 m
( h4 Y E0 c' D' K6 D( m: D$ F+ [
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。* U5 f" O L- A# x5 Y3 j
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。3 z; A! S. c7 X4 G; [. Z1 D# h- u+ @
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* }$ j: y0 D. F* O1 f6 u; R$ O9 `- X5 `
当然啦,这两款主机也是相当不错的。
3 v/ s' Y2 c5 b4 @0 o( u4 h智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" I8 f6 G2 n8 N, a; |8 t0 F
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
i0 W- I* _* E, z% J1 k提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ [9 L- Z- }- {) p空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=550 N# l B( C, h' H1 L$ |! S; ^
自己加QQ去问吧。 |
|