|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 O" L4 |- b6 e" w0 P# F# M* f9 C
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ K$ w/ h0 K3 b0 |7 b" i" ?9 _' K首先我创建MYSQL数据库表。# S O% c9 i! {" O9 y0 Y
CREATE TABLE tablename (2 A! Z; k! I" f0 z7 e
field type(max_length) DEFAULT 'default_value' (NOT) NULL# K* V6 c @5 K) r, K
}可以使用的SQL语句。
% F: \7 ]6 y) RCREATE TABLE useronline (% x3 ^4 Q3 o' q% X& E5 J4 E2 A
timestamp int(15) DEFAULT '0' NOT NULL,; W4 _' }0 h+ l$ q
ip varchar(40) NOT NULL,
- l# y/ u$ Z5 x2 e# O& xfile varchar(100) NOT NULL,
+ d6 _7 I" i* U9 @2 X7 TPRIMARY KEY (timestamp),& r1 C& @1 \ G, t9 g: D# y- V
KEY ip (ip),
6 x) M+ i3 j( uKEY file (file)$ z/ f& u$ K6 Z4 F
);下面我们是PHP脚本,首先我定义MYSQL的信息。, ^+ F; ]$ D; `* n9 Y
$server = "localhost"; //你的服务器# n7 Y& J; S- i8 L$ m# a' W
$db_user = "root"; //你的mysql的用户名
' N7 W+ K6 H% h. o! v$db_pass = "password"; //你的mysql的密码
* x) ?/ w+ r$ }+ V( A }6 r: a$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
/ ?3 x2 P4 M4 K3 e7 J* F$timeoutseconds = 300;取当前时间。( l @$ H% V- L$ P. K3 {
$timestamp = time();上面的完整代码:: y3 {% h! | p$ q
<?php
) a5 L3 b6 _% X" i5 l$ {$server = "localhost"; //your server/ Q. {$ W# n8 s0 I- l& r% W2 R
$db_user = "root"; //your mysql database username' n: C$ P3 @/ e7 g9 u# W" w- @
$db_pass = "password"; //your mysql database password if any
! t; Q7 o9 G' d& v; a/ \$database = "users"; //the db name
2 ?- I0 c9 @8 l G9 E9 u% W# ]1 p! u1 s# m$timeoutseconds = 300;//timeoutseconds limit* W0 F7 u5 I: u' g
//get the current time: ` I: s" m# _, p h1 @
$timestamp = time();
" ?9 Y% ?" i3 n7 a f1 p d3 h+ T//calculate the lowest timestamp allowed; w- ?+ I# \/ m/ A/ d
$timeout = $timestamp-$timeoutseconds;
+ G+ E& L5 J, L" M: Q/ R ]?>连接mysql
- b" S( ]) {6 F9 K6 G4 g {: smysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 ]" A( q4 x6 c. T- t% o/ @2 vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ H& M0 j3 W6 Y2 Z$ B! e' z
mysql_connect($server, $db_user);查询数据库的代码:$ D4 S- } }4 E! c2 u7 O
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。9 X7 _( X- P, S, ~' A4 l5 d% _
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ b* ]- p9 l7 z2 j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% ]8 C- `" {6 v6 h( w如果用户用错误信息的话,这样处理。5 A/ o4 H3 [ P5 [8 l9 \/ a
if(!($insert)) {
5 b1 K1 {/ D2 fprint "Useronline Insert Failed > ";
3 n$ k( ^6 a2 D/ x1 I% H. x# |}然后实现当超过设置的时间就删除该用户记录。
3 L' {& J' X4 i) n! [; ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
) @1 K" `" d! P/ X Y- Bif(!($delete)) {$ x& \& n* y! P+ M6 F8 T
print "Useronline Delete Failed > ";
* Y2 L# f! D0 G2 s$ t- j5 V' v4 N}下面我们解决数据库中不同IP的问题
5 K( {! ?1 e' v/ D% d+ u6 H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- Q9 V3 f; {/ U+ H9 b: b9 R: C* @8 E
mysql_num_rows(query);来统计用户,代码如下。
3 C( a& M/ [. p6 N9 i$user = mysql_num_rows($result);最后关闭数据库。) M, e( @. O( S, m/ g* W8 s9 y0 M7 v
mysql_close();显示在线的人数。# @: M! Q/ f0 s2 ?# D
if($user == 1) {( ?6 @. p: ] [" f9 |" s; ^
print("1 user online\n");8 s: m- a3 ^& ~ u8 `8 h
} else {' n- n J5 y1 D# i8 U0 L
print("$user users online\n");
3 E; X1 x) q3 t' t3 _}最终把上面代码写成一个PHP文件如下。
- ]1 g7 f# F- k0 E$ L$ b8 |<?php
0 A- r3 d8 S' m7 O; p//Put your basic server info here
. x( _& c: {8 x- q$server = "localhost"; //normally localhost
' e# z- u8 H, O! N+ `2 p. I$db_user = "root"; //your MySQL database username
$ T; `' Q: B, g2 r o W ^9 P/ f$db_pass = "password"; //your MySQL database password
% V2 V, }0 J* \" I4 E1 q( o$database = "users";
4 w; ~) M _* _$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- C k/ w8 l8 Y$ x( {- A. Q
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! ^4 a4 y. e& H) x$ u+ O// $timeoutseconds seconds)
6 g2 ` X5 u$ s* v//this is where PHP gets the time
4 U1 {; M1 Z3 N# O$timestamp = time();' A% t) C! t4 }7 ~% Q3 Q# O. }
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. u# A m8 T& s2 Q8 A6 B- r
$timeout = $timestamp-$timeoutseconds;
2 F; A9 a2 e4 t- r. C# M z//connect to database
6 D" \3 z! {# |# y' w2 t, bmysql_connect($server, $db_user);& q& k+ \. e# m1 j
//add the timestamp from the user to the online list9 T9 Q8 c7 O! J6 S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* Z5 y, q5 x6 Q* Z. k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ m z8 T5 Z2 Q5 r! b" @: W5 }0 d
if(!($insert)) {, ^; K" l6 I& v, l8 ~
print "Useronline Insert Failed > ";
: G+ o- h- r" l4 g( l}( J- O) _% b* C; j) o3 ~! `( M& n4 e
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.9 z7 H- l7 [* g$ G$ v) Q% @
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
/ E" R, a" x6 C; iif(!($delete)) {# @5 g3 y3 M. H6 v% c5 J+ O
print "Useronline Delete Failed > ";; b- v/ i- X! c: {1 {
}
* s6 l: P/ m; r3 h7 C# `; B( D//select the amount of people online, all uniques, which are online on THIS page; t Z! U8 `2 J) ]4 L) T: i, b0 Z2 x: ]
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 V v) Q y% f4 D1 D0 b
if(!($result)) {
( Q. v, M8 Y6 t& [, N4 l" e" T) eprint "Useronline Select Error > ";( R8 J1 f2 \0 j5 C8 u5 _
}- z: L' l6 Z2 a2 N, r( V
//Count the number of rows = the number of people online! u, ?+ m8 f! y; `
$user = mysql_num_rows($result);
/ `* l3 j5 h! Y' [0 [9 r; Y//spit out the results! u: M) x8 |# l8 Q( T2 D" V7 x
mysql_close();
: |4 t* s1 F! f# [* K/ k+ Fif($user == 1) {
9 I/ [5 V0 Y& p8 B) qprint("1 user online\n"); N3 C' w" ]7 @7 _" y" U7 N( L
} else {$ [- j: M- j' f h
print("$user users online\n");
- T. Q* f+ {3 r! N}
, A( Q( M! a9 Y?>
' B5 U& r2 s1 x' v7 M
: D4 _3 s/ S- I" x1 w以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& @+ F6 R8 L; V: k% x
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ [0 ~! Q' @8 v0 u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。6 O: e. i# ]+ f8 N
当然啦,这两款主机也是相当不错的。& m! n# l* z$ o$ c( e0 S5 f+ t. |
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
# d( e) o5 Y" z" |9 b W. x: J标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( U$ g9 o, ~7 g& A: s8 C
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * v& s3 q7 t0 A3 h6 p
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% ~+ [% h1 K" m; S# x
自己加QQ去问吧。 |
|