|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" f6 L' e4 z! p: i9 ?% g& u3 d
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 R" y8 j5 l% r$ K ~, Q* t首先我创建MYSQL数据库表。
5 L( Z" R: X+ }0 s3 kCREATE TABLE tablename (( L2 b- t% v: \) n8 r
field type(max_length) DEFAULT 'default_value' (NOT) NULL- x- n$ c1 W! T: }6 t- F: ~& ]" V
}可以使用的SQL语句。
2 h' R# Y% V- U' rCREATE TABLE useronline (
9 K& O- J" T. w# R& vtimestamp int(15) DEFAULT '0' NOT NULL,0 I" P( z: }8 `( S
ip varchar(40) NOT NULL,6 \* Y+ q( ]# B( Z, I
file varchar(100) NOT NULL,( S4 K }& [# a2 {- u, v
PRIMARY KEY (timestamp),# u" T0 ~* q$ X& i
KEY ip (ip),
' J3 l2 k6 a( u& R/ Q# m+ [KEY file (file)
1 ?3 \8 H/ J1 L, T" [) _);下面我们是PHP脚本,首先我定义MYSQL的信息。
# _5 D1 X0 @1 U$server = "localhost"; //你的服务器/ s: V* Y: Q$ ~* o9 ^8 N( I
$db_user = "root"; //你的mysql的用户名
^+ D! ?5 a1 k. u1 G- i" @$db_pass = "password"; //你的mysql的密码
2 V- m4 g. c+ t2 ~5 B$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)3 ^6 c, ^( N. ]& T7 G
$timeoutseconds = 300;取当前时间。
& }* ]4 K- R4 F2 j' L$timestamp = time();上面的完整代码:
) x7 d8 g- `: u: k2 v! g8 _% }<?php
& i3 i) t5 Q) x& Q3 \$server = "localhost"; //your server0 K. q( O4 r( \- f/ X* V
$db_user = "root"; //your mysql database username- N$ y+ P. P' ~8 Y% j2 `
$db_pass = "password"; //your mysql database password if any5 L3 T" w" w0 _% J3 A' T( j) l7 T
$database = "users"; //the db name
5 f) L! M( Q9 S/ N1 _$timeoutseconds = 300;//timeoutseconds limit% B, \2 N, k ?/ Z4 L
//get the current time
0 F* g* J; B3 M" ^$timestamp = time();/ A3 n5 Y( c+ g7 @
//calculate the lowest timestamp allowed0 X6 r. O% L( N) c7 w
$timeout = $timestamp-$timeoutseconds;
# J1 v+ x7 S2 d8 A; Q?>连接mysql5 l$ H% r# F/ }: P' ^8 y
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。 C1 }' N4 f) U" S o
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" N! j2 l: n2 A; y4 m+ A- Z A
mysql_connect($server, $db_user);查询数据库的代码:
2 }( }" Q. ~) p. ]4 n2 M* z) imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 C( I7 v( D1 j$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" I! N% B, ?, K9 ]- _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 } {: m/ [! _$ C
如果用户用错误信息的话,这样处理。1 K0 s3 D$ o, r
if(!($insert)) {* M2 P* y' z! s" j3 S
print "Useronline Insert Failed > ";8 K( F" w- {- O: o
}然后实现当超过设置的时间就删除该用户记录。% V/ |3 d$ s. a% I% L* ^( S J1 u* g
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 H% Y% H& n- J% sif(!($delete)) {7 I; f- H5 D2 Y' `
print "Useronline Delete Failed > ";
/ a) Z0 r& z" y9 E! c, L; M" Q5 `}下面我们解决数据库中不同IP的问题
. [/ l( M" s' u$ r7 D6 _* ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. m* @1 z; y. J
mysql_num_rows(query);来统计用户,代码如下。9 V, n# L. z. z! a, q: l* c
$user = mysql_num_rows($result);最后关闭数据库。 v2 b$ L: g/ L2 W
mysql_close();显示在线的人数。1 c9 I6 @4 D: E, R, Y) p
if($user == 1) {
7 _: T: c, |4 z) ~print("1 user online\n");
: u6 j! M" r. e2 y, |} else {; h( D3 G: u; ` E) b" I: k9 v
print("$user users online\n");% p8 R3 `$ L; t; M0 g/ N' m- i
}最终把上面代码写成一个PHP文件如下。
" ~' C: t) i- H) U/ q<?php' N/ R: z+ V. t% i9 ^* {% Y
//Put your basic server info here# u% p. l, r: K1 M1 G4 r( d
$server = "localhost"; //normally localhost
. A4 K* Z7 e* x. j7 Y$db_user = "root"; //your MySQL database username
, q' D) A" H2 W* w, C1 v& F9 P( V. a$db_pass = "password"; //your MySQL database password B `) L5 h& d+ M2 F; e0 y
$database = "users";
! w i/ x' ?2 b: n$ h% y$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are2 G( C; H8 Q/ c0 @4 j& D2 K
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 A: v9 }5 A4 |* [ K& H: h// $timeoutseconds seconds)
6 c4 }+ ?. A5 h/ ?0 m8 J% f//this is where PHP gets the time
7 m+ m! j- C7 e! K$ }$timestamp = time();
* p3 S& i# p! ?6 I//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% |/ W, t" D1 o# M
$timeout = $timestamp-$timeoutseconds;
; R7 S; \$ |4 T% {//connect to database
. z8 B4 z3 }! c+ T( j1 \2 Rmysql_connect($server, $db_user);8 v: k0 I' a# c. `8 L1 m4 o# I
//add the timestamp from the user to the online list
5 q3 O# H* g0 y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 y/ Q: T; Z6 |1 t) x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 U/ C4 d$ w# n7 C: m4 ?if(!($insert)) {. S: Y0 G" U6 A8 Q
print "Useronline Insert Failed > ";2 U2 a4 J$ p0 H# c8 v- b, U
}
! U* Q1 v& z: t$ Z7 [2 d1 p//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.4 w* ?/ Z5 m4 k' @* n
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 z( {( z4 H2 q+ O! h
if(!($delete)) {' @$ i. ^. o$ N* H7 P+ l, c$ l: E! e" b
print "Useronline Delete Failed > ";
" Q: V3 c( a# D' `% D}7 }8 T+ S7 c7 I9 i
//select the amount of people online, all uniques, which are online on THIS page
: z- a" p4 d; N8 h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ g9 J9 T* F. I! U) I0 _# i: Uif(!($result)) {
]' u9 n: U" O% @1 Y# [print "Useronline Select Error > ";* |2 V4 N! {: X8 Z5 L% L$ Y
}* Q. P4 t0 L, {
//Count the number of rows = the number of people online
" X% P% U% W- k$ B% q- y5 Y$user = mysql_num_rows($result);, ?" y3 e3 U5 E% e* v; F
//spit out the results
- J2 a) D! s# Q( N" g! [( w- {' ymysql_close();7 Y6 q) ^( g% H3 L
if($user == 1) {2 M8 j; I8 A4 ~$ ?7 J# G/ N
print("1 user online\n");
4 A3 j& N* ?1 p% @4 \} else {1 ^8 }% W1 B, S1 D6 f4 U
print("$user users online\n");$ b- i* H) [+ t6 K) u- \3 C
}$ p9 G" o# X8 I
?>7 i, @: z1 \$ L1 o6 l

1 X8 F1 H4 O& o+ M# p; o% B0 @以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 `! X/ ]$ @" M- E5 t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 I2 z/ A, `% x2 b3 S$ _! f我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; d, C& J, L! o/ k" P
当然啦,这两款主机也是相当不错的。
+ R; U$ I5 ~+ m2 @( I7 _智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ z; M) T: O# d9 ]5 n
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
, @8 `: ]# g2 p8 M( }, r! F L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
# X; ]: ?4 b; y O# z* ^* N% `空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; G' U$ W2 B& R8 C% A
自己加QQ去问吧。 |
|