|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 D6 R3 c- T' y% O M! E1 G8 ?9 k; T- }
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
( Q) v0 A& @0 Q6 I- d9 d3 H: H R4 n) h z首先我创建MYSQL数据库表。
}2 h! s9 C, _CREATE TABLE tablename (
) N+ G) b8 i- G5 tfield type(max_length) DEFAULT 'default_value' (NOT) NULL
) I9 K( s5 \' Z}可以使用的SQL语句。
8 `" }2 ]0 H. a9 e2 A2 M- p) LCREATE TABLE useronline (5 g* E/ X9 z; T' E/ f7 `
timestamp int(15) DEFAULT '0' NOT NULL,& a W+ p2 S; j
ip varchar(40) NOT NULL,
7 s) r' a: n, C1 ^3 z1 q5 a1 @file varchar(100) NOT NULL,
& f- z2 B6 T: |/ W, X/ j7 `PRIMARY KEY (timestamp),
4 V& N4 }4 d7 kKEY ip (ip),/ j2 {9 M0 s) p! q. t
KEY file (file)
. o: F7 U: \9 F1 @! q% M);下面我们是PHP脚本,首先我定义MYSQL的信息。2 ?" f( v! ^2 C0 c4 f _
$server = "localhost"; //你的服务器, H: n$ S* G# c" `9 \' ~4 @1 z
$db_user = "root"; //你的mysql的用户名 y& I, ~3 Y% D2 a+ T
$db_pass = "password"; //你的mysql的密码 g# {* @* O$ F4 @& r
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
1 S3 r: W) D: V5 d$timeoutseconds = 300;取当前时间。/ w! ?3 V; G u5 x$ M8 k
$timestamp = time();上面的完整代码:
) t8 a* z3 U% v7 |! H4 l; m<?php+ v+ m3 [4 V; E* b
$server = "localhost"; //your server4 p. H/ V1 r+ _: r8 M: P$ Q2 l
$db_user = "root"; //your mysql database username7 W8 n6 H( J6 C/ N: P0 b
$db_pass = "password"; //your mysql database password if any
7 n$ ^, O% p! h9 F2 ?3 Z$database = "users"; //the db name
1 e& T s. d& n4 a% B p' W- x$timeoutseconds = 300;//timeoutseconds limit8 r/ E5 q. ^; a& r- O4 F
//get the current time
0 x' @) [ r( Q2 Q$timestamp = time();7 S% p3 m! P# j, q+ i# ^
//calculate the lowest timestamp allowed6 s! x9 z: l( a8 m: J
$timeout = $timestamp-$timeoutseconds;
8 o* q$ K8 Z; T' I$ W?>连接mysql
8 ~6 ?8 n$ Y. F8 ]+ E- emysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ u( d: j+ G4 u! u( amysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) D* C7 V3 S/ [mysql_connect($server, $db_user);查询数据库的代码:# q/ |6 R! }* W
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# Q4 p) S# d- U$ T$ G) O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ P5 `4 C3 z! [3 M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 @8 ?% D* C! m/ K( P a7 s
如果用户用错误信息的话,这样处理。 z o/ Q c3 @3 q& U
if(!($insert)) {" U& |' o" j( D G. D
print "Useronline Insert Failed > ";+ z/ M2 V) b2 m" {) v2 [1 ~ a
}然后实现当超过设置的时间就删除该用户记录。
& D0 V7 ]) R# m. P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
" m* ] Z+ {: p2 R" W5 iif(!($delete)) {- D9 k! ~" u- r
print "Useronline Delete Failed > ";
9 `: z( t0 Y3 S; @- Z$ G% Q3 c7 `* l}下面我们解决数据库中不同IP的问题$ {+ m7 x- ^+ @* B4 e/ f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: p$ @( I" S. T" \% C- ~mysql_num_rows(query);来统计用户,代码如下。
1 K) m1 [7 G- |* L$user = mysql_num_rows($result);最后关闭数据库。, ]9 P E* B9 I. }, I; B
mysql_close();显示在线的人数。
3 c7 x2 l7 R% r; Y7 xif($user == 1) {
% s; W. w: a& @) e; y* h4 w% S8 [% vprint("1 user online\n");7 j% M" Q% f4 R+ R. ?
} else {
5 z( C+ \& |5 Q/ wprint("$user users online\n");) i$ r# I5 F/ P( ]- J% H6 m
}最终把上面代码写成一个PHP文件如下。- _! C5 `; N* v- P7 u8 `9 \
<?php
. O" D; ~- R8 o& y8 V//Put your basic server info here: k7 J- m4 W' P F4 e
$server = "localhost"; //normally localhost8 l0 C" B3 V9 ], p7 ?
$db_user = "root"; //your MySQL database username
2 D" W! W' w. q5 X$ L1 a$db_pass = "password"; //your MySQL database password
' _+ [! {* i6 ?# r) T. j$database = "users";6 i1 o) H7 s1 [9 `' b
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
5 [3 F: S# B. y5 \! C// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) y! X( { T9 c& W
// $timeoutseconds seconds); Y0 u6 F7 m* ~+ }! u
//this is where PHP gets the time6 r$ s' G$ U+ g, B, P7 R
$timestamp = time();; S1 x; ?6 J- V- G
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 \& Y Y9 t6 `$ [& z9 C$timeout = $timestamp-$timeoutseconds;
9 |$ z: h- U( F T) i; X//connect to database
! y/ f+ t8 r. W5 N( |; I- Jmysql_connect($server, $db_user);9 `- a* z3 D$ i' L" X& L/ C# \
//add the timestamp from the user to the online list- f0 ~* J% ^: }# W0 V* ^9 k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- M$ _: E- a$ j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); o0 R$ C; ?7 y" B2 F6 W/ ^/ S
if(!($insert)) {9 j7 ~+ o0 C. }/ |
print "Useronline Insert Failed > ";
9 @7 l s+ Y" r+ _+ j}6 n: g" e4 R- z7 r) ]* f
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
! t, E- r& }- X' s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 x0 H+ a9 l/ x( ^1 z; D& Eif(!($delete)) {: d, L: @( U1 a" s+ ]
print "Useronline Delete Failed > ";# a) M7 H! ^. a" L9 V
}
8 u# \0 `( L$ G//select the amount of people online, all uniques, which are online on THIS page9 H1 D3 K5 L8 g
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
1 l" _9 |9 \- P2 a5 W# }! Xif(!($result)) {
, m5 D, C4 m& \8 Wprint "Useronline Select Error > ";# A" U d" Z. |
}9 ~* ]( I' J- W* u7 m4 h
//Count the number of rows = the number of people online
! v/ V" a$ h! R# b9 A$user = mysql_num_rows($result);. p2 |/ K- O/ M, V( E
//spit out the results
0 o. E- ~8 n/ V7 P, ^/ `* Xmysql_close();" d# x( L! C$ Q2 V! a! ~+ j
if($user == 1) {
& r5 N" i; [1 @: t, jprint("1 user online\n");" f- V4 y" y4 D2 K
} else {
5 j9 j, e1 s# ~) n; Qprint("$user users online\n");
# k/ A5 Z4 q0 M}, e3 s7 e1 H0 C# @9 S: W( H
?>
: ?: S$ O: U/ _
+ j0 G j* U6 T8 H1 r3 \以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) z' C( @, P0 K/ [+ S. R时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( {7 \. `2 n4 C2 ]我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
2 ^$ t u0 Y% e9 ^; f/ \, K当然啦,这两款主机也是相当不错的。
$ Y! J, h. |8 t" H% }- w" |智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
n% E: r X9 J' W7 L+ y9 U2 z. C* b标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ d9 [* {* z- H9 m5 c6 r
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& g- o8 E! p8 o# r6 z* ]空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
3 \" J$ q& Z% W+ H3 w自己加QQ去问吧。 |
|