|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!' R5 h" P% ]/ O
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。2 d& @9 _: z5 n6 S: ]
首先我创建MYSQL数据库表。: v6 h6 [+ f# W& i! N V
CREATE TABLE tablename (5 O0 p+ @7 z7 f. S2 E" Z4 A
field type(max_length) DEFAULT 'default_value' (NOT) NULL% h t$ t' Z" `6 B9 |: k9 b2 X
}可以使用的SQL语句。
& Q: j7 g8 J% N7 H) ZCREATE TABLE useronline (
4 Q: N2 I7 G; P. S! r" ntimestamp int(15) DEFAULT '0' NOT NULL,) k+ r3 }! o( f( o& v6 E
ip varchar(40) NOT NULL," @4 `: q6 O& |: m* r+ s) k4 @
file varchar(100) NOT NULL,: A7 @3 M- P$ ?3 b4 [* N
PRIMARY KEY (timestamp),1 R9 g* N2 E4 ]9 A9 t" S5 z; a
KEY ip (ip),( T+ O- E+ r4 i! _
KEY file (file)" J/ D, _. I5 d
);下面我们是PHP脚本,首先我定义MYSQL的信息。9 A5 W8 I5 P# o; ?
$server = "localhost"; //你的服务器
; C/ Q# S3 y" f$ ?4 t$db_user = "root"; //你的mysql的用户名
% w) L( Y# T/ c9 r$db_pass = "password"; //你的mysql的密码
% O4 C/ B: w8 h; o$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
j; g+ M l, u$timeoutseconds = 300;取当前时间。
* O) s I9 v8 L- n$timestamp = time();上面的完整代码:, l1 S. _5 s8 T) a& h# U1 n
<?php
8 W: E% o3 W: x9 L1 X9 q$server = "localhost"; //your server
C! V% L. i+ q0 d& w8 P$db_user = "root"; //your mysql database username1 Y+ N" k: h% P4 Z! J
$db_pass = "password"; //your mysql database password if any
( m8 ?0 R8 d, A$database = "users"; //the db name
9 Z" O' M3 B+ O& Y' b7 }$timeoutseconds = 300;//timeoutseconds limit' \% @$ T' p) o9 M
//get the current time# D; i7 W" l. R0 E1 `, G! `8 G6 g
$timestamp = time();. X. |, s' m5 w# I! a2 C
//calculate the lowest timestamp allowed
3 D5 P0 n2 w0 t9 m/ o4 X+ j Q- c$timeout = $timestamp-$timeoutseconds;9 N D/ K( u: q% n1 E& w
?>连接mysql
, j9 I0 R/ {$ w- S, zmysql_connect('localhost', 'username', 'password');也允许使用变量形式。& r6 T2 M0 g7 i( s+ {6 c+ r
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, ^% d# \* ]' C! G3 P+ kmysql_connect($server, $db_user);查询数据库的代码:$ n8 Z! H/ G n7 F+ x
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
: g) W7 q% }( i) X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% }1 F' p: {. c' P0 ?6 y! F7 m
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");' j/ o; | t# K% h- }1 I n' T
如果用户用错误信息的话,这样处理。# U8 j. s! R$ v+ f
if(!($insert)) {
& }) J0 M4 G5 |) e, ?print "Useronline Insert Failed > ";0 `/ `% W+ c6 J* E4 `. g+ V, x/ J
}然后实现当超过设置的时间就删除该用户记录。' j5 _7 S5 d: J* r
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 R1 S0 ^+ }" V" K M+ {& t; o; J
if(!($delete)) {
) U% E3 \3 i& u8 ]! Lprint "Useronline Delete Failed > ";+ k* j! k8 d+ U: ]
}下面我们解决数据库中不同IP的问题
$ K* N3 M& i: N, Y, i7 v$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ I" Y4 J& U8 \; hmysql_num_rows(query);来统计用户,代码如下。2 a i2 W* I6 r1 M6 k, o9 q2 J
$user = mysql_num_rows($result);最后关闭数据库。
- \ U# x$ A" J( `% H0 d5 Smysql_close();显示在线的人数。
6 d! N8 A# w! y. v) ?if($user == 1) {
# a8 }1 @9 J; s' B w1 q6 p8 nprint("1 user online\n");
/ G+ \$ R8 o4 f" [! \} else {
, H/ U+ M) Q+ t3 Q' D5 j; Y. p5 }) Iprint("$user users online\n");
, u+ Z, M0 ~' Q7 Q8 [6 D9 D+ H9 r" w}最终把上面代码写成一个PHP文件如下。
; X: q. ~5 z9 I e' {) m<?php
' V+ E. D, s* R" I1 X//Put your basic server info here2 t2 I0 n! w) C( F" J5 x0 Q
$server = "localhost"; //normally localhost
' J: y# A* I' K) u$db_user = "root"; //your MySQL database username0 `0 l9 t8 P% m/ r) I, P: E" p
$db_pass = "password"; //your MySQL database password( s6 z- r" l' t' c
$database = "users"; \# ?# p# |) s* k A1 x3 V8 M
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) l+ j7 W: c3 {. v! I3 u7 X! Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last. f' F8 W! D5 P
// $timeoutseconds seconds)
7 g* E) j @8 Z+ R- d) F, v//this is where PHP gets the time
. ]. x; n8 Q, c6 V$timestamp = time();% H" p( s1 E. g' H4 E
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed, o1 `$ G0 N5 E, Y
$timeout = $timestamp-$timeoutseconds;& u4 \8 M3 ~* n1 l
//connect to database8 j# j+ `/ u7 Q+ P0 L* U4 B. @
mysql_connect($server, $db_user);
6 ?( D( U* o W# z; ?' q+ \% r//add the timestamp from the user to the online list
0 y3 W& k! a4 C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 k/ |2 F- k% K. ] O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* W2 I8 a* {* l3 Tif(!($insert)) {
+ }( ~. r7 e% U2 h" Z, F7 ]: tprint "Useronline Insert Failed > ";$ u5 M P) g( @: p3 Z$ G
}
! F" k( k$ C9 g2 j' a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& W! s* C4 E% s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: C, B: @- u8 m+ tif(!($delete)) {
) t& ]! p4 f2 \1 Tprint "Useronline Delete Failed > ";% Y6 N1 ^# b. R7 @9 l
}
, e, \6 g7 a. S8 z//select the amount of people online, all uniques, which are online on THIS page
) t% C% w# } W) x. | a; |$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");: G1 ]0 o K+ a+ r! \
if(!($result)) {/ Q$ M& C9 N x
print "Useronline Select Error > ";8 y! v$ S( q2 h5 G9 M& o
} ?0 S( J4 e2 Q+ p) |9 J3 x
//Count the number of rows = the number of people online
/ D1 p, H c G/ [- D, f$user = mysql_num_rows($result);+ P- `3 Y2 _; o. y( E, Q
//spit out the results
- f. D3 X1 B1 n) q4 ymysql_close();
' T8 S7 f p, y) c) o5 e9 V# V' L* Mif($user == 1) {
: U: L# V& u) m5 Jprint("1 user online\n");8 h# V0 K! E) i& e" u x$ ]
} else {
! V6 J( ~. l. k# W H$ _9 Zprint("$user users online\n");
% q1 T) l+ X& a% W* A& o}+ D$ C. V4 L; _4 h
?>
5 w/ Q' j& N/ W, p
, ^. z$ l9 |' O9 |) t以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 F9 {; a* ?8 s) `2 b8 D8 f时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
0 ~% L3 H }5 \. ~) l- [我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 D0 \6 c" _: _7 k& e# x当然啦,这两款主机也是相当不错的。+ q2 Y7 T) Q" m" r4 |6 q4 b% r& ?
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 B- s% @; R- d8 P" t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年$ c' I9 ]& W3 Q* z' k
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ , I, i& F: d& l( p
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
. E1 z: u7 [8 s& X自己加QQ去问吧。 |
|