|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!7 F4 k$ P4 O$ I4 H" i. ^$ }; b, ]' |5 `
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 o8 N$ a$ P& I6 q* ]
首先我创建MYSQL数据库表。. B+ [$ k4 R; _" ~& P
CREATE TABLE tablename (: s! x4 a" F+ T X
field type(max_length) DEFAULT 'default_value' (NOT) NULL+ P5 g: t! {6 x
}可以使用的SQL语句。+ G% Z7 p* s3 \8 w
CREATE TABLE useronline ($ @2 Y/ F3 X$ e, c' H8 Z) d
timestamp int(15) DEFAULT '0' NOT NULL,+ Z4 y7 \7 l- ~1 G: ^$ v
ip varchar(40) NOT NULL,
2 o T9 Z6 R$ ^: w8 \6 hfile varchar(100) NOT NULL,3 Y' L$ k' o. a& w& I/ a( q4 g! |
PRIMARY KEY (timestamp),4 x) K( |& F5 B! W
KEY ip (ip),
7 A) j" h7 _5 t8 S! e, M' xKEY file (file)
: B$ b" b) T- q& _);下面我们是PHP脚本,首先我定义MYSQL的信息。& O' D- S9 W' f: P* V3 E6 M
$server = "localhost"; //你的服务器
( g* V) @; E4 r8 T/ _1 R$db_user = "root"; //你的mysql的用户名
# Z' y6 _1 w: f# n4 s$db_pass = "password"; //你的mysql的密码
& p6 z3 h! e* D! o$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)/ g1 u a4 {6 ^) y
$timeoutseconds = 300;取当前时间。5 p* p3 A" l! v
$timestamp = time();上面的完整代码:
5 r, Q* y: t$ `: z9 [9 y& H<?php
0 d# }, R& D# a. g' W u$server = "localhost"; //your server
& |4 _6 @; D' ~; v) V q$db_user = "root"; //your mysql database username$ |, v4 G T% R7 T9 F9 Y3 E
$db_pass = "password"; //your mysql database password if any
% l4 {6 {2 t3 O2 C8 w, ]$database = "users"; //the db name
a& @, ^ P1 b8 k$timeoutseconds = 300;//timeoutseconds limit3 {' R5 S; H9 b7 h: Q% @1 `' C
//get the current time
6 f5 D8 u9 _$ G$timestamp = time();
1 V: W) T( o! i! g2 d//calculate the lowest timestamp allowed
4 Y! i- w7 \% C1 x& @, Y; r: Y$timeout = $timestamp-$timeoutseconds; S( N+ o0 s+ @
?>连接mysql
& r. i. R9 L6 P3 j2 l$ q. Hmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
0 ?$ Y; W% N7 g% S% q1 G8 mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
' V: e J2 X) f# U7 l6 b/ @: Bmysql_connect($server, $db_user);查询数据库的代码:3 F9 j5 w4 e) P" g. l$ |" k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 G" c! }1 E% i" o
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 L9 E) w/ w2 _* ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. ?* ]- N, U0 d& j4 E, V. m. z如果用户用错误信息的话,这样处理。 m' f1 A( H/ h" z, ~
if(!($insert)) { s& u x3 r" P# g) S. ^& f
print "Useronline Insert Failed > ";( y+ l ]3 e! {
}然后实现当超过设置的时间就删除该用户记录。
8 ?0 ^4 {6 w: M/ A$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, S. z" ]1 W+ h# Z- F# y$ K% mif(!($delete)) {
& `( p2 M# L6 Y i5 P6 [+ K+ e! W( g4 cprint "Useronline Delete Failed > ";6 J W$ T7 Q7 n
}下面我们解决数据库中不同IP的问题# u: {" Z0 q- A0 D3 U/ I y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 N9 `* E# x+ @4 Q; K# qmysql_num_rows(query);来统计用户,代码如下。
8 r$ U. J) t! ?$user = mysql_num_rows($result);最后关闭数据库。$ V! r+ I. q( j
mysql_close();显示在线的人数。
+ d. ~- O8 x8 h( Rif($user == 1) {
- e$ t0 y( |/ n; m0 M% d; |print("1 user online\n");
- t5 ^( h) h/ g7 i' S} else {
, H/ G& j/ \2 Pprint("$user users online\n");" ^+ v% o" T) O4 [# M2 p' k
}最终把上面代码写成一个PHP文件如下。# b5 a- b& i" I& R* G- f0 i5 X
<?php: b/ H; l0 ]' W% y* V
//Put your basic server info here7 g) O* @5 Q" v8 c
$server = "localhost"; //normally localhost6 b3 Z7 p: B* c* n' e% q
$db_user = "root"; //your MySQL database username+ Z3 F# v8 |4 w) M1 P* Y U
$db_pass = "password"; //your MySQL database password
8 |8 z3 i. S; H8 M# F! s$database = "users";9 J- Y! p9 [: J+ a2 Q3 Q
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
) Z' k- A5 w! ^ `$ O$ z// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 ]# L% p7 S" w. v$ F: _! A& ]
// $timeoutseconds seconds)/ F+ y& d. m5 c( q! B6 k0 p; h
//this is where PHP gets the time( f4 o0 v8 l7 N2 q( S9 p6 a
$timestamp = time();2 {# ~& ~9 x. q8 |' C0 w
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! U$ P" R/ |+ [( e: |
$timeout = $timestamp-$timeoutseconds;7 s1 G @, s1 [
//connect to database% Y8 H1 I5 v! Z. M! b% A1 o, D
mysql_connect($server, $db_user);
' `# q& q' Y- ` O. J _//add the timestamp from the user to the online list
0 g: R1 F, m0 I6 m6 m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
: Z9 ^+ F) @1 J7 a: X) h% G('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 c1 Y" R0 }- F6 Yif(!($insert)) {4 n: ], {$ E; I( |6 _
print "Useronline Insert Failed > ";
l& r5 n. r# D7 p5 x4 u}
- w6 t" N, I0 r4 Y" O7 B& m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. N! b: M5 e6 D3 ~! t7 s# m
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
; g3 }9 \0 T% e9 e& sif(!($delete)) {
: \* U! q2 a) Y2 f* N5 ]print "Useronline Delete Failed > ";
4 x; X) a: R5 p# f}
: d |3 e: }% S: B//select the amount of people online, all uniques, which are online on THIS page0 N W2 l5 r# O7 @4 Z, Q8 _( g% `
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 R) Q" G7 e& r3 p0 [9 w, z4 i' Bif(!($result)) {- A3 w! p) z+ ?' g8 Y# J3 K- O; ?
print "Useronline Select Error > ";* R# o( T/ h0 o& a& J/ y
}
5 ^' o: T2 u" [+ d1 k//Count the number of rows = the number of people online) K4 T# U9 }7 E3 q
$user = mysql_num_rows($result);. C6 O e( U3 L* D, B! S2 M
//spit out the results
& ^3 |1 K; ?) \mysql_close();3 r/ l( J5 V; D0 w3 S4 ^
if($user == 1) {. w1 p+ L* ^, b6 W8 Q* Q
print("1 user online\n");
5 v- T: g2 K3 G+ S! e3 J' N5 p} else {4 j5 w* v9 p, c4 f }# O/ V
print("$user users online\n");; T% [% m/ v- O
}
4 \$ |" x+ {- E) B$ \?>' t1 n3 e/ I1 U/ Z/ F6 O+ \

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