|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!: c7 R# C' e* R4 X' k) |# J
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 G* j; H7 _6 E- x' Y6 N* W
首先我创建MYSQL数据库表。
5 X6 w; K8 ?; M: F; ~8 zCREATE TABLE tablename (! \7 Y9 f( L) ]; k3 X. f% F3 i, ]1 q
field type(max_length) DEFAULT 'default_value' (NOT) NULL; ^4 W+ k. f7 _ a# g$ D
}可以使用的SQL语句。6 z. L& V: H$ }1 p( d6 E- t, _. u3 v
CREATE TABLE useronline (
3 c4 x* m' ?; X& Atimestamp int(15) DEFAULT '0' NOT NULL,% b$ V: ?/ o$ i4 s6 `' X
ip varchar(40) NOT NULL,+ Q: `5 {8 s1 k8 [6 S) @8 [
file varchar(100) NOT NULL,
* I# Q* j5 v! W$ ^& IPRIMARY KEY (timestamp),3 D( C6 W5 R5 f( q1 j
KEY ip (ip),: o, x$ Z& g4 z: C) v
KEY file (file)6 f! {5 N& g7 S% M! ]# c
);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 j3 r: N" H) C5 m* a$server = "localhost"; //你的服务器
6 |8 M' y$ B( W; f. M( w4 j, K# q# c) i$db_user = "root"; //你的mysql的用户名9 [/ c$ ~+ c( f( r
$db_pass = "password"; //你的mysql的密码
4 m# N. @: n4 k* K$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 v9 A: ~( D1 a8 }$ b% H$timeoutseconds = 300;取当前时间。
2 O5 @' ]2 H% j& c# f$timestamp = time();上面的完整代码:& j! w2 r5 t7 M3 X! K; _; }% V
<?php3 P# R) H9 [) n; _ f3 c
$server = "localhost"; //your server
. M' g2 W- p- i1 F$ W( W. B$db_user = "root"; //your mysql database username2 V, e' ^6 \2 p# ]
$db_pass = "password"; //your mysql database password if any E7 Q- y$ ?5 T: u5 p/ c
$database = "users"; //the db name: p. i/ ]1 n8 B0 H/ Z
$timeoutseconds = 300;//timeoutseconds limit$ N& ?- M/ P5 d4 p
//get the current time' f$ C/ Z0 S0 P' Q) {
$timestamp = time();
& A; [5 A9 b5 g6 H//calculate the lowest timestamp allowed
8 {/ l6 G) @, O$timeout = $timestamp-$timeoutseconds;2 {0 q" s t, S" a( t( j
?>连接mysql) y( [$ x8 M, i3 ~
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 F2 g% _& ^( Z8 H5 ^mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 W/ s7 p$ t3 R9 @' v' y9 V5 W( \mysql_connect($server, $db_user);查询数据库的代码:: @6 z4 Y9 a) c- [0 r& W6 r4 m- W% J
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! O, Z; V7 e5 v: x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* X( |; `7 ^0 j, M- b! z3 I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ {7 y- K+ k) b# L& o如果用户用错误信息的话,这样处理。
6 r! ]: z0 d* s* s6 n E" {if(!($insert)) {+ K B3 R3 _: C
print "Useronline Insert Failed > ";, e7 N# ?( k( _& B
}然后实现当超过设置的时间就删除该用户记录。4 t% `9 @) s3 r6 V$ |$ o6 u5 T- c$ Z4 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。; I( n4 c" w! ]" X E- s( }
if(!($delete)) {
8 I# i' u3 [" r, Z0 t' kprint "Useronline Delete Failed > ";2 D$ u% f" \1 g' k8 g5 v; p
}下面我们解决数据库中不同IP的问题8 P$ y2 k. J, u8 R) k
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 M% ]2 p$ L7 @- l* [) |5 K" F. w; Vmysql_num_rows(query);来统计用户,代码如下。' j) w6 @) i* i1 g4 w# _' S b
$user = mysql_num_rows($result);最后关闭数据库。
8 v$ c. _/ \$ dmysql_close();显示在线的人数。
! B1 g+ @$ C: h8 M Z3 p cif($user == 1) {6 D6 R, c8 ~/ j+ V7 W. [+ v
print("1 user online\n"); h- a( f) N# e% n1 Q, G
} else {% Q5 \' D6 u. J3 C+ s; a& y
print("$user users online\n");. C- g* D9 L$ s2 Y2 K4 q* F+ b
}最终把上面代码写成一个PHP文件如下。- O# {# C# n. k
<?php d9 R2 n' Q* z, {3 C" ?5 P
//Put your basic server info here
' ]& V$ C h! ]( ^& o. M/ ^8 a$server = "localhost"; //normally localhost
& r; s& u1 P3 e# v7 ?$db_user = "root"; //your MySQL database username, L5 p) s8 z% n/ i* O2 J1 b
$db_pass = "password"; //your MySQL database password
3 ^; e+ P/ o, A3 [; c$database = "users";
* m! b! q5 {: F8 M/ \' ]$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' B% R" @* z0 G6 q2 D+ s
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 H U) S! }8 [7 o- O// $timeoutseconds seconds)( J% t- p) a3 @( u+ F3 e
//this is where PHP gets the time
6 K) @$ }- G, a. h2 B: L `. T9 s3 h$timestamp = time();) r" {) y+ C% y0 x
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed7 d) Q3 ]4 [" C- v
$timeout = $timestamp-$timeoutseconds;2 u8 Z# _! s% i
//connect to database
2 G6 Q) L1 y3 T5 j. V/ @2 a; ^0 imysql_connect($server, $db_user);0 X) s8 \0 S7 |; ?
//add the timestamp from the user to the online list
- q7 |0 N; t$ q, |2 K2 ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 ^& k) }6 r5 F2 z3 b3 ~('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! M! L3 ^% L. f. i/ k' eif(!($insert)) {) p3 e X& e, C5 I
print "Useronline Insert Failed > ";
+ E$ R! ~( C& W& u' r1 q( n. Q}' v, Q6 [% Y/ x `' g; K) L2 h
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ H; Y4 Q6 p! G- m$ W: g$ d+ J$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 |* @3 m/ p( ]
if(!($delete)) {
: J3 N" o: n) I- u, I: ]- Vprint "Useronline Delete Failed > ";
( c) n+ g. E( M/ @8 X d8 K}
3 V3 z. {; S1 M! e//select the amount of people online, all uniques, which are online on THIS page
& `7 r# Q0 ` E4 a9 C+ U$ E$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 u" _0 E1 o( _0 q" K/ {if(!($result)) {
5 Q$ x5 N* c) ^$ A( J1 m$ e9 A: \print "Useronline Select Error > ";
; _; k! k' X$ w, L( B+ E) y3 Q}
6 N/ |9 M# w/ c; V//Count the number of rows = the number of people online- _6 b$ D! z% E; c& J
$user = mysql_num_rows($result);
9 Q$ j' R) l) A7 Q( I% J//spit out the results, ]9 O$ E# D9 Q. P, z
mysql_close();; w ?- Z% ]$ Y1 X+ \; b9 L4 m7 X8 U
if($user == 1) {
: Z, K9 E$ C; O1 f6 t: j0 Dprint("1 user online\n");5 w0 P/ K2 a p5 q% C0 ]* ]
} else {
; a1 n: v6 D @- Kprint("$user users online\n");
% z; m% g9 C' x; h$ H}
3 X, z! W3 d- s( p t" v?>$ N( _. X! x8 ]! J' h
& }& M h9 Q- G2 [' X. r* W L
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ e; A4 H0 W# p+ [4 t c时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- y4 j- `8 y. i" N2 K+ _) P5 a我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
# S0 o' l9 ~5 ]" v当然啦,这两款主机也是相当不错的。
. E# O9 `$ g0 B( j智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
1 x* T: E9 V, I) W9 @! w* k( ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 T/ V: A' g. B% J$ p' }4 t
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
/ C6 Q/ p6 v/ x$ u& i空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ y3 X# L( E$ U- V7 y$ p: H自己加QQ去问吧。 |
|