
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# k+ R2 O0 _0 u8 n- r# {9 {我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( j6 o6 c% \' g% h/ }5 j
首先我创建MYSQL数据库表。
+ e. e7 T7 g4 u( R) J$ {% cCREATE TABLE tablename (. k/ n' v; a/ l: K) W- S4 I# J% m
field type(max_length) DEFAULT 'default_value' (NOT) NULL* x! w5 C D/ t: ~$ R
}可以使用的SQL语句。' B1 v. Y6 J+ ?) j' {, g% v
CREATE TABLE useronline (- h! M" p! j1 d6 z$ n% h/ |5 X0 O5 o
timestamp int(15) DEFAULT '0' NOT NULL,
- V5 `" q; D1 J3 M# C! b# ]8 {ip varchar(40) NOT NULL,
. l0 @) W, H- ~8 Z0 g$ Nfile varchar(100) NOT NULL,
0 E1 F; r7 V+ c' C4 o# _. xPRIMARY KEY (timestamp),
8 }7 D" |6 i0 y3 qKEY ip (ip),
* D6 P$ x2 L0 b9 A; A, A# q* ZKEY file (file)
# s3 `: K, T" R, {4 ?3 y0 L);下面我们是PHP脚本,首先我定义MYSQL的信息。
( D" ^) Q# l4 n/ `; l. | L$server = "localhost"; //你的服务器7 g3 o! w/ Z# i+ z9 y8 _
$db_user = "root"; //你的mysql的用户名5 t% w5 x/ }7 o/ u2 |* O( j
$db_pass = "password"; //你的mysql的密码" |* B0 D( j' l
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 c- i- Y8 D. C' s9 z# `( w$timeoutseconds = 300;取当前时间。6 H; O B4 F$ Y3 z; T/ m4 }9 v
$timestamp = time();上面的完整代码:" u' S+ ?& q6 N" p
<?php8 B' V1 i) \1 n' W% H
$server = "localhost"; //your server1 f& s! A8 i+ F: a' p$ V2 z5 K5 P
$db_user = "root"; //your mysql database username
; o; ?& `! Z# K# C$db_pass = "password"; //your mysql database password if any
* l Q! Z" k. d- B |" s$database = "users"; //the db name
; f& z& a. ?3 d' J, s) y$timeoutseconds = 300;//timeoutseconds limit
+ t2 g- Y7 H9 Q3 ^3 j0 T- B# Y3 l//get the current time
" L" Z/ e# K$ F4 r) F9 K$timestamp = time();1 S1 T" F+ f3 ^5 g2 j1 X
//calculate the lowest timestamp allowed
( B4 g8 }1 J* s7 z/ b$timeout = $timestamp-$timeoutseconds;3 e- [! a2 z, }* }
?>连接mysql& j$ h7 Y% \9 m4 Q3 A, y1 t
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- S2 @9 I/ U8 E% N. E$ h2 hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 K/ K1 q7 m* V' i6 c! Smysql_connect($server, $db_user);查询数据库的代码:
; r9 l3 t8 J& w% ^2 i. I6 }mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 _4 K; ~. I' Z/ ?. S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ |9 u' h! O& v( h, h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 w1 \' I) p; X W9 d: A
如果用户用错误信息的话,这样处理。! d# Y1 s. {! Z- q! B
if(!($insert)) {4 T+ K. }. a4 |! }: T
print "Useronline Insert Failed > ";
% e& K3 D$ U: @4 u8 k}然后实现当超过设置的时间就删除该用户记录。7 Z- v* k; ^; F- \9 G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
) {2 e; ?$ o/ U( E9 p! H" |$ Iif(!($delete)) {
u( s) j8 c! Q: Y' H& C! Oprint "Useronline Delete Failed > ";
% k; I7 X! w' s$ I5 h}下面我们解决数据库中不同IP的问题3 z2 r" x% x: m3 A) A1 F; Z6 @! r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 N; _' @7 z. N/ S: F
mysql_num_rows(query);来统计用户,代码如下。2 U& c4 I4 X7 d+ X2 t" V4 ]
$user = mysql_num_rows($result);最后关闭数据库。
. g1 Z3 k1 ^( G7 t" ]% z7 amysql_close();显示在线的人数。7 x3 A7 F1 o- ?' Z D
if($user == 1) {
) f& F7 x8 t- Tprint("1 user online\n");
) L1 m8 c6 v0 y} else {
0 E; Z5 k' s) T4 Fprint("$user users online\n");
6 `+ o( @5 `( o: X}最终把上面代码写成一个PHP文件如下。" T$ N# E3 v/ E6 H2 D! B
<?php0 q* i0 j4 |0 ]% A5 W
//Put your basic server info here
7 F* t$ u: N* O w- w _( c! [$server = "localhost"; //normally localhost
7 y; q/ Q: I5 A. U2 k$db_user = "root"; //your MySQL database username
3 b3 h. u. ?, d' K |0 g& ~$db_pass = "password"; //your MySQL database password
8 I7 q8 l6 l. g; U$ |' ~" l3 ?) c4 A$database = "users";# g7 e. _1 d2 q1 u! t5 ~
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 W! {' T F9 [! t$ g, K// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
- n9 X7 Q) b" Z4 R// $timeoutseconds seconds)
7 I8 t2 G* [1 x0 Q h- C//this is where PHP gets the time
! e# Y# O. I8 C+ Y$timestamp = time();( D# O7 l( [3 w$ ^
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed z5 R4 r* z5 x5 a
$timeout = $timestamp-$timeoutseconds;
# c0 A9 p! I* [2 a2 p//connect to database o c' E. [9 }' v+ v
mysql_connect($server, $db_user);% r8 s& ]: D9 ~, U
//add the timestamp from the user to the online list
2 }7 V9 O( r. _( y# `' W$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ O+ Q4 L2 \6 L7 m7 }, v" f4 l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 M) L0 U0 i4 E- p
if(!($insert)) {
' ?: \4 O4 {8 b4 Tprint "Useronline Insert Failed > ";
( ~5 L, l% [! S- w0 h/ Q( J. k}' g1 _% ?8 j- t" d( n, { V
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
0 b: S, r" t- b& P; D6 Q. o7 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");. s; k2 Q% |- I2 R& _, f
if(!($delete)) {3 l* d3 I& \- U' S
print "Useronline Delete Failed > ";/ ], j' `+ F; J8 Z) d. y
}! H$ }9 _; [3 z( ]0 ~. e
//select the amount of people online, all uniques, which are online on THIS page+ \8 x3 e+ W% ?. p, ~; d/ J
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 f& t' J: v( }if(!($result)) { m: u, S8 }/ o1 K" }0 Y1 d$ T
print "Useronline Select Error > ";
# Z+ d3 X5 J8 v6 H: I: \4 I}6 j$ Z- |& _/ N4 c [' `
//Count the number of rows = the number of people online% ^9 k K, ]3 ~% F+ y! D+ ?2 S, Q
$user = mysql_num_rows($result);
. r& A+ F/ j. r8 g7 }! A% c//spit out the results p) B {* [- \/ b
mysql_close();
. s' \3 K3 L* vif($user == 1) {% w3 G6 }8 j6 D8 L9 p
print("1 user online\n");( p- l! e1 F8 u. t
} else {
$ s/ o- Z2 h* s, m3 {3 [: y. ?print("$user users online\n");
% f7 V+ g. c6 B6 X+ h& d}4 N1 t. K& k$ B: f5 z+ Z
?>
" n- D4 A @ ] & _4 r& M, Q& Z" D1 T
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! \, Y4 z2 F4 U9 r* y0 g8 w! m时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) p' {7 z( v2 ~7 o% c
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
) ~1 e7 j5 D0 D& ?7 y T当然啦,这两款主机也是相当不错的。4 ?3 G$ k9 N3 ~0 k2 `( O, i: o
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ j& _, Q+ L1 x标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* ], A: o$ l/ \/ x& ?! L) Q: x
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- I1 V" `; p3 U空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: i8 Q. [5 f" S; R# M" ]* R自己加QQ去问吧。 |
|