返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# W2 o2 v! F4 H& D* M) E我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
1 @8 l6 `+ Z  \1 O6 Q+ z3 _1 r首先我创建MYSQL数据库表。; E5 M- |" V% B7 N" ^
CREATE TABLE tablename (
/ @' g6 K  c+ z: Y1 S+ v" ?7 ifield type(max_length) DEFAULT 'default_value' (NOT) NULL
( O. g( y' m. {- I/ _8 b1 N}可以使用的SQL语句。( i" A) B; n6 z- s1 m
CREATE TABLE useronline (
1 ]* u1 v4 _, A6 Y- X8 O. @timestamp int(15) DEFAULT '0' NOT NULL,9 E$ U. ?6 A6 L+ t8 C
ip varchar(40) NOT NULL,
+ ~  T, v6 S# p& `% k5 ofile varchar(100) NOT NULL,
2 Z# g1 Q: S5 Q9 F% i3 k8 ?PRIMARY KEY (timestamp),1 R5 s$ c9 b: P3 h% L
KEY ip (ip),0 m8 w$ {- @, C' K! Q0 y- L3 X. u
KEY file (file)! W9 k2 X3 `/ Q, [
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* G& F1 p& N! Q' D8 ?$server = "localhost"; //你的服务器
! a6 M* k  l6 ^' b( J; `7 @( A$db_user = "root"; //你的mysql的用户名5 V/ t9 e2 j5 ~) I4 Y9 f/ w
$db_pass = "password"; //你的mysql的密码0 l9 c: G, v" ^% h* `
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)6 R1 O3 c9 c: ^) E9 ?: o
$timeoutseconds = 300;取当前时间。
: \" r* F& x/ W$ r; d/ z3 s" ]$timestamp = time();上面的完整代码:. D# n! f3 w* O
<?php  D6 v5 R3 ^: |0 q6 V
$server = "localhost"; //your server
7 Y5 B* f. |; K3 v$db_user = "root"; //your mysql database username2 g) \) _  l& J% h3 j/ u
$db_pass = "password"; //your mysql database password if any2 l- e) M( t- I1 I
$database = "users"; //the db name
' n5 ]; t: t# h6 G+ Y, i" e6 V  V1 M0 C6 A$timeoutseconds = 300;//timeoutseconds limit2 ~, e0 _8 u' V0 C. H
//get the current time
. j5 ?( d( K& |4 O! P$timestamp = time();
, c/ I9 a" A; _$ L//calculate the lowest timestamp allowed) C: Z9 E) P+ Y9 S( A
$timeout = $timestamp-$timeoutseconds;
' R/ p) n, X+ a/ Q- O7 V+ ^?>连接mysql( L( a$ b$ e6 n
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。. c, }+ C/ `, t9 t# ^' D9 e, O$ L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. `! S9 E" g7 v( b0 ~mysql_connect($server, $db_user);查询数据库的代码:
8 m$ c# M% ^. S$ p0 Tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; E% `5 v+ Z9 e% u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 w6 @  ~1 o+ H
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 a8 t! s+ |+ b- a# T如果用户用错误信息的话,这样处理。, V% ^# }! U: G6 h
if(!($insert)) {5 P+ i; x' Q5 x9 {3 c2 ]# [  N& i3 W
print "Useronline Insert Failed > ";! A# A+ |7 ]2 }
}然后实现当超过设置的时间就删除该用户记录。
. u* W0 M: r; ~* O7 m3 }$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, s& X+ Q- m6 W9 ~if(!($delete)) {
8 E4 I1 f7 ~! x/ ^. s) ?print "Useronline Delete Failed > ";3 {! ~8 B+ t$ n5 }9 k: O5 f* u# g4 z
}下面我们解决数据库中不同IP的问题$ q; z( K* D: H' c
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* M2 M$ A" X. m3 w3 l) F) ]
mysql_num_rows(query);来统计用户,代码如下。0 Z0 ]; n5 Z1 e) g& |
$user = mysql_num_rows($result);最后关闭数据库。5 p! L: \7 R4 t) m5 |# F
mysql_close();显示在线的人数。, r" n! t' D4 |& k
if($user == 1) {
: ?3 |% x/ H5 R6 u9 n! L; ~print("1 user online\n");! h; Z) \; r" G+ H2 ^, r- W3 D
} else {# Y8 x  f/ i( v3 n8 g: j
print("$user users online\n");
9 c, [- u4 @  ~) J$ Y7 R) h}最终把上面代码写成一个PHP文件如下。
4 Y% U( c; E2 K* [- r$ V<?php
; X, \8 }% y) F//Put your basic server info here2 f+ A0 s* N% B0 N  A
$server = "localhost"; //normally localhost' e+ S" a& A! y# c% a- F/ S
$db_user = "root"; //your MySQL database username9 r& u* W6 G) U- O: j  j- d& g
$db_pass = "password"; //your MySQL database password
( f5 t/ K' t8 d, f1 I9 O$database = "users";! h: H- C( J7 @9 P) z. j9 ]
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: [" C4 X1 O. f// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; \4 G. v  ]5 A6 D9 u5 X// $timeoutseconds seconds)
2 E0 D, K+ R1 U4 U. R//this is where PHP gets the time
$ M; V8 c, L" M, g0 J( P6 L$timestamp = time();
8 U1 _# O) d7 z//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 k7 k7 I8 n8 ^8 z7 F
$timeout = $timestamp-$timeoutseconds;' A/ S; ~* D- t0 T) C
//connect to database  n% I- i, w/ _9 Y: Y0 \
mysql_connect($server, $db_user);  X' z. g; U+ c
//add the timestamp from the user to the online list) |* \, S2 e8 m) f8 A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES, l! P; j( M' H, ~" r# K: E1 q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ L) |: v5 y3 h& g$ R( M5 C
if(!($insert)) {% V$ B/ K2 v& D; r4 a. b3 l# L) W
print "Useronline Insert Failed > ";- v8 W5 r7 p- `  W9 [; v. s! g7 q& h: k
}
. p7 ?& z' T, R" f' X% Z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.% Y% N8 L' c, `6 c' G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");" n9 ?+ l1 r' A4 W
if(!($delete)) {
! x: [" Y4 e) k5 m8 S' J' g. [print "Useronline Delete Failed > ";
* e# ~/ W6 x4 e+ a}8 Q6 C8 M" n0 j4 ~4 `
//select the amount of people online, all uniques, which are online on THIS page% w3 o8 q& p  C7 Q9 ^8 d- t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 ^" [7 E3 O4 ]! V% n  u9 jif(!($result)) {9 Q* T* a- n4 `9 M7 F% E4 o0 m+ ^
print "Useronline Select Error > ";$ s; ?% U: ~8 b
}
: \+ q! m" X' H; u; R) y" }6 c2 r//Count the number of rows = the number of people online
' p) b- ]% B# J3 D& e0 P% w& D5 C$user = mysql_num_rows($result);
8 m4 Q; ^9 j) h$ B! @0 P//spit out the results
  }6 Y# ?8 }0 \1 ^0 smysql_close();
( G. \3 b" o& W5 }7 eif($user == 1) {
( {# q$ J4 Y. bprint("1 user online\n");' N$ G' P0 Y( Y, o1 l
} else {
& y4 E% b4 k8 |) h' b# Pprint("$user users online\n");
% ~4 B" S; C- ~# J}; ^3 M% B# m( @$ j, D5 u7 T
?>0 q( `( O( l( f+ w
( q- O+ K' S3 C8 b# f  b& C
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 x& h: }0 t0 T# W' G时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' H; u& p  J8 s8 a我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。. S0 u% E. s1 ^4 f1 K1 U
当然啦,这两款主机也是相当不错的。( Y- W- q- l. Z3 t4 {$ ]7 L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ w0 r( V$ z  J9 c9 D* K标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
5 t6 k2 Y4 k9 v1 t* D, P' W0 @4 ?; c. H提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 y; {9 D" p+ {' R, ?, \
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=551 f+ V, z9 ?: y- F+ h6 M. K  x+ p
自己加QQ去问吧。

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