返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 K: O% c! b6 L: j
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 H1 w! ^* v. s1 @  ]! q
首先我创建MYSQL数据库表。
3 x& A3 K3 _/ s! @9 FCREATE TABLE tablename (
( H! r( ^4 l; ?0 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL1 _, m* F0 ?, G' c) \# V
}可以使用的SQL语句。
$ n6 H$ D7 `8 _* x( x, \CREATE TABLE useronline (
/ i7 i/ f7 a8 T  G- I$ ~. f9 q+ otimestamp int(15) DEFAULT '0' NOT NULL,& H. A2 O+ ?6 z2 E* H% C. H8 k
ip varchar(40) NOT NULL,8 I# t0 _- @" [8 ~7 |6 F# l
file varchar(100) NOT NULL,
9 O" x9 a" T2 e, lPRIMARY KEY (timestamp),! r5 W  d# V8 z$ _; A( @" s
KEY ip (ip),) q% ]5 ^" j4 |% d+ s, M  I
KEY file (file)2 M, a( c# m$ ?/ W3 H8 |! D
);下面我们是PHP脚本,首先我定义MYSQL的信息。8 O" `3 E5 m3 Z: n; a- i
$server = "localhost"; //你的服务器
) ^; q$ F  Q* v/ {; r; x7 o/ H2 z) `$db_user = "root"; //你的mysql的用户名6 t0 r% e, Q' e- O5 Z
$db_pass = "password"; //你的mysql的密码, r8 y& \6 ^8 b" Z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
: c" N  M0 c1 ]  P3 {6 S/ k) y$timeoutseconds = 300;取当前时间。
) v( Y" j) m& r9 e0 V" e& O% P; v$timestamp = time();上面的完整代码:
$ H( T* C7 d8 c<?php0 @& y- [% v/ _
$server = "localhost"; //your server) S7 i( P/ H0 e* e  v: A
$db_user = "root"; //your mysql database username4 s) q+ e* Q1 V- Q
$db_pass = "password"; //your mysql database password if any
5 e6 A2 Z* O% u, D, \$database = "users"; //the db name
" e; Y% X" I: i7 O( M8 X% i$timeoutseconds = 300;//timeoutseconds limit
3 _( s8 H, I; z; X- C//get the current time0 I3 S6 Y- f" |, K
$timestamp = time();
! M& p8 l+ b% \. e/ A//calculate the lowest timestamp allowed) J& J$ A# \3 c  K: g
$timeout = $timestamp-$timeoutseconds;% _  [/ i  N4 V& n3 g5 Y6 p: ~3 s
?>连接mysql
% Z- B. }/ e9 _" G  ~# {8 `$ ^& z  A) nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。: W! o* K! d2 B. W# `1 x5 K& c
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2 A+ U. p5 `+ O0 @0 Gmysql_connect($server, $db_user);查询数据库的代码:( H  i9 U% U% ]- o' H3 }) Z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。  W+ h5 n" n7 C2 [, I. b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 P: K% ]( I" l1 a# L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
& W; K( P4 I+ o7 n' O( }0 v* P如果用户用错误信息的话,这样处理。
6 {# G6 A. [, s  Wif(!($insert)) {1 ^; Z& f5 V5 T7 g
print "Useronline Insert Failed > ";
# j7 w+ t' w8 h, S}然后实现当超过设置的时间就删除该用户记录。$ M& P3 K- V2 P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。; G7 n* _9 o& X
if(!($delete)) {0 v9 M' }, e9 g( L6 V  F
print "Useronline Delete Failed > ";
# C; j& F# @, B, o+ b1 v}下面我们解决数据库中不同IP的问题9 ^+ P2 O; M/ r/ y/ N
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! r6 C: U( U( j+ y3 e! c# Nmysql_num_rows(query);来统计用户,代码如下。
' J, y% \1 V# |6 }$user = mysql_num_rows($result);最后关闭数据库。. R' e# w6 W3 O
mysql_close();显示在线的人数。% h5 Y5 O( d) y4 i) l
if($user == 1) {
8 p) a, V1 x$ x: i. ^6 Z1 Uprint("1 user online\n");- U( t1 ]% B% d
} else {
6 p/ {# w: p" ?9 zprint("$user users online\n");
$ u! a0 z8 q' o}最终把上面代码写成一个PHP文件如下。
  Q" _7 d/ Q! |+ Z1 g<?php% ~, |( i; @$ R' N7 }0 T
//Put your basic server info here9 ?1 m. w6 X2 R! F7 }6 X. D$ l
$server = "localhost"; //normally localhost: D9 P% ~" p, C! O
$db_user = "root"; //your MySQL database username5 Y- c$ x3 q3 W/ A* E% Y
$db_pass = "password"; //your MySQL database password
4 x) d- T& Q3 Z1 k5 [. H' J: l$database = "users";
4 L; D# X$ B3 B# K+ L$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: L( M# }7 _4 C' ^1 L% C  D
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last1 A  [0 e1 q$ Z: F' z4 @- b
// $timeoutseconds seconds)# u. ~, Y* p& }) S0 L# Q2 _
//this is where PHP gets the time1 v5 r- x3 p5 n- i, |2 a7 O
$timestamp = time();: P9 p. P. L3 A" `% k, B: S
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) M  l2 R7 i9 [# B6 y: o+ ~
$timeout = $timestamp-$timeoutseconds;- ^( k, O7 ?0 Y/ l8 s4 ]4 t
//connect to database
0 {( T) c# F& bmysql_connect($server, $db_user);% K& _  e; c) F: I  X( f: _3 R% `5 R
//add the timestamp from the user to the online list% O. q' w) H) {/ R
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0 {; I: `$ G: y( t) a" w6 `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, z" c& ]$ ]. E1 Y2 @if(!($insert)) {
/ ~3 g  ^' s0 d6 d: n4 A  M7 b7 a' dprint "Useronline Insert Failed > ";" C, x' L% o, P- T; }
}; E" X- P( O' L* a
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
8 L6 n3 G2 f6 [& I& v# _$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
& s8 A8 z, F! S5 G2 Z+ Z7 hif(!($delete)) {
( O/ E! ~. q( Uprint "Useronline Delete Failed > ";
  C) s' v; m3 b2 @$ K% o}) Y1 C! j, S* ?0 r8 t
//select the amount of people online, all uniques, which are online on THIS page& y& y. \$ V2 j9 y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 x. X  Z8 V6 X5 R3 v
if(!($result)) {
1 a  G% z* m  Z  N3 T4 J1 oprint "Useronline Select Error > ";2 F7 L) z" R* u) K
}: G7 g7 H- {3 e' ?
//Count the number of rows = the number of people online
" m! }% W; O% m$ d$user = mysql_num_rows($result);
) }) L! j; z# H# I//spit out the results
2 l/ V' ^0 {7 l' e& R& }+ n8 Fmysql_close();+ Q1 m) h1 W( g& @
if($user == 1) {7 f/ G+ L8 N) _+ u% y5 u" X
print("1 user online\n");
3 v3 \4 G, U2 _. C! \: ^} else {
0 u0 M4 y4 G+ _& Y- ~+ v8 rprint("$user users online\n");! `  d6 t  Z, B8 y( b' s5 ]
}
8 ~2 a4 {+ l* G( r?>" `0 D+ `7 Y1 {$ j  j- a2 H: q
2 y+ H8 g7 X; o$ `. B
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" ]$ G- W: N& ?0 _% ]时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- Q& ]' O) e" j( }. t. j2 P0 @0 u* |; S我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。0 H  n; x9 F1 h$ Z4 l* u
当然啦,这两款主机也是相当不错的。$ V9 w+ x; e! M% n" y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" M2 `0 ]% l7 ~" P' _$ j标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 ?( Z/ O6 K6 ]) N2 k. ]
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 t2 C6 t2 M5 I- _
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
0 `% v( a' E% a9 M: T9 L自己加QQ去问吧。

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