
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- j% i* w" S5 J6 h我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. X: n. A% s9 o
首先我创建MYSQL数据库表。# n) p& ~& l) C& M! Q3 d; b5 l
CREATE TABLE tablename (* @: j" b$ b D- _6 ]$ k0 {+ c
field type(max_length) DEFAULT 'default_value' (NOT) NULL) p; o9 Y7 m2 b0 n# Z/ j
}可以使用的SQL语句。0 ~3 J- ~! Z; u% Z) [
CREATE TABLE useronline (
% n) {$ P" V$ ]. ?3 t# K, Gtimestamp int(15) DEFAULT '0' NOT NULL,
( q9 ]5 j( O8 d+ @! s% a% Nip varchar(40) NOT NULL,$ U$ c% u6 S+ w! C7 u4 f
file varchar(100) NOT NULL,
' S/ ~& g& L$ e3 f$ s5 HPRIMARY KEY (timestamp),
4 u/ U* R7 c! @" |0 ?KEY ip (ip),# I# X# E3 O K8 }. t7 t
KEY file (file)# q" b% B2 p! p p5 [6 p
);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 Y. L$ `& F5 D( q/ R$server = "localhost"; //你的服务器
0 P9 x1 C$ z/ O8 c9 I$ n) g, ^$db_user = "root"; //你的mysql的用户名
1 @, s3 Q% ^: r' l$db_pass = "password"; //你的mysql的密码- H- z2 V* W& \
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# k3 ~3 n6 I0 }6 b# a- T4 G. j
$timeoutseconds = 300;取当前时间。
5 l* V( c6 u3 u1 P/ ~6 W7 t$ d$timestamp = time();上面的完整代码:
9 e- P# [. ?4 C( l4 L0 u<?php/ _/ q( ]8 p6 i& n; m$ C
$server = "localhost"; //your server. t9 ~! I+ }) r
$db_user = "root"; //your mysql database username
# Z- L$ B, P p1 t y7 R# |( F$db_pass = "password"; //your mysql database password if any2 M& i3 l' I# r+ n" ^
$database = "users"; //the db name7 R% C# ?; s' h# P
$timeoutseconds = 300;//timeoutseconds limit
) A8 t( `, N; d//get the current time. k9 A* h! S! a H9 Y7 i
$timestamp = time();- }) Y) X1 Q! [! _5 J# V
//calculate the lowest timestamp allowed
9 W0 O- j3 X" ?% w- S$timeout = $timestamp-$timeoutseconds;
( y: P( J" K7 W" U W& y?>连接mysql2 m3 ~7 p- T# r8 m" g9 a9 P1 w
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
# a/ j2 j# l1 i4 T6 I Xmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
! w% H; i6 g3 s' r& Rmysql_connect($server, $db_user);查询数据库的代码: w, a5 o4 i. h& y) g$ ~5 I
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 n5 p1 ], s" u( Q/ Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# p( H; ?2 K* d- L l, ?+ ]% F y. e
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 G8 B1 E- ?5 G( D* |
如果用户用错误信息的话,这样处理。1 Q. D4 S- Y" h6 _/ n" t. k/ G y
if(!($insert)) {7 R+ |1 x3 _! p: o8 \. Q5 c. c
print "Useronline Insert Failed > "; Q- \# w6 g9 o
}然后实现当超过设置的时间就删除该用户记录。' B0 _7 j+ K8 [. h% Q" J @
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 G; ]) Z! z+ p: l
if(!($delete)) {
2 H/ z1 \' }2 n5 k$ J. T2 R9 Rprint "Useronline Delete Failed > ";
9 O$ _6 g4 Q% G9 V, p}下面我们解决数据库中不同IP的问题. O; f. M2 ]" n" f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用' M( T! D# S! j& X$ l e
mysql_num_rows(query);来统计用户,代码如下。
" d) U3 `" K' C y% F5 P# O o$user = mysql_num_rows($result);最后关闭数据库。
9 ?: w8 O9 l' I$ l- Q0 `' `mysql_close();显示在线的人数。
) l/ {7 g' T8 qif($user == 1) {
* e. N2 U7 v+ ]3 L$ \print("1 user online\n");
) k# O9 ^" p/ u# j# W} else {. T! Z1 y3 v! N5 f. i
print("$user users online\n");
" U4 ^: ^2 v. b}最终把上面代码写成一个PHP文件如下。
& ~3 H% V0 {) C( j6 D8 |5 r<?php" Y) Q4 A7 x Y& F( o# I5 d1 e. d6 F
//Put your basic server info here0 ]6 R e Q+ Y8 ^$ t; ?
$server = "localhost"; //normally localhost7 p7 P/ H# N: J k9 n9 Z
$db_user = "root"; //your MySQL database username
" h' O/ N f7 V8 A. _7 q+ w' d. F3 w, e$db_pass = "password"; //your MySQL database password: x! @* u( {( w/ m; e
$database = "users";
! d5 n0 }! v3 Y) A2 T$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are T' q1 J; N3 l
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
O% ~7 k. I9 R) J// $timeoutseconds seconds)6 k" |0 s5 i+ v `9 r+ }
//this is where PHP gets the time
# e8 w n& p; L' f( C$ u. j, i$timestamp = time();' @" Y1 W6 l4 V- C9 t% S, ?
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed" K" c. M$ n, z6 h
$timeout = $timestamp-$timeoutseconds;
1 i: B \9 c+ T! a8 i//connect to database: X' V: n2 t" B) {1 X5 \
mysql_connect($server, $db_user);
8 q( b, R# P: c3 L0 y$ ?; L, t//add the timestamp from the user to the online list$ c( ?# E4 c7 b& t7 C G; A; v
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 T" U. S# Z/ q8 s1 H) G: A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, U. @0 D0 [ w: K: S7 \. Q1 A6 k
if(!($insert)) {
, Y: S2 X; a* d# H' _# o$ Z; Hprint "Useronline Insert Failed > ";
- C7 J% n+ ~* A5 P2 k+ u- N( @}, N3 }/ h. R" x
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
. G$ n! B2 |9 x! n8 e! _0 x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1 q) u# M1 H3 s3 e
if(!($delete)) {4 g+ K, b9 s+ s2 {4 F) I
print "Useronline Delete Failed > ";/ x& m7 W- S' v. B
}7 U6 u5 |3 h3 _; D# H; |, y% [/ o$ Y
//select the amount of people online, all uniques, which are online on THIS page
8 A7 {6 t4 e- E A5 t$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
! d7 p+ l! H; \( a- u) yif(!($result)) {
1 m3 o+ S3 {" ^# T, K6 cprint "Useronline Select Error > ";; M* O& _; J3 w( x& |+ \+ ]
}
0 E6 o( I. z+ a; r2 [//Count the number of rows = the number of people online
, d7 `/ g; b4 E# [$user = mysql_num_rows($result);
- n6 r6 O0 W$ S# O. {: P//spit out the results
0 s3 U. q h) ]/ [! r' I% nmysql_close();
* C1 X& l/ d Cif($user == 1) {8 `; }6 t' C; N1 U2 S
print("1 user online\n");$ ?4 f* N. O2 Y1 V1 @# D/ a' y
} else {5 g5 }' E( G6 I# G. Z$ m' q
print("$user users online\n");
, M) l6 g/ I) b3 B# t}1 A4 x: j; p2 t; q" h$ e) z' X
?>* Z+ V. F, F' B8 k
; M% C9 J% a& t F& \4 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。 i9 ]7 `) B, N4 T8 F( B
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
+ W9 E- B" @& ^2 S0 y我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。" X6 @; B# }: |7 R
当然啦,这两款主机也是相当不错的。
7 W" o" F3 N, X9 z0 W5 B" h智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: `2 d6 s' S7 a5 m+ n标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
& E W5 y; E3 U: e1 L% S3 c提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 5 T* _; m5 Z: I3 [$ l. P2 Q
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
* e, W) G1 S4 i- Y自己加QQ去问吧。 |
|