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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!2 R' @1 e" W* p( @
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 r3 {6 i7 N  q6 K& [4 b首先我创建MYSQL数据库表。! W/ |% p5 r2 U3 Y# u5 o
CREATE TABLE tablename (7 d5 |- o3 d( u! @3 T( d8 }
field type(max_length) DEFAULT 'default_value' (NOT) NULL% u( c2 \% W# e
}可以使用的SQL语句。6 }/ j% E1 @, I7 U0 _1 B
CREATE TABLE useronline (
6 v+ a4 B2 n- x$ x* @7 A8 t) j6 Ltimestamp int(15) DEFAULT '0' NOT NULL,( m# p" _+ g/ \6 z6 J; E3 ^$ I
ip varchar(40) NOT NULL,
! X2 |6 \' Q' Pfile varchar(100) NOT NULL,4 P$ i3 ~4 [1 I, X# I$ x
PRIMARY KEY (timestamp),4 A1 s( P8 k. Y" ^1 d
KEY ip (ip),
% d3 L7 i4 j( l$ w, v9 MKEY file (file)8 X; P3 c+ j2 w3 A5 A
);下面我们是PHP脚本,首先我定义MYSQL的信息。1 D! L, b( V- o" m" _
$server = "localhost"; //你的服务器
' g# @( L- ]8 Q/ d! h( B9 l$db_user = "root"; //你的mysql的用户名
7 |$ G- t% l! q' W$db_pass = "password"; //你的mysql的密码% A3 i3 I9 W8 C6 o
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* ?( m. g' T0 E( l6 ^8 S  R$timeoutseconds = 300;取当前时间。
6 `+ _; L) S3 h9 n0 {6 \$timestamp = time();上面的完整代码:- T( E, L! N/ }. d
<?php" w: W/ m' e$ N0 |+ E; V. z
$server = "localhost"; //your server% p) v5 I, u3 N+ C3 _' Y# O, O2 ]$ N
$db_user = "root"; //your mysql database username' z& W* ]7 W" H0 z+ E. s. s0 ?3 j
$db_pass = "password"; //your mysql database password if any
! S' T5 q: z, Y' D- v' t9 x$ J$ A$database = "users"; //the db name
  R5 q% R% @% M4 ]0 u: t! G$timeoutseconds = 300;//timeoutseconds limit
" {1 e6 G8 d' n//get the current time" k, b& c8 p% r  [" j2 @
$timestamp = time();
0 j: X0 J: P. Q$ H* |% f//calculate the lowest timestamp allowed
; k2 W5 w4 w% Z  ?. O% K" T$timeout = $timestamp-$timeoutseconds;
& L* ]; x+ l# D4 j! F+ \?>连接mysql1 D$ l+ C0 A% l& g( H0 O
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
" B3 O. Y$ t* \* ?6 fmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- }7 y6 P! b0 ]0 Umysql_connect($server, $db_user);查询数据库的代码:4 K; _7 F1 O  _2 @  `
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 v- J6 D" Z) b, l
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- i$ C& O( K# f% N- g- \; Y8 m
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 i  i$ X9 v& q& H) S; q, ]
如果用户用错误信息的话,这样处理。
; ^9 e, M" x- j; bif(!($insert)) {: V. b6 H- L' I; N) }
print "Useronline Insert Failed > ";, F0 e% q$ `2 r
}然后实现当超过设置的时间就删除该用户记录。
, u$ l' m" q( O. d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 X7 F6 ^. T- B. C$ h
if(!($delete)) {
+ Y; h" [! i: J* E8 r$ _print "Useronline Delete Failed > ";
1 g1 a6 T& U' k% g1 F! T}下面我们解决数据库中不同IP的问题
; d) O4 h1 i2 c/ ~) e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
7 C  S5 i7 y( m; q- \1 smysql_num_rows(query);来统计用户,代码如下。3 L$ `' Q0 W8 a
$user = mysql_num_rows($result);最后关闭数据库。, s/ d; H9 ~& d: n% \
mysql_close();显示在线的人数。
' L; R  g# t* R  k7 m+ Tif($user == 1) {, k! O% t6 k8 f$ l
print("1 user online\n");
2 N! r8 p6 D6 P2 ^  r. L} else {
5 \/ w* f" i1 ?: Jprint("$user users online\n");
! ~& S9 u  q% ^* X}最终把上面代码写成一个PHP文件如下。3 R* V3 t* d7 w5 M
<?php
1 ?9 C2 y3 p; x- i( ^* e//Put your basic server info here! T  Q2 w: ^9 H& p% }
$server = "localhost"; //normally localhost
. p* Q/ _% ^. k5 P5 q# ?2 Y9 A$db_user = "root"; //your MySQL database username2 k; w+ ~( K; o" c
$db_pass = "password"; //your MySQL database password
( o* G! a" S" M" X9 D9 |$database = "users";9 ]0 V2 u5 J: Z) m2 H& ?3 h
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 M5 q$ P. p+ b% d9 U  c
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) f' V, [2 B0 K0 B" v5 q0 D5 I9 f// $timeoutseconds seconds)2 b6 b% N3 v9 `4 {
//this is where PHP gets the time
# O- \6 X. d- n; O' p$timestamp = time();/ h6 V' s. I8 D# l) [/ q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ [# Z0 Z$ I+ o; q( f/ c% Q$timeout = $timestamp-$timeoutseconds;
$ o" }0 D7 |7 c& v" }8 X//connect to database1 i3 V7 t/ b: v- R0 i
mysql_connect($server, $db_user);* e8 `: C( y4 d0 h: P6 o1 o$ `/ W/ M
//add the timestamp from the user to the online list
* {* F  q) U2 q& A$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# \; ]8 L8 \$ M+ D# O2 I' n' v9 `3 U('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");8 J+ W* H! L2 p) |. I1 {" P1 v
if(!($insert)) {
3 q! l- D  f1 }5 j' G( Uprint "Useronline Insert Failed > ";) ]! y3 a1 z& g  ^7 z) |& [# X
}; T# i; v% E+ O7 a% L
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
! |" o) l/ [, S" o9 Y6 }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
' [7 `( x# r4 k" D; W: [if(!($delete)) {
" z( K# I! T4 C9 lprint "Useronline Delete Failed > ";2 S/ C' E# V' W! `1 u  \
}
( T" [4 q! l! J- C8 h% j$ ?//select the amount of people online, all uniques, which are online on THIS page
# [7 P4 r, q0 L3 @% Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 L$ Q9 W5 b' j4 I6 p
if(!($result)) {  v" x7 Q8 [1 K; ]+ i
print "Useronline Select Error > ";
1 t) }, l* Y6 q0 A; v  S1 I}
2 J# r" j0 h( u3 K//Count the number of rows = the number of people online
1 C. U0 T- g9 X6 A) C$user = mysql_num_rows($result);7 n8 F  U# H1 Q3 Z
//spit out the results9 E' x7 g4 L; g
mysql_close();
7 m3 F7 F/ S$ @8 q6 R" G( oif($user == 1) {
8 S9 O6 m! N; m6 o* F) Hprint("1 user online\n");
8 N* j; b) C: K/ J/ F} else {/ U9 H/ {' b/ h# G1 S* V2 r3 E
print("$user users online\n");3 y5 s; N& {# Z
}  A  s9 I7 c9 y1 k
?>
& L  q* n" X8 ^, ^$ P$ C" e9 k
( a' s% h4 b8 ^0 V! l以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。9 b- G+ ^. ]( d5 ^8 p8 @+ t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
. u' M- ?5 A+ N2 T. F我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 h0 K3 m' f) J
当然啦,这两款主机也是相当不错的。: r. }  B2 U' J. t! d5 I
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
7 V* J3 H% e" e6 \4 R. }标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年# \/ |2 [% k# d' T" u
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * S4 P: R2 o5 w& x( |8 g% k
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 [9 |. j( J( ~$ p自己加QQ去问吧。

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