返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& U) E, r% |8 ]1 G7 U  o
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。6 m4 g# g6 k' z9 Q6 U: ^% B3 d9 t; y
首先我创建MYSQL数据库表。
  p$ d, t! u9 V" g& l4 }* BCREATE TABLE tablename (# T* l. S( |( ~; X+ i1 z6 U
field type(max_length) DEFAULT 'default_value' (NOT) NULL' s) k* o) y7 l
}可以使用的SQL语句。
% r0 q! l. U7 g/ b2 g. |CREATE TABLE useronline (
  S: d/ ]( w4 S7 b) v. mtimestamp int(15) DEFAULT '0' NOT NULL,: L  d7 l9 B  }" j( Q
ip varchar(40) NOT NULL,; R- [  |$ \9 Q' J( v6 ?0 `% G& z
file varchar(100) NOT NULL,
+ Y' t$ D- W1 _% HPRIMARY KEY (timestamp),
) a. y3 d$ y. kKEY ip (ip),) D2 v9 N9 ]9 Q% S% V# q% C
KEY file (file)
( P, {7 j7 E7 c' U. o1 f);下面我们是PHP脚本,首先我定义MYSQL的信息。9 X1 A- r; @) |; _' Z3 Y
$server = "localhost"; //你的服务器5 n* `0 Q% O- b- A" ^
$db_user = "root"; //你的mysql的用户名
6 Q/ {' D( m- o- H4 ?4 y/ V, H$db_pass = "password"; //你的mysql的密码
; D  y( C* i1 X& i$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)+ V5 B# L% o& g+ S9 z# Y
$timeoutseconds = 300;取当前时间。
$ G) j1 X; H; ]0 r% t$timestamp = time();上面的完整代码:' {" p& x1 u% G/ a) W
<?php; m0 `+ i# Y; f
$server = "localhost"; //your server0 ?6 l1 n: N/ Y) B6 L
$db_user = "root"; //your mysql database username' A+ M9 i. M' e( ]
$db_pass = "password"; //your mysql database password if any
- _( H. T1 k3 ]1 o, ^, N$database = "users"; //the db name: [( k2 w7 b: y0 I# |
$timeoutseconds = 300;//timeoutseconds limit
& X8 }& U( O1 ~8 T) a/ c//get the current time
2 m  w- Z* A: t, d0 A$timestamp = time();+ H# e8 N, l9 Q& S# ]' U" ]
//calculate the lowest timestamp allowed" L- L- j' w7 c2 J
$timeout = $timestamp-$timeoutseconds;
* ^( Y7 `. ^; j# q?>连接mysql
  F! k8 t7 Q1 M) c1 D5 j7 S: Xmysql_connect('localhost', 'username', 'password');也允许使用变量形式。* n) B4 N# W  T& a6 @( J0 {! |8 u7 ?
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ `/ y. h% ]# rmysql_connect($server, $db_user);查询数据库的代码:3 R8 j% ^: t. c; q, A: w! [+ E
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
& q  R% R2 S; I" ]/ T1 E9 H$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  y7 u+ ~2 U; t) ^  |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( Y4 F# }8 K, C- X( P, M/ O2 q
如果用户用错误信息的话,这样处理。
) V$ A. Y; |9 W, g: ^if(!($insert)) {
& o8 |4 Z; X2 u8 Fprint "Useronline Insert Failed > ";
4 }( J1 q* j' x7 y. P8 M5 U6 y. n* ~1 A}然后实现当超过设置的时间就删除该用户记录。
4 Q$ f' g% D5 M4 D' Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。4 s  `5 S+ B/ M
if(!($delete)) {0 I3 ?7 ?* c4 A( X$ @5 ]
print "Useronline Delete Failed > ";
6 Q4 u, x- d# ^}下面我们解决数据库中不同IP的问题1 u+ y% V  c: r! |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用% p! e, d; _8 G2 I7 `$ r3 P( y4 d
mysql_num_rows(query);来统计用户,代码如下。$ E1 g. o$ O) s
$user = mysql_num_rows($result);最后关闭数据库。
5 S: {3 K! Y* k3 b/ x5 Cmysql_close();显示在线的人数。
* @- G" [" v: {3 ~9 ]0 y# Lif($user == 1) {
# p  t; H- U* A: w/ r) c+ dprint("1 user online\n");( Q- r3 S  y* v5 o5 c+ j& g' |; v. s. l$ E
} else {
/ l9 ]2 O* o  B' z( c' Yprint("$user users online\n");
& F4 t) z: }  f, p5 A, M4 Q5 r}最终把上面代码写成一个PHP文件如下。2 k9 W& W) `3 @. O! n$ w
<?php
! p- S9 ]) Z# o//Put your basic server info here6 S  [' g. d3 \0 S! }! F3 c
$server = "localhost"; //normally localhost2 H$ i. k- ?3 G5 t4 L+ w. g: A
$db_user = "root"; //your MySQL database username
  ^1 r. I% v  B; e$db_pass = "password"; //your MySQL database password' }! s& W6 ~9 l; G$ u& R
$database = "users";
0 c- P9 d  d" y) W+ W$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% V) z, l) X" W' U! a' {
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& t+ M7 J! n% w+ G8 H' i
// $timeoutseconds seconds)) p9 g+ S2 w) G7 p  e5 z
//this is where PHP gets the time
( q9 E) {# E4 [$ K# ~8 v$timestamp = time();
+ H" C- G0 I* I! ]" h9 u2 Y! g//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 d8 y  H5 T/ J3 l4 m
$timeout = $timestamp-$timeoutseconds;& _0 [6 Q' c3 S* h( J$ f
//connect to database
: S$ T/ [# H! m) M8 T- g" u& ^mysql_connect($server, $db_user);
- P6 A1 `0 ]  P+ |/ _' W6 k//add the timestamp from the user to the online list
, O5 s8 |! ^' a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! K0 R2 `/ x" l6 n+ x7 E5 ~. |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 B; r: }; ?( P8 r# U, |if(!($insert)) {6 ~* a2 n8 x  e
print "Useronline Insert Failed > ";
$ f+ `, g  o& M. @5 U}
1 q# j4 S1 J. O" I' O: `& p//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." q$ E! t( M% E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");: S7 V% e" s9 a
if(!($delete)) {
# ]$ T, Q& |9 c2 |6 Kprint "Useronline Delete Failed > ";
/ |# I; ]6 h% ?; r: ~! b}
* q8 P, }% k% `. w! g  J3 f, ]//select the amount of people online, all uniques, which are online on THIS page
. Q  Q* u) a. x5 K# U: W$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, q! w5 [3 X& P  Gif(!($result)) {
8 H0 [5 S2 ~9 V" M( z' Kprint "Useronline Select Error > ";
; s/ D3 w4 i; |$ v& v+ a( B9 q2 o% h}( ~( C# n8 j3 K' S
//Count the number of rows = the number of people online
0 X" K6 s. T8 y5 g( i$user = mysql_num_rows($result);9 Y5 \7 d9 i/ g4 F# w
//spit out the results
0 q/ @$ c, g  R/ hmysql_close();( Z% W' S: O, X+ T3 m5 m
if($user == 1) {
4 _" j) a1 R/ _# ?print("1 user online\n");" k; S- J7 q, H( W6 L
} else {
& B. v8 f3 h# U+ v  Mprint("$user users online\n");
& |9 {0 w" A# Q) w, a/ A! c& ~1 L1 M1 _}
1 W! w. C2 p) l1 T?>5 H  R+ i. e3 A, `5 D' S- k, J# W
4 g- T' Z% T5 |/ ?5 \! e
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。' |9 w" ~# V: j8 J
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. T8 Q( B) z3 n# h
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
5 h0 _7 ~. p" v- R# k$ n当然啦,这两款主机也是相当不错的。
, _" t/ o1 U0 z" W% n$ w智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
3 w; M: ^" `. `% m标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! K( Q7 f2 I+ `' |
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
' x4 `+ X9 z% F' _% t3 Q空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
2 E* ?* f) u+ O, `自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: