返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
5 l0 Y7 P  y) Y7 R- q2 S, ~0 S" u' {我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
* @5 W0 n2 q# f; s. S9 u$ r首先我创建MYSQL数据库表。
: F5 s. \3 U7 ~& [4 h' ]( b/ E! wCREATE TABLE tablename (
- a& Z2 i' \. }& @9 i* I6 A5 h" Bfield type(max_length) DEFAULT 'default_value' (NOT) NULL
2 W9 p! `! s3 t}可以使用的SQL语句。
/ |8 r" h+ V. W9 M5 XCREATE TABLE useronline (# g) }" D; z  y6 O; z
timestamp int(15) DEFAULT '0' NOT NULL,
! U2 k% W+ H5 y/ v% |. d# U) N# W7 Sip varchar(40) NOT NULL,
: g& w+ g; T6 r& kfile varchar(100) NOT NULL,' O& g7 i- [$ M5 R
PRIMARY KEY (timestamp),
5 u4 m' j2 j0 X$ d7 Z+ G# n" oKEY ip (ip),
# ^, [. c3 V1 m( s  K" f5 ]KEY file (file)
. ]& e4 `& f; P/ f);下面我们是PHP脚本,首先我定义MYSQL的信息。
& W& N$ _  E3 s$server = "localhost"; //你的服务器( d. v+ k6 x% F
$db_user = "root"; //你的mysql的用户名
& H6 O0 w' n; S+ i% X, Z/ w% ^/ Y4 [: q$db_pass = "password"; //你的mysql的密码
3 B, {4 S- C& R. Q: a7 P, {; K$database = "users"; //表的名字设置统计的时间(多少秒内在线人数). h. x; A2 C) @  U
$timeoutseconds = 300;取当前时间。
) P9 F( k/ Q: u! R, p9 w$timestamp = time();上面的完整代码:
8 y4 n0 n" g' L2 ]2 F<?php3 H% F% ]( |" l5 f9 C+ l
$server = "localhost"; //your server
$ y! L( ^9 {, W+ n( M, p8 }$db_user = "root"; //your mysql database username! L- K. W5 ~6 y2 A- y
$db_pass = "password"; //your mysql database password if any! R( z9 P% |! b! B
$database = "users"; //the db name4 H9 r7 Q6 O3 ]  T5 N0 W3 |
$timeoutseconds = 300;//timeoutseconds limit
0 Z7 d- J0 F/ u7 L- F3 R, ]: P, y//get the current time
0 Y3 L/ k  x& e0 ]7 ]$timestamp = time();
( K( {+ _) A. Z3 N6 ^! [- \//calculate the lowest timestamp allowed
5 l0 N: I) n9 o' x7 C. Y$timeout = $timestamp-$timeoutseconds;
; _( Z, a9 F7 G  Q9 \?>连接mysql
; \1 W& `- c4 S/ Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。; w" {$ B: s8 a- c% v" @9 s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 C. @! Y% M" X! O9 ?  S7 P; v
mysql_connect($server, $db_user);查询数据库的代码:
2 ?6 J, y3 [  K2 i/ ?6 t5 imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 k6 B/ [7 y" o/ S1 P. G5 T3 J, Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* |9 z$ y- x$ R2 v0 O, E
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 _+ ~! Z: q% f* ^( P; L; ?
如果用户用错误信息的话,这样处理。
& j1 r  [' p7 X8 @  ?* y% d" Q  h1 eif(!($insert)) {
2 `5 H9 U/ p( B+ ~  P( d: N. Zprint "Useronline Insert Failed > ";( g4 x2 R  G. w* A& `7 t& z
}然后实现当超过设置的时间就删除该用户记录。
2 Q) b+ z) J, g, Y5 q* N3 j8 p$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
  K  |* L, N9 A0 o5 p! l3 iif(!($delete)) {5 c/ K2 p7 O5 o
print "Useronline Delete Failed > ";1 ^5 c7 {# F/ w# R% x" I
}下面我们解决数据库中不同IP的问题2 E: @" p) H2 h5 d
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 u7 z5 }; t0 Bmysql_num_rows(query);来统计用户,代码如下。
  }% _  i1 B8 ~$user = mysql_num_rows($result);最后关闭数据库。
. ~6 c5 Z1 z' X( G' S$ |mysql_close();显示在线的人数。) e  M( z1 O- [" }4 G2 H
if($user == 1) {$ S+ w# w6 q* v' F$ D
print("1 user online\n");
/ W- C+ ]: q: U* E6 p3 Y} else {
6 h( a# G. \3 S* q$ Z5 pprint("$user users online\n");
. W: E$ n" G" U0 c8 \}最终把上面代码写成一个PHP文件如下。
0 D# `. l. i) o% |<?php- R$ d3 k8 m9 ^/ K! @, M( }
//Put your basic server info here3 ~0 s1 b4 p' L4 y
$server = "localhost"; //normally localhost% X4 a5 x! U7 `8 l* P5 n; `; H
$db_user = "root"; //your MySQL database username
4 n* V! p! v2 n5 \  d7 k: j$db_pass = "password"; //your MySQL database password
7 }$ n. R, s, f' x$database = "users";
& Y* V  D) s8 [8 d$ W0 P$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are0 b7 D3 z9 S4 G3 p# f* n
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 T* O, b+ D. A// $timeoutseconds seconds)4 M: l" c# D. j$ Y. B3 I! j
//this is where PHP gets the time; ^6 Q- ]! a- e3 u" c7 E. f" C/ B$ r
$timestamp = time();% g/ R9 R% i- n: {/ T' z
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 U& I  q' o( @4 J) l6 M6 n$timeout = $timestamp-$timeoutseconds;! a, x1 E  e7 T' [' v5 _) g
//connect to database
7 K% g! t. h3 O! z  j) omysql_connect($server, $db_user);1 R  x% T' ~! H0 x" k0 E0 s
//add the timestamp from the user to the online list
& c' F6 n. i0 L8 I2 r+ }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 \' P' Z: c- L4 F! @('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 ^2 [) k: G1 \- j
if(!($insert)) {# B8 W6 z3 l) F" y& X+ |
print "Useronline Insert Failed > ";: P  Y* ~% m( `. ^- E/ r7 T
}7 P* q4 A) W2 o0 e8 M! b5 q, C0 m
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
& s5 e) [6 f* h& X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" |+ b* [0 j7 X: o$ [/ Gif(!($delete)) {" m/ d$ J6 h5 E$ h  V' t  G
print "Useronline Delete Failed > ";
8 a0 Y( t  O: H$ T! c5 t. K8 f}' o5 h8 s9 O" D9 ~4 w" K
//select the amount of people online, all uniques, which are online on THIS page
  k7 |3 Y" z- r! }7 b- w6 ?6 G5 U$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, y" D* H# a) ~! c& O9 q7 J3 ], mif(!($result)) {
- \. D+ I8 L7 Z3 e2 Q5 x" pprint "Useronline Select Error > ";' j3 {, |" y, a7 N" R  M$ R: x
}
( k  F% Q; E" z4 |//Count the number of rows = the number of people online
9 P- }) _$ v$ R$user = mysql_num_rows($result);& W  I# j& N* w1 Z! O8 N
//spit out the results
, ~. t8 W$ p* K" N9 f4 P; Nmysql_close();- J2 T* a6 p% M/ T6 g' [
if($user == 1) {8 ?, n6 M# V9 z% m
print("1 user online\n");/ l& |, B2 ~- v# o. E: v
} else {. A; I( _9 l' l8 l/ \
print("$user users online\n");, A* A% P! H! z1 j- ]6 T2 Z
}
  q' F7 Y% I- J' x. p' f2 P?>4 w8 I' S; b' y1 A7 c% s

6 i3 I- i2 ~" k以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。, G3 g' O5 Z, S4 D: e
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ h( n' R1 J  L
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
8 y$ J5 g( F. N当然啦,这两款主机也是相当不错的。" O5 d- p$ a; A5 Y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, i0 u% L& `% G# a标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
* K7 L8 n# T0 \8 ]提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
' d8 S% ^; b- J空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
6 b( R, Q8 @/ D1 S自己加QQ去问吧。

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