返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!7 y  \) |& m$ `: D* D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% |' S' I3 k1 s5 }" G. o  x" o# Y
首先我创建MYSQL数据库表。9 J9 g( I9 |  i
CREATE TABLE tablename (
. C3 z" \6 N  k7 T0 W' Sfield type(max_length) DEFAULT 'default_value' (NOT) NULL! E( P' s1 e3 I
}可以使用的SQL语句。/ u' X' a. C* F0 U& H# x) n  c# X
CREATE TABLE useronline (* ?( f* L) }( u( g4 u
timestamp int(15) DEFAULT '0' NOT NULL,
  E7 c& ]" e7 s( R$ I, Aip varchar(40) NOT NULL,
' \2 U( y2 v% y6 E' l8 k1 Mfile varchar(100) NOT NULL,
& R9 e7 @- x+ J1 u; j- DPRIMARY KEY (timestamp),, z( n9 _6 N/ V6 ?5 G
KEY ip (ip),! x0 F1 x5 G" Y' f& p0 Z
KEY file (file)
) k& N! g% n( |' _/ A2 g);下面我们是PHP脚本,首先我定义MYSQL的信息。! S5 N) C2 S! Z+ E
$server = "localhost"; //你的服务器
2 k2 k. n8 V+ d$db_user = "root"; //你的mysql的用户名
; a% L* [8 x, r' I+ T3 u- v5 u$db_pass = "password"; //你的mysql的密码
9 N5 W8 `& x+ G! A$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, B# ~- \- L) c$timeoutseconds = 300;取当前时间。
3 f, k5 o) P7 Y( Z2 V' z. q$ x$timestamp = time();上面的完整代码:
6 g! ^6 \/ H2 K$ z0 B9 x<?php/ [5 ~2 L- Y, Q
$server = "localhost"; //your server
8 k8 ~8 G  o2 Y# @# Z$db_user = "root"; //your mysql database username
- H& P- j- U  K' q( Z; [& h$db_pass = "password"; //your mysql database password if any  y: i3 S2 J; b
$database = "users"; //the db name
) S; P+ y. l- D7 }! I$timeoutseconds = 300;//timeoutseconds limit5 b6 S! I; q6 Z) _
//get the current time* i: i+ {8 ?& x  I, w# a( c  |# g
$timestamp = time();
$ V( C0 ^. J6 M7 s//calculate the lowest timestamp allowed
. @" t2 q6 G! Q( K8 |5 q- h$timeout = $timestamp-$timeoutseconds;3 N6 }/ F% B1 H6 c4 v  z$ ^
?>连接mysql! s1 j- d; n6 c) I* E) A( g
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- l, F' z8 d+ T# t
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 H. m+ g& [! ]0 wmysql_connect($server, $db_user);查询数据库的代码:
, W) B, V7 ]% f: [mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: E8 n6 t' O9 ?2 J
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 ^% [! U9 N1 g* l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" ]. b6 W3 x& ^$ Z" L. x
如果用户用错误信息的话,这样处理。6 ^- M; l( A$ x+ B- B
if(!($insert)) {. T+ D) i, [, ]6 t
print "Useronline Insert Failed > ";- y; m; ?3 Z/ e( X6 y! j& R
}然后实现当超过设置的时间就删除该用户记录。
3 S! A0 {1 l) H. G& K1 y! N$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ u2 ?, s- i, U
if(!($delete)) {
0 C; Z5 P6 n6 \( |) S! M3 _* Rprint "Useronline Delete Failed > ";
6 G, ], Q8 H; Z4 f8 h) E! n  ?" A% K}下面我们解决数据库中不同IP的问题% d( w$ |( [' W
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
" p) `) h  u  u4 i8 P' omysql_num_rows(query);来统计用户,代码如下。' D7 F& S1 l: P0 |6 H5 ?
$user = mysql_num_rows($result);最后关闭数据库。& z8 a) `; i  G4 Z' H) h4 _
mysql_close();显示在线的人数。
8 D+ r- p8 p9 {, ^4 n9 s( G* a3 lif($user == 1) {
% q2 }1 ~' A" g7 W# b( Iprint("1 user online\n");. O  T+ w  j+ [3 r7 T
} else {
% E: e9 b! U' J$ A0 K; Xprint("$user users online\n");: u6 f4 v9 V" ]- x: U
}最终把上面代码写成一个PHP文件如下。
3 k% g4 ~$ |7 Q! z, @* i% t$ d# m! B<?php1 N$ d) I( E6 O2 q) D5 E
//Put your basic server info here
6 l, T. h, r7 M/ u$server = "localhost"; //normally localhost; a( b& U1 i, D% P
$db_user = "root"; //your MySQL database username+ v: ~4 Q' k; }2 Z4 E
$db_pass = "password"; //your MySQL database password
5 c, B  e7 U: i; Z  v$database = "users";- m0 S; t# P# ^4 E% w
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; j& r  }) J* p5 }7 e1 @" ~
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 P  G& ?: \$ w+ x7 X7 j
// $timeoutseconds seconds)* q$ h  `8 r1 j# u. p& M0 J9 s) b
//this is where PHP gets the time
9 O8 ?$ h% i. `7 s2 H$timestamp = time();6 q' l# \2 v) q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* m7 z$ h% {6 z( G4 \: A, z% s$timeout = $timestamp-$timeoutseconds;! B/ }* K" p! c1 g- p" x" s
//connect to database
$ M5 `. e5 E0 Z* hmysql_connect($server, $db_user);4 r- ~& v1 r( v- ^8 ]% \
//add the timestamp from the user to the online list( z2 U. ~' D! g, R7 S( I  C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 ?% ~* K4 |$ h" R1 F('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
8 O1 A" D( k: a+ N$ Uif(!($insert)) {8 I9 c% l+ T# d9 q# N' ^3 e
print "Useronline Insert Failed > ";% ?5 o% W' c% o/ `5 e
}
" g4 z! Z, h3 j9 V; [& Q: S# n. {& R//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) l+ j! {* Z" K
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
; m6 B# D8 }, Zif(!($delete)) {; q) q+ I. p0 m  S- O" W* U
print "Useronline Delete Failed > ";
# K8 D! m% Y* ]) Y( |6 [}0 q6 t4 f0 E4 E
//select the amount of people online, all uniques, which are online on THIS page
# x4 q% A8 y6 X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 h( g/ r9 u3 \( Bif(!($result)) {
% k% }2 B0 Y$ u/ u2 q# Bprint "Useronline Select Error > ";
: S! e! j% u, [/ Z# n5 i}. Q! t. z% a7 q! a
//Count the number of rows = the number of people online4 l) ?$ H* z/ r% Y* w4 @
$user = mysql_num_rows($result);
% E+ q9 n; Q$ o1 l% H9 x5 O//spit out the results
2 I% w& G: ^) {8 `mysql_close();
+ b. z: q. K- i" a) K8 `- |if($user == 1) {! i3 o4 k# k' d) m
print("1 user online\n");
# P. _/ T! d3 G. H- M7 g} else {. K: f% \6 V+ I
print("$user users online\n");
& _5 C! e% i; v3 P9 f7 q* S}1 ~; u4 t3 u" _2 t# |; Q/ F3 ]
?>* Q8 S4 n, `6 W. T. n- S
6 d! o2 ^9 _5 C: r
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 b# f, z% F' g+ a时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* O/ Z0 n' B- H6 x' ]- F
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 |# S% D1 w2 V# d; h
当然啦,这两款主机也是相当不错的。9 e- X% U  i1 j. d; w% q4 _$ P4 t  y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
% m" P) m  E) w& T9 s+ a8 d标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 y1 q2 i- t% T
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. M9 a4 e: a+ t% s1 j空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 m& @5 _0 D; R' V2 C+ h/ V自己加QQ去问吧。

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