获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 R+ ]0 t  V! Y: F  u我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 H' o2 L# g3 W. {8 }/ k; D  H首先我创建MYSQL数据库表。' Q) _) T) e" n; [+ S
CREATE TABLE tablename (
, ]0 f2 S2 N" ]4 w0 `7 d& [field type(max_length) DEFAULT 'default_value' (NOT) NULL, w6 q" `  g( W
}可以使用的SQL语句。" O; Z# k7 A6 u' O
CREATE TABLE useronline (
' @# [. C/ [! R. ?6 Atimestamp int(15) DEFAULT '0' NOT NULL,5 X8 _  W$ m  E! H; N# b9 S
ip varchar(40) NOT NULL,* L& t; s" ^1 [% \# U
file varchar(100) NOT NULL,; J# l9 x. A0 ?% a- y6 q* ?2 L
PRIMARY KEY (timestamp),! W' g9 o5 p# v
KEY ip (ip),
( G9 n( @# f/ @) K/ w! ^! z5 nKEY file (file)
/ M* m) O9 m1 u7 a);下面我们是PHP脚本,首先我定义MYSQL的信息。
8 I0 x7 V' j. t+ }; B. c* e$server = "localhost"; //你的服务器4 \& I/ \) b/ \* _% S2 m+ D2 H
$db_user = "root"; //你的mysql的用户名
. G; m0 a: b) I9 l2 M. w$db_pass = "password"; //你的mysql的密码
9 h0 _% J4 |- u" I. b$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* r3 J+ T; N7 z. Z: c$timeoutseconds = 300;取当前时间。, I; o7 z7 Z" [. k1 \" d! [5 ^
$timestamp = time();上面的完整代码:
3 V# G+ z* _6 q8 M, k1 r<?php
) ?4 k) i6 `) L$server = "localhost"; //your server
5 l$ Z0 j$ t, b! q$ d3 G% C$db_user = "root"; //your mysql database username
2 r# G  ?& E7 Z4 S6 K$ S& Y$db_pass = "password"; //your mysql database password if any
3 ]/ [" V) A$ y0 F7 Q' e$database = "users"; //the db name
0 z9 B6 X9 ?  X. C" V$timeoutseconds = 300;//timeoutseconds limit
' n+ y: A2 t) C: {/ {4 j//get the current time
2 B- [, q8 ]7 T% @( b$timestamp = time();0 E* w) k/ D: l* q8 g
//calculate the lowest timestamp allowed
5 a1 h+ k0 {  V" L3 o' m6 i$timeout = $timestamp-$timeoutseconds;9 d, }8 Y# c, n7 m, g" C" T" J9 i
?>连接mysql0 v6 j3 X1 h3 w) F3 F
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 F7 l7 i/ }7 s/ \- t1 U/ d
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接5 w/ x$ n/ Z3 \) [  |, b, h1 u
mysql_connect($server, $db_user);查询数据库的代码:
. G! K' ^# ~7 L2 pmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; j7 v5 u! h$ ~4 k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! J2 M: j, y# H" }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& l8 k/ O+ e& m, b如果用户用错误信息的话,这样处理。: ?7 g% ~; F7 [, w; I4 \! T
if(!($insert)) {1 j" S6 G; W4 }* d+ G
print "Useronline Insert Failed > ";
/ r, E+ X1 j7 c" x' h) Q6 J( Z}然后实现当超过设置的时间就删除该用户记录。
7 }1 s6 \. O' _1 M7 F3 W- V2 X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* c/ e- N, b6 [( T3 A. Gif(!($delete)) {
9 ?. [( L6 M9 Wprint "Useronline Delete Failed > ";
4 p* b2 K; `$ F, K" n6 K' _) W}下面我们解决数据库中不同IP的问题
9 N$ A$ R% [+ c8 Q9 B8 J! C3 a% C$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  ]- \- @: s% u% b% @mysql_num_rows(query);来统计用户,代码如下。
* Q8 Y: u: I0 I+ e9 O; _$user = mysql_num_rows($result);最后关闭数据库。& Q$ q! x4 V/ k1 x; o3 h
mysql_close();显示在线的人数。
! z) z: ?. Y! d1 Zif($user == 1) {
' I  V6 f. y% S# A8 }print("1 user online\n");) e: j# f4 p! d' u* Q( n
} else {+ C( o+ t3 x+ f  Y! h( c! _
print("$user users online\n");0 B! n$ h6 I* l) [
}最终把上面代码写成一个PHP文件如下。$ K2 I" B7 N$ k3 U* g
<?php
6 c, Z8 b9 T+ @# C3 f//Put your basic server info here  W9 X$ ?3 J1 N) M
$server = "localhost"; //normally localhost
' m! o8 i" v0 S3 y$db_user = "root"; //your MySQL database username
7 ~1 j1 I9 Q4 ?% I5 P, t. E; `$db_pass = "password"; //your MySQL database password- |. T6 X% t& R
$database = "users";# \% S* w5 h. ]2 H" F/ ]4 F! t
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
& K) G: s8 a1 ]5 q+ u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
- t4 l5 T, e. {% l6 v" J// $timeoutseconds seconds)7 L2 M7 v- O  E9 n$ q& r! [! D
//this is where PHP gets the time
3 [) [" F$ A, P9 @4 f7 a4 u( N& c- Q$timestamp = time();5 q4 M2 p6 Z! s) G1 z" m2 w% k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- d, |/ M! P: K* X6 A/ N
$timeout = $timestamp-$timeoutseconds;
" z7 X& ^5 B6 a7 N; q7 z( c//connect to database
7 _9 n4 k$ Z' Amysql_connect($server, $db_user);! y9 e. U7 x+ W* o) N" l! v) P
//add the timestamp from the user to the online list
6 @0 k4 C9 C. X. j9 g6 z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. C5 D2 |  j5 _% K- X" o('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");3 r+ a1 m1 S: P+ K/ d, z
if(!($insert)) {
1 Z% u6 e+ ?4 W" S" I8 Gprint "Useronline Insert Failed > ";
  P) T% c. P3 p' {) V! j( y% J}
8 d& U$ c4 ]& v; J! u//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) l9 n* i1 e9 T" g) Q% m+ n( E
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
1 N% L; }1 [5 k+ Uif(!($delete)) {1 V- g9 U2 r/ N1 `2 }% b0 o
print "Useronline Delete Failed > ";2 G4 z3 c1 ]( T
}2 @  o, E' r6 ^" L2 W. a; V4 Y( |
//select the amount of people online, all uniques, which are online on THIS page# O+ Y( ]% x9 H+ R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, ~; J- {; e+ f% M6 W& Z+ f1 Mif(!($result)) {
  A/ R9 d' G- c& d0 Sprint "Useronline Select Error > ";* m0 G  U+ q& r3 G
}
* u! k! P3 C5 v$ c4 X" b//Count the number of rows = the number of people online
0 ~2 b0 P  W/ o$user = mysql_num_rows($result);) p6 f9 N$ a: X0 P) ?8 S# n5 P
//spit out the results* G1 U/ Z$ h4 |& o# I1 \, W
mysql_close();; N/ U* v5 r: f5 }1 k
if($user == 1) {  H& z) W4 r+ y8 Y; J+ O
print("1 user online\n");7 }  [3 e( P, e- J- b0 |; T! [5 f
} else {$ `) C& |1 {& Y% T3 B3 U6 p
print("$user users online\n");- F/ ~% T; i6 Q+ u' c( I& ?
}  |3 ]6 t0 g, g% {& q. e" }. o( ]
?>: }( ?4 V! \, M% d' v1 r
" d$ p! }) j( Y6 k
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ u  H* F# Q3 `8 }2 H" B时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) q+ K5 K( U; ]: d我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: Q6 O: T5 [+ Q) z当然啦,这两款主机也是相当不错的。
0 ~* i9 j) b/ I2 Z  q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 F5 O- a: Y9 {4 u标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
0 g8 T" |3 i+ ~) E! d# |提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
) M3 i; {: D1 ^& ]9 E" G( m空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=553 @  ?/ Z: h- T' H
自己加QQ去问吧。

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