返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!4 Q/ W5 w' d) Q7 O6 i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
& F' U. B' Z6 C7 s/ i首先我创建MYSQL数据库表。
% j3 B5 u- t0 t& X6 K& ACREATE TABLE tablename (8 Q8 u8 d3 T0 Q, p# @8 _" @6 a) S
field type(max_length) DEFAULT 'default_value' (NOT) NULL7 l" c' V. i- g# h7 ]( I
}可以使用的SQL语句。
' c+ Q( N1 X! P! ?CREATE TABLE useronline (
4 w  m) F, @& L. Y$ M* Q' Btimestamp int(15) DEFAULT '0' NOT NULL,6 ]; k" [3 N. o# ~5 j9 Z1 u
ip varchar(40) NOT NULL,& w- e: H# M. f" c# ^
file varchar(100) NOT NULL,
/ [  J6 f) e. L1 hPRIMARY KEY (timestamp),
' Z9 x9 G3 @3 [) ~3 ~KEY ip (ip),
! o' G9 }5 ]# yKEY file (file)
+ k/ z1 c9 B4 ^: L);下面我们是PHP脚本,首先我定义MYSQL的信息。
. Z9 m' @" ^2 a- f$server = "localhost"; //你的服务器0 _& b% C4 T8 ]* ]. o2 a
$db_user = "root"; //你的mysql的用户名6 e7 l  G7 A, Y  v4 C2 b1 _
$db_pass = "password"; //你的mysql的密码2 }" H0 n+ @" \+ o8 Y2 D
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; Y( P1 ^. V8 f+ D9 m; Z$timeoutseconds = 300;取当前时间。
% X! G9 e' H0 l( ?% W' m$timestamp = time();上面的完整代码:
, H% A3 ?8 i, [) k<?php& i- [; i3 J- P5 L
$server = "localhost"; //your server  x/ |& L4 o0 t- l- H5 S* I8 M
$db_user = "root"; //your mysql database username
/ `* C! z/ o; R/ u4 y( n3 x$db_pass = "password"; //your mysql database password if any
% b' s1 t# k! u1 J9 T' g* W+ ~$database = "users"; //the db name
: X7 F7 `: v" H- N1 F0 F% O" j$timeoutseconds = 300;//timeoutseconds limit; I7 ?& G: s$ Y6 l% j
//get the current time  z- {. d" i; U  U7 l
$timestamp = time();
. w; z- G. Y0 B//calculate the lowest timestamp allowed
0 }2 a2 @1 w. `! n0 J& y$ L& E* ^5 ?# ]% J$timeout = $timestamp-$timeoutseconds;6 K: c) ^/ h+ |& u& c
?>连接mysql
4 h% R+ g; I  I, lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 S  Q% D" S0 c$ ]* g- H, j+ ]mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接' ]1 w) I4 p8 D. E: G5 N
mysql_connect($server, $db_user);查询数据库的代码:
+ H2 j: j0 t0 j- x  f& A$ v% gmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) t9 B. [  V5 H$ P& g$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' z( [* r) V! g$ r2 f0 I$ D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' Z: I+ N4 K. m& Q0 ~0 @9 L如果用户用错误信息的话,这样处理。
" t5 p* ]- I- v; {3 ]( t4 `if(!($insert)) {
' B$ ?! H! u; o' }. y2 _5 ]8 zprint "Useronline Insert Failed > ";  C! ?: j. T# V5 a9 }4 M
}然后实现当超过设置的时间就删除该用户记录。
5 M9 A$ D3 ^4 ?# h& S7 A- `. ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
5 C9 ~% c4 t  x+ Y& vif(!($delete)) {
; ~% f3 @( r3 e+ h) m1 ^print "Useronline Delete Failed > ";
& l( a1 D: |: N. i- Y( T0 v& u$ A, i}下面我们解决数据库中不同IP的问题
* [6 o- S: `' a$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
  n" N/ l( U% @, |6 c: gmysql_num_rows(query);来统计用户,代码如下。# w& `, y0 L, ?
$user = mysql_num_rows($result);最后关闭数据库。3 k, J! i7 G0 \3 x, s8 O/ b
mysql_close();显示在线的人数。
" k. a7 D9 g' r) Lif($user == 1) {# L3 `6 ?  a: M7 M. E/ H) R
print("1 user online\n");
  w2 d+ e7 O1 i. D9 p5 X  b} else {
& r2 {+ W3 Z; f( n( \) Rprint("$user users online\n");8 F; Y1 X8 i6 X8 g' r0 D) T. ~
}最终把上面代码写成一个PHP文件如下。/ p( K7 a& g( |* p( g
<?php# P1 z" {6 A7 `3 l
//Put your basic server info here
# _1 S9 L( z9 I8 V! l5 x# R$server = "localhost"; //normally localhost+ r$ }/ E! m. \: t6 i; u  h  J: R
$db_user = "root"; //your MySQL database username
- o5 i( G9 ^" @: h& ^$db_pass = "password"; //your MySQL database password
0 ~/ R8 R) @% L$ e0 o3 m5 Y$database = "users";
. d& p* Q' L# D  B3 z( y" j; c$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 A$ E1 r' P1 J9 h3 b8 r. q
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
! Y5 O7 N& e' `// $timeoutseconds seconds)$ b; ?5 ]! H9 D+ X3 p
//this is where PHP gets the time
. _0 i6 B- L6 k) o, R4 Q' j/ E$timestamp = time();
5 B5 ~4 u) ~& z* @9 ?, V//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
+ f# C' k0 m& I3 a$timeout = $timestamp-$timeoutseconds;
; M" i8 [* N" b+ q//connect to database6 }5 |$ J2 [1 e# V9 a: X; e
mysql_connect($server, $db_user);8 c+ P, ^& @) n% P
//add the timestamp from the user to the online list" U+ k, `0 m0 T2 L# k/ y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 F7 F4 k9 B$ o* S* h- o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- L2 f6 S. y5 Q% }if(!($insert)) {* M$ V  @' o; I$ E0 ?  W) ?
print "Useronline Insert Failed > ";' |3 n2 F% Y( V! e
}$ j) r8 B" m& O5 ~4 A
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.% X* z$ T7 a& _# J0 v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" ?( Z( P2 ?1 Y1 q& }if(!($delete)) {2 t; a( S5 f! F. R  B" q7 _
print "Useronline Delete Failed > ";
4 B5 r! \% K! r7 I; W% j% ^}
+ b2 ^& P) U$ f. h* ~3 W2 Q//select the amount of people online, all uniques, which are online on THIS page
6 l5 _0 D: F0 N% A% U- h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' N3 O) }4 h) m. D9 |2 w% [if(!($result)) {
. A/ s. C/ a. A7 K3 tprint "Useronline Select Error > ";7 b7 ?6 P6 w3 T8 F
}
; |0 s; y- X$ E- n//Count the number of rows = the number of people online
" B6 j4 y  ^/ o0 w* V  N0 {$user = mysql_num_rows($result);+ n: P3 g! l8 s7 }' U
//spit out the results
1 H' z! y# |2 l; _" j; v  L3 @( cmysql_close();
* Z! p8 c1 X# B) ]5 n. ]: Yif($user == 1) {
2 B4 c( s; ^. T! @print("1 user online\n");
4 I* F# ]: Q. t  W} else {
6 v2 w! Y7 z) S# S/ V7 C3 zprint("$user users online\n");2 \0 d7 A; \6 ^1 {) B  K
}0 ^, c) c0 I, p# W" S3 N3 ~
?>) S! _( l# a3 n
+ m1 v* W; t1 Z+ f+ U/ u( P
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' O; ]4 j/ L8 N& y! F, T时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
& G4 J5 P: _9 T8 \9 k我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。2 c3 |9 @7 o1 J  _& M
当然啦,这两款主机也是相当不错的。
2 u% [" \9 I1 X  X; v5 c智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 I9 A2 h, a9 z4 ]9 f7 m
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 p! b! Y7 }9 R" \9 d4 n& A提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% }+ w4 g+ x. G9 b: i# W空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# q( S1 k) U( R0 T9 u2 M8 |! @自己加QQ去问吧。

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