|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 g. ~! {1 Y) }5 O' o. h5 ?& z
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
1 `' e; ]& v( G! n9 c首先我创建MYSQL数据库表。
# z$ P+ P9 v5 \5 p3 Q+ JCREATE TABLE tablename (
5 Q" W9 |* Y0 [. ffield type(max_length) DEFAULT 'default_value' (NOT) NULL
5 r9 t- R! y6 ]$ X8 ^}可以使用的SQL语句。
3 x& \4 @4 U$ G! b6 uCREATE TABLE useronline () m( a- r. u# e: S1 d& z
timestamp int(15) DEFAULT '0' NOT NULL,
. d/ ?) M8 y% s9 K5 w- R0 m+ cip varchar(40) NOT NULL,
3 V4 B; q9 E# U' W5 \file varchar(100) NOT NULL, v) t! Y9 N1 u5 f. l/ R( J
PRIMARY KEY (timestamp),
1 Y+ B( g+ w3 y* K4 UKEY ip (ip),
# J+ d! s0 X* D) h2 b4 K) m) tKEY file (file)
% _+ D; i H/ n: x' _! Z- ]);下面我们是PHP脚本,首先我定义MYSQL的信息。
0 D" G; M+ `3 I) S. Y" W. K. T$server = "localhost"; //你的服务器
6 V& K! S# Q3 H3 X$ Z- d Y$db_user = "root"; //你的mysql的用户名& L j, k2 r5 @- e" K0 ?6 p+ I
$db_pass = "password"; //你的mysql的密码
! I9 P% ]2 w" T0 M( ?0 O7 \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)* @) @) k; ?- E: ~1 @2 x* q
$timeoutseconds = 300;取当前时间。( g0 f0 M, g1 j
$timestamp = time();上面的完整代码:
* z0 e) E% Q. f2 B" z! V<?php* T+ v% x' Z1 J0 F" A
$server = "localhost"; //your server
0 v1 r; p5 X. s, F* b1 `$db_user = "root"; //your mysql database username# X2 U' A! ~" l- F6 _- [+ Y; S9 R
$db_pass = "password"; //your mysql database password if any
% ?* D3 G: c$ _) q$database = "users"; //the db name
' b# b3 f2 o- e u0 T: }# e; w$timeoutseconds = 300;//timeoutseconds limit% C3 P2 ^3 t, V/ x
//get the current time
8 y! s* P( H& r' s, m) u$timestamp = time();) S6 e- x" a" x% X2 c! w. k/ i7 n; T1 _
//calculate the lowest timestamp allowed0 {0 s$ W, A% F1 T4 v
$timeout = $timestamp-$timeoutseconds;/ k4 j' I) v9 `# \* ~* T5 d
?>连接mysql
3 I! r) [) {: k0 N; wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。& r' I" O+ n+ Z$ m8 C& C
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
# X8 t5 ~! |) B3 ^mysql_connect($server, $db_user);查询数据库的代码:
& F3 h; @( K5 Y- smysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 N$ @ m H, ]4 @- s0 Q$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ y2 O. A8 }8 @8 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ F/ t" i* m, W
如果用户用错误信息的话,这样处理。
1 Z) k; f$ b z9 {if(!($insert)) {' U% V' Z D, ^; l$ U. Q( n7 l
print "Useronline Insert Failed > ";
( R6 G8 n, q& Y; K}然后实现当超过设置的时间就删除该用户记录。
; c! } f( V7 e$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
: o' _' k! {5 i2 o6 K; f" bif(!($delete)) {
- q5 m/ d- j- D$ ?+ G* iprint "Useronline Delete Failed > ";
: y8 N% R$ d, f7 T6 s2 V}下面我们解决数据库中不同IP的问题. {9 [2 \: g; l7 G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用! x s# R7 D; P1 N, `, M
mysql_num_rows(query);来统计用户,代码如下。
) |9 x+ j' c. b% i# Y$user = mysql_num_rows($result);最后关闭数据库。
2 x" V* c$ r# Ymysql_close();显示在线的人数。
1 W! P1 Y3 K- C9 s, A7 p1 Aif($user == 1) {
. H0 c) T7 R: I4 k5 w% F$ k) E2 Iprint("1 user online\n");: y" r) u% Z( l6 `5 H2 |1 X3 ?* m
} else {5 n- b9 g! n! k
print("$user users online\n");
" o3 ~5 h0 {; d8 G, x; _}最终把上面代码写成一个PHP文件如下。
! ~! `+ {+ U) R5 H( Y<?php
) c! F3 K! c% I1 ]3 Y; d9 M' v( H$ Z//Put your basic server info here
. [) D/ i6 d8 |$server = "localhost"; //normally localhost0 W/ H3 N. M/ N `
$db_user = "root"; //your MySQL database username
/ _& q1 U2 L7 m J$db_pass = "password"; //your MySQL database password8 U- q( { }% V0 s/ z0 T. m! Z. _
$database = "users";
4 y% p9 t6 k: V) e; V# b$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
8 y* ^. C5 G4 U/ L S4 h// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ i/ @% D, z2 Q# w4 V2 }
// $timeoutseconds seconds)( X* X3 N d" g+ Q
//this is where PHP gets the time
; M) t V% ~" S, N) \. t, p4 O( @$timestamp = time();
* [# q& m4 o2 B+ C0 N//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed e7 s. _# j! b4 J H
$timeout = $timestamp-$timeoutseconds;
& y# E, n# \+ x1 g- P- O' Q% {! g//connect to database0 @ ]% l$ L6 i. v7 n$ V
mysql_connect($server, $db_user);
; J& o4 B$ Q' A6 C+ O//add the timestamp from the user to the online list
* a) ]) @+ @4 @% t; k/ z7 R$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 ~$ H' i) O7 Q2 t8 ^0 @0 _* J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( X/ f R- x. \$ G- D
if(!($insert)) {
% `7 ]: t0 Y/ cprint "Useronline Insert Failed > ";) ^, D" p: {- [8 b
}. p- [; |. g5 s+ y# u2 V) ]
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, Z9 i. a2 e- A+ Q" d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: a: Q& J: p. d4 e* eif(!($delete)) {
% r: H" o# q5 c& I3 ` ]print "Useronline Delete Failed > ";# _2 c8 g; n$ L" [; K9 \6 k
}
7 a1 e$ ~: e. N$ ]& Q& _//select the amount of people online, all uniques, which are online on THIS page3 V: a- D, E* p" H5 _! t; f x5 M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 ^ Z+ c% J/ q& Q7 s5 `5 ?* k
if(!($result)) {* M# A& k% W2 [
print "Useronline Select Error > ";
6 `% Y* q$ k& ]3 V; S% Q}" N$ e+ i; S% Y1 x/ h; x* G; [
//Count the number of rows = the number of people online
" f9 g% A/ G7 t; V$user = mysql_num_rows($result);4 Q' w* k* n% c
//spit out the results( t- y( ]; E% \( t
mysql_close();9 Y! C2 d+ Q. G @9 D
if($user == 1) {: j( d, f- Y) g& S( t, b' w+ v
print("1 user online\n");
, k# e# ]8 A- i0 _} else {
9 _+ y' I( P7 J k% W6 f- f0 Sprint("$user users online\n");* l6 N& W3 O6 J+ I8 f! ?
}
& r5 p' I$ G% A?>
6 R3 K( k7 B6 |+ }
$ S" V4 p' j/ Q8 D. f0 v以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' ]8 r0 L' Q0 q( [1 q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! s" J: E7 l, z- D7 T我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* E. S1 t3 O W$ T) |
当然啦,这两款主机也是相当不错的。
7 R! H \7 c* {' s! s3 G! g智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 l8 `( h+ j2 z- p
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年- a( i) u; \/ Q& F5 d3 z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" s- F& n+ q z; C6 I* ^. `空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% ?) M, `* Q7 I) I& X( v
自己加QQ去问吧。 |
|