
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!: ~: Y5 |1 d1 Y, \+ T3 O* K4 B
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% h& S4 s+ N9 _/ d# T& \
首先我创建MYSQL数据库表。
0 q" P$ y$ n% uCREATE TABLE tablename (
# G0 b7 s7 e" r. X4 m% Xfield type(max_length) DEFAULT 'default_value' (NOT) NULL6 F. C$ l. ^* E: M( S3 u
}可以使用的SQL语句。 q; l$ y# \& J% `0 j! }3 t
CREATE TABLE useronline (
0 c: P& H; w9 s3 X. gtimestamp int(15) DEFAULT '0' NOT NULL,
* m# \7 i% {8 r5 f2 Kip varchar(40) NOT NULL,0 B. o, k, r2 u
file varchar(100) NOT NULL,
8 N; }: ]+ y9 I+ W4 `PRIMARY KEY (timestamp),3 z1 z' _2 H t. q: C4 |# m
KEY ip (ip),, T. C1 d5 z6 ~( x1 g9 P
KEY file (file)
) L6 L8 L) i W);下面我们是PHP脚本,首先我定义MYSQL的信息。/ [4 `( g! f: V( e. \! P
$server = "localhost"; //你的服务器
; t5 G5 w D/ {0 w- W9 r$db_user = "root"; //你的mysql的用户名2 U7 I4 e/ P( K' h9 @$ q
$db_pass = "password"; //你的mysql的密码
+ d) t- }) j) `3 C$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 x- w7 t3 }& U7 A. h) v$ O$timeoutseconds = 300;取当前时间。
/ ^# F7 ^* D4 S; d0 Q. S$timestamp = time();上面的完整代码:" f* l5 Z% b& v9 c
<?php
- }% d* d8 ]$ h7 E; l. P t9 ~. p. P$server = "localhost"; //your server
0 E+ U5 P. z6 ?6 y: h( W$db_user = "root"; //your mysql database username
* }5 ^' R% B! {! X! |$db_pass = "password"; //your mysql database password if any
' O5 l. G' v W4 v$database = "users"; //the db name$ y$ Z% g" U/ M3 f7 v( X+ U
$timeoutseconds = 300;//timeoutseconds limit6 K. a2 p: G1 z1 G4 e. D
//get the current time
# F/ Y, Q- H; q) x$timestamp = time();0 s) J: s/ ^% O# ] b v; O9 D( A; o
//calculate the lowest timestamp allowed
0 U9 f5 \ E5 M$timeout = $timestamp-$timeoutseconds;
k8 I7 r9 w; y/ q?>连接mysql7 v4 C$ ?. d& c6 ?' u. F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
]/ M* @3 e$ J- V! Dmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- Y' {2 m' x: `3 z7 Zmysql_connect($server, $db_user);查询数据库的代码:
7 ?2 s6 M# W4 v; A! _: w5 p2 jmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。/ a! S; x9 k- q' R1 q7 a
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 }) l8 M% f: Z/ O. {7 o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) k# Q& F' ~& n4 t9 c- Z6 w如果用户用错误信息的话,这样处理。
7 X; Y) o! K e4 t- Z0 G3 Wif(!($insert)) {8 W$ T5 B& G3 k8 ^
print "Useronline Insert Failed > ";
6 ~; m- \" M4 b5 D}然后实现当超过设置的时间就删除该用户记录。1 }/ Z; C0 ^6 [) y0 \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 ^: q2 f) Q3 Lif(!($delete)) {, u: ]# h+ Y" u; O9 B% I# j4 G
print "Useronline Delete Failed > ";6 g( I( M# Z K1 K( C7 S
}下面我们解决数据库中不同IP的问题
5 U9 j2 F6 ~+ k& ~, F* \- X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 e# f- W) r! [5 w: P% T) {3 Wmysql_num_rows(query);来统计用户,代码如下。
7 y1 _7 T* t$ E- N( n+ n, [$user = mysql_num_rows($result);最后关闭数据库。9 e7 z6 t C: [# ~
mysql_close();显示在线的人数。
# y/ L7 B4 o" `' J E+ {if($user == 1) {; _) ?1 T: p3 u' K( w; k% v0 h. F( w
print("1 user online\n");- B" R" _' x9 [) F& [
} else {$ E7 K( g: A2 e
print("$user users online\n");5 E' n) T2 g" b: e* Y& p
}最终把上面代码写成一个PHP文件如下。* M3 a5 N6 X1 H( _! y$ l
<?php5 C7 O* d. W+ A A5 R, j
//Put your basic server info here
3 L" Q- t( M/ x0 q$server = "localhost"; //normally localhost e2 q& t6 [8 C3 \
$db_user = "root"; //your MySQL database username. x7 ~( R3 O" r5 t2 M# y. f
$db_pass = "password"; //your MySQL database password: t2 Y" j' i$ d6 t! G* j. B
$database = "users";4 A2 f3 r' r9 ?; L! Z1 r4 V" |
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are* o# x3 P/ |/ o' F: u/ D9 ^
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last' {4 c7 Y3 b' v( g1 y
// $timeoutseconds seconds)5 t. v8 N1 w9 Q7 |1 ~1 L
//this is where PHP gets the time N# B0 W5 u0 Z0 n( P
$timestamp = time();
6 Y! A: q9 T9 L# B! {% x3 o//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed A1 R5 C s+ t% C* F' J8 M
$timeout = $timestamp-$timeoutseconds;
! \5 ~0 _+ {: u: Y//connect to database
Y9 Y# `5 L4 l& j2 Cmysql_connect($server, $db_user);1 N/ m+ q( o7 x
//add the timestamp from the user to the online list
- \$ W* n% k+ w$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 A& j' @6 P: f ~('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 q; r3 Y7 T0 e, g; X
if(!($insert)) {2 N- z2 Z! m4 F
print "Useronline Insert Failed > ";
8 f3 U9 z1 F. D/ N& c* y" c% p3 d9 P I}
& ^+ j& `' ?; r+ a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: d: x9 D; Y/ m4 X0 Y0 A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ S5 H' d' Y' T0 u$ W# \if(!($delete)) {* A S R/ j3 d, C
print "Useronline Delete Failed > ";3 y2 e( Z9 {( N! t8 s
}
- e% b# F8 n# ?& B. m: o( T4 U" ?0 E//select the amount of people online, all uniques, which are online on THIS page
# q; d$ p$ X" @$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");! Y5 x9 m+ n. s2 W* ]
if(!($result)) {
3 H3 J0 t7 M9 Q' w. [print "Useronline Select Error > ";0 g, v" C& Y2 \; S. I! I+ E
}
; v, K* n. |9 L" B( k$ J//Count the number of rows = the number of people online
1 X# F$ |4 Z; g c u1 n5 z$user = mysql_num_rows($result);
* q( W) T! t4 x( L6 _//spit out the results
2 G. y7 r. |0 X# Fmysql_close();
; R/ s- h! q" K! Vif($user == 1) {* o" A2 H& q2 s; S+ J7 u( Z
print("1 user online\n");9 }# c$ j# D* d/ q! [& i" Y
} else {
9 a# R M/ ^& s' S/ D9 b0 |: Tprint("$user users online\n");8 ^+ S5 Z% ^* t6 Y7 g( r
}6 k* A) z, a1 h! \
?>
9 K3 v" U; R/ e3 r- X3 A 2 s- V/ J: M# D/ r& e6 } _% t3 C
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! O3 g, i2 ^. X' ?/ r+ J4 f时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。( F" D* b4 F, n6 w2 n3 S6 W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: o' _6 t% W. R$ E+ ~( G当然啦,这两款主机也是相当不错的。1 V- e# j# `% o$ \9 s8 L% F( a
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年0 L5 q9 T6 z9 \3 D' n o
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- Q1 ~3 ?5 F/ `/ d. ?$ p5 Y提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* U& _% K( I2 f) U, [- f, g空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
( P6 A( ~* E% r8 }" d6 @自己加QQ去问吧。 |
|