
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) Z: d1 Z: i3 C, T7 P我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) g2 g' k. }$ L% u' q6 c! \2 q% }- S
首先我创建MYSQL数据库表。
5 a/ U$ D; H) e% y8 {CREATE TABLE tablename (# j+ ~$ |; x1 l, ]* M
field type(max_length) DEFAULT 'default_value' (NOT) NULL$ p0 b3 n! i, q f. T# d. E; e
}可以使用的SQL语句。+ S+ ?8 i7 W( g& J" H3 y* x
CREATE TABLE useronline (
) R) ~ c% ~, z5 ttimestamp int(15) DEFAULT '0' NOT NULL,2 F8 {: h+ o0 i, D) J6 ~
ip varchar(40) NOT NULL,
! `# e: h. J* D+ \file varchar(100) NOT NULL,, q! {+ R0 C; ?+ |$ y5 L: L
PRIMARY KEY (timestamp),1 N- n/ c4 h* f+ N" i' U5 x
KEY ip (ip),
1 j0 d1 L2 w4 q1 o( v+ f& t) i: pKEY file (file): T8 c4 ~ f8 j& t; Q& y+ F4 ^
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ n5 n! l+ v1 d# r0 A$ `. r" l o
$server = "localhost"; //你的服务器" P2 Q( S0 D; d
$db_user = "root"; //你的mysql的用户名
7 ^- m# f" ^! P) f. y2 @$db_pass = "password"; //你的mysql的密码$ ?1 C/ f/ ]' U& `! U% b
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)& n5 J9 A& J2 u' B9 x) h+ C
$timeoutseconds = 300;取当前时间。2 d* a' b& A6 t: I
$timestamp = time();上面的完整代码:) B# w/ n* ^2 w6 D: [% ]* \5 m4 _- T
<?php5 n) s+ k# ~$ S
$server = "localhost"; //your server2 w5 r+ ~- C% x& ?! P
$db_user = "root"; //your mysql database username1 U% w/ [% F. p, K( o$ V6 g
$db_pass = "password"; //your mysql database password if any: a( \+ K' k& ~ r1 [
$database = "users"; //the db name, v, B/ D, b7 h& l* H# Z; b
$timeoutseconds = 300;//timeoutseconds limit
8 `: w6 X/ D; G- V# N. n, h" d//get the current time+ @! d* z3 L A( H( d4 A$ c& S4 h
$timestamp = time();
; @4 v% c# B9 G: Z//calculate the lowest timestamp allowed' d8 X1 J2 h2 G4 \' W- |( Y
$timeout = $timestamp-$timeoutseconds;
4 t0 k0 K# V. h: [& m?>连接mysql4 |1 Y$ w- Q( W
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。% O8 t- @( S% f: h4 }7 [( A8 \
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
i6 Q' x; n/ x8 hmysql_connect($server, $db_user);查询数据库的代码:
/ @7 g7 L. d, P5 qmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' l8 X3 q, V0 L$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 ?7 G9 D2 m3 Y- W# |6 w, d; w
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' |2 Y& D% @& q: H如果用户用错误信息的话,这样处理。9 i0 ~& [3 Q6 ^! V* Q& H
if(!($insert)) {
+ X# O( p9 [; k5 D+ x' R1 l) Nprint "Useronline Insert Failed > ";
4 M7 O9 `2 x# o0 k}然后实现当超过设置的时间就删除该用户记录。
0 {' O+ U4 Z/ F* f$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# l: U( N" n- T' i5 l# \0 }; Iif(!($delete)) {% A7 c' V# |7 i, N" D
print "Useronline Delete Failed > ";
a% V& `: t d& _. h) A' j}下面我们解决数据库中不同IP的问题
0 @/ r: P6 x% D1 r9 a2 I% _& x# R2 j! N. {$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 P. D s2 Z' y; D J# x
mysql_num_rows(query);来统计用户,代码如下。; C6 q( R2 ?* c' b
$user = mysql_num_rows($result);最后关闭数据库。
, l) }5 T$ _3 x9 s& v1 G/ Vmysql_close();显示在线的人数。8 R/ X* O f0 j6 n2 d0 y3 C" g( k( t
if($user == 1) {5 X+ X; _3 F7 p' k' b- t7 N% `% Q
print("1 user online\n");
. ?* A* Q7 H! G1 F! ?} else {
) P1 B5 p9 @: L, L; m4 c# R+ Mprint("$user users online\n"); D2 L$ k }0 D. T
}最终把上面代码写成一个PHP文件如下。
8 F5 S. k, S; ]: W" i& p1 }<?php
1 Z/ X3 O/ f6 d& t//Put your basic server info here [6 b* x! u. y8 X
$server = "localhost"; //normally localhost
$ y* \5 e( D% l6 q! Y! W$db_user = "root"; //your MySQL database username
0 E$ S* w, Y( ]( i' D$db_pass = "password"; //your MySQL database password
% g2 D3 X4 Y: K& ?# f& {- e$database = "users";
! V p5 i$ ?7 G0 i, t; [3 K7 o9 u$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 X/ T- g6 ? l( {// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% N: r4 m: @4 O* e0 T9 s0 j
// $timeoutseconds seconds)2 T c7 N- E' ^4 h' k
//this is where PHP gets the time! n+ y8 W# t8 d4 Z' p- B
$timestamp = time();+ q5 N+ b6 x. x
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 q6 K; s5 ]1 T; S$timeout = $timestamp-$timeoutseconds;' v8 R5 d- o# t3 }: s$ k, B' w
//connect to database
6 C. h* c% f; Cmysql_connect($server, $db_user);
7 P: F. T" q6 @, I( e( I) n//add the timestamp from the user to the online list# M1 U" ?8 l' c3 S3 O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 g* k& L$ ]9 d* }) [6 A6 E, J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' s8 Y, w, c# t8 I+ I' x; k& }4 dif(!($insert)) {! m( i; |# N8 M. b
print "Useronline Insert Failed > ";- ]6 U- |' p2 H& o6 b3 V
}
" J% X( _: l: j+ { h; X" @/ u//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 E7 |" L6 L, @6 P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& T. W6 E% q2 Q
if(!($delete)) {3 P8 {/ o/ ^0 O2 _( R
print "Useronline Delete Failed > ";
2 ]1 y) r/ y& N}
$ y9 v0 O' @0 m; A//select the amount of people online, all uniques, which are online on THIS page4 ?* W+ t- `8 T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");$ a. X n7 I+ p$ V2 x0 Z
if(!($result)) {9 P, R& u) a! D9 q) a9 O
print "Useronline Select Error > ";% d B4 u( Z$ T3 Q! O7 d% L
}4 u0 I& W$ k! S r* B4 V
//Count the number of rows = the number of people online$ ~6 k$ ?4 O* j2 [! Q$ M( w
$user = mysql_num_rows($result);# s; `; {: a; Z1 G* T6 o( g. @
//spit out the results
+ W d" J# G0 y+ f* S* L7 ?% Emysql_close();. E7 H2 Y& N/ N' H+ }
if($user == 1) {
" H% U* @! R u+ y! x) m. fprint("1 user online\n");7 F& J; z8 `) V8 z3 Y8 l
} else {7 m" B0 P |1 T4 n6 n) K- ^3 b
print("$user users online\n");
; H; i2 n, S: r}/ R' z$ e3 W/ A3 \) Y
?>
- J- N2 D3 Y7 w ; B* u6 m& g2 ?0 i* ^! @7 q9 V
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
; p$ u3 [/ {8 k+ G. Z时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) m( F( M% U5 k! V/ K5 X我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。, C; P% _# a- X* h1 W% |
当然啦,这两款主机也是相当不错的。
/ }3 t! b. S" v4 n2 ]6 p智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, F$ w8 }5 \; Z3 F标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 }1 J3 {" X& [, _
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 2 C; Q) C1 y- S# d
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55+ |+ T0 k1 @# y' v d# x" i" `
自己加QQ去问吧。 |
|