
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
% |- X% G3 \9 s% o2 f& q0 p: }我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 n6 i: \; {8 q C" o* @首先我创建MYSQL数据库表。
5 M# h! @- V( N Z) n) e) \CREATE TABLE tablename (4 j( ?) |2 |+ |9 Z
field type(max_length) DEFAULT 'default_value' (NOT) NULL
0 E8 H& n3 X# V! }3 ]$ B+ M& J" n& f}可以使用的SQL语句。9 d% T% k+ M) y6 c
CREATE TABLE useronline (- p5 X2 M6 V8 {4 k
timestamp int(15) DEFAULT '0' NOT NULL,
" d% E' L! ?5 E3 w! `3 Y# Uip varchar(40) NOT NULL,
9 `" J3 M3 R5 V9 ] z* e. sfile varchar(100) NOT NULL,
2 D8 @0 Q" M$ A) p7 gPRIMARY KEY (timestamp),# E( [+ B6 r& z2 }. r- }% K
KEY ip (ip),9 U/ u! ~: ~* p4 H, D
KEY file (file)
X+ Q' }1 w& ?9 X) B+ J);下面我们是PHP脚本,首先我定义MYSQL的信息。( s! ?& W. D& B
$server = "localhost"; //你的服务器
' _0 D" k3 j! S% [! b6 L) K3 M) N% ?$db_user = "root"; //你的mysql的用户名
# A3 Z5 M6 D; P! F5 `+ o& O0 t$db_pass = "password"; //你的mysql的密码
, Q) X: _% T3 H$ y$database = "users"; //表的名字设置统计的时间(多少秒内在线人数), v9 }* j0 y6 {% o2 n% S8 w
$timeoutseconds = 300;取当前时间。
" s$ }, D Z& b# K# \2 t9 n- q$timestamp = time();上面的完整代码:
( z$ n4 b* l0 u8 I<?php
+ C# z; N! J0 d( U q; w$server = "localhost"; //your server$ A1 T/ Q7 J5 Z
$db_user = "root"; //your mysql database username
* ]( J6 M$ g' |7 n) S9 J# K$db_pass = "password"; //your mysql database password if any8 i/ X/ r) O- o4 N/ F( A- n+ ?& q
$database = "users"; //the db name
/ Y6 A/ N! j8 E' x$timeoutseconds = 300;//timeoutseconds limit
8 Y% f u* }( o$ s* {/ }# ~; A//get the current time# p' X& w- ~: M+ W
$timestamp = time();
6 d8 @1 a! o, Q( M//calculate the lowest timestamp allowed0 k& ?" X2 x4 `; l$ n; M
$timeout = $timestamp-$timeoutseconds;3 I7 p9 L3 }) a# A: q( g, X- B
?>连接mysql
) z' [ q4 v* x% j3 D) z' `. q" Ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 R* {/ O7 ?1 Y
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 r: I, \( N* H! k' [" H
mysql_connect($server, $db_user);查询数据库的代码:4 _: Y' @8 }9 c9 S% C- k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
0 ^, F. G8 c8 W a% Y2 Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ X$ W' m, R6 V |! y/ J: P, m. j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" u* [" N8 k4 M) ^6 R$ z
如果用户用错误信息的话,这样处理。+ T) p) H3 \, Q9 h* q4 Z3 @+ o) j
if(!($insert)) {
6 x3 J: k* p: ~6 ?print "Useronline Insert Failed > ";! k/ ~! q+ @7 K* X
}然后实现当超过设置的时间就删除该用户记录。! R$ \' _4 t3 Q! y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" L8 y: y, B" f9 \2 s/ g: ]- [# l
if(!($delete)) {1 T. w( T, K- ^3 v( h
print "Useronline Delete Failed > ";7 O4 |/ W$ B( q* H/ `
}下面我们解决数据库中不同IP的问题
* @3 v. }7 |4 v7 l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
$ w5 \- L: b) q+ P1 S; P1 Umysql_num_rows(query);来统计用户,代码如下。# `6 Z* q; Z0 y2 B5 d+ X
$user = mysql_num_rows($result);最后关闭数据库。# |7 b" w9 M6 [1 p6 ~- u
mysql_close();显示在线的人数。
0 V6 f2 A0 c8 ~3 O/ dif($user == 1) {
7 ?7 k2 n1 M- d; o2 N4 g2 iprint("1 user online\n");/ @/ N3 c- c/ L& l5 _* y
} else {
8 P# \# t+ S/ p4 sprint("$user users online\n");6 C2 {) C$ M% x/ h$ o# M/ Q0 h
}最终把上面代码写成一个PHP文件如下。7 v: h1 K* A$ D( `2 `6 H/ W' ^# W+ x {
<?php5 H7 ], x m! G2 w
//Put your basic server info here* m, i6 A' t. @% v9 A
$server = "localhost"; //normally localhost6 @3 w9 v; R2 w: U# V$ \7 x, `
$db_user = "root"; //your MySQL database username5 b6 q9 @8 F# U1 H
$db_pass = "password"; //your MySQL database password0 M) f; F6 h$ [9 B6 ` d, i' ~3 I
$database = "users";5 Z4 O! F8 q# Y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- j/ Y$ @1 v q9 D6 @; [" q- m* M% I
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
# w. `( e3 P1 {# h' V// $timeoutseconds seconds)
3 m+ ^9 J# d4 r( w5 b' C//this is where PHP gets the time
9 _; f* D" s7 \% B! X6 a$timestamp = time();
0 T8 T& D2 \( c+ t9 ?7 J) d( [2 J. I//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% P7 q) S9 F# K3 M ?" N* o
$timeout = $timestamp-$timeoutseconds;
% L/ f2 M7 }7 k; V8 x//connect to database
k/ t7 X4 N1 K1 |) ?1 V vmysql_connect($server, $db_user);
7 f" ? O& a1 Y* X//add the timestamp from the user to the online list
" Q- e$ D1 [0 L/ i$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
8 W4 x' v8 S1 I2 P5 |# M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 T) X: Y* T! K8 T7 I$ tif(!($insert)) {
0 j& J* @1 X' m- I% W j! Uprint "Useronline Insert Failed > ";
+ ?* Z6 A; _* f2 Q* ^}, w% E9 t4 C: N4 Q/ t {/ Y
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: U8 e0 |0 s; y4 S9 y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* {; A& c/ l X$ N0 s, ~5 j) w
if(!($delete)) {
* F: K( {' w9 f+ t; p$ f5 mprint "Useronline Delete Failed > ";
6 _! Y$ H( I l4 }1 w3 B5 z}+ Q0 `. X3 Z* w9 i# A W! p- I
//select the amount of people online, all uniques, which are online on THIS page5 L5 e+ B8 x8 l3 g! B6 e* |& E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 r* S! l, W" _# j2 _0 O- B
if(!($result)) {( ?, O1 i8 M; E% d# `
print "Useronline Select Error > ";5 G1 g2 @$ @9 | J* B. c
}
0 I' c( S4 u3 h7 S//Count the number of rows = the number of people online+ j- \" l- e o& ?& X
$user = mysql_num_rows($result);
% |. i) @5 s8 G4 M4 G2 {//spit out the results
' h( Z* a3 w; S; A, |mysql_close();5 }5 }8 |& _# r3 J. I# O* G
if($user == 1) {+ g6 {4 R1 T* N; F+ \) M
print("1 user online\n");* Q. Y9 x/ Y$ c
} else {8 n0 I9 b- b. B+ e, a
print("$user users online\n");
; x& l+ ?: @9 O Z' U& Q! O}
( \; [" T- B7 \3 U% ?1 j?>
% i; J" S) d5 V# [, n) G* ?
6 R4 d3 Z8 U. [$ a以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& Y4 g: ?6 I0 o: z2 q& N; ~& v. u时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: z' w7 _1 T8 \& S2 Y8 S$ r" r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 {$ { i+ N- {当然啦,这两款主机也是相当不错的。% [8 k' h( l0 x; G) [) N3 T
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* a! W* X$ T9 ]* ?- V
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: i4 k: u3 x# o. B! J: _
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ Q; Z9 S; x. v空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=556 I: L! _0 o9 q3 U: D: G4 v. ^
自己加QQ去问吧。 |
|