返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 K3 x- x: ^; R5 _0 I
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。  |( g. l& K! _4 Z3 e4 U- N) x
首先我创建MYSQL数据库表。/ \. e" I7 u7 m& Q" A5 l
CREATE TABLE tablename (- M% g: e3 j6 z9 F
field type(max_length) DEFAULT 'default_value' (NOT) NULL: v2 F( {7 A& Z+ O8 k
}可以使用的SQL语句。
) b6 T8 Q% Q) a% a8 c- M- ICREATE TABLE useronline (3 x5 W# s' b5 b0 ^6 o: f- X
timestamp int(15) DEFAULT '0' NOT NULL,
( Y7 v. j( E/ l/ ]9 s! Cip varchar(40) NOT NULL,
. U+ v: f+ V# ^file varchar(100) NOT NULL,- H9 T4 B* \3 B6 F2 u
PRIMARY KEY (timestamp),
. L& z: u& w( p) }6 T% p4 IKEY ip (ip),
' ~) K' d  H8 w. @4 |5 _0 m$ J- _KEY file (file)1 _( H* s+ J1 {. f+ E# R- G
);下面我们是PHP脚本,首先我定义MYSQL的信息。, L3 }0 Y, X/ n
$server = "localhost"; //你的服务器
# X3 k4 I( a7 E7 e# w$db_user = "root"; //你的mysql的用户名
9 g9 G4 l! g6 O; M0 t( T8 ~; S. W$db_pass = "password"; //你的mysql的密码
" G2 R" P$ p5 O$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)6 t; J+ k2 ]  R1 }" z$ c
$timeoutseconds = 300;取当前时间。( ~7 H0 H4 I/ x# m: l3 t$ \
$timestamp = time();上面的完整代码:
& n5 O+ t) C, l" Z6 H: O6 J' C<?php
" h* G9 u& _3 l6 G. U, b( a4 U) s9 {% ?$server = "localhost"; //your server
/ \6 G  d6 m6 ~$ q$db_user = "root"; //your mysql database username
# p( ~( ~. a# X. J$ [* U$db_pass = "password"; //your mysql database password if any
, i3 l3 W6 W# k$database = "users"; //the db name$ O2 d4 M( x+ v( ~8 O& k4 T% X
$timeoutseconds = 300;//timeoutseconds limit3 c9 r0 C* l4 q4 f, `! S- l8 i
//get the current time
' ?2 y5 m6 G# r9 M  s: w' q$timestamp = time();# ?2 Q" K3 `: F5 o! q/ n
//calculate the lowest timestamp allowed
! T5 W3 n, l  q- Z* J* T9 T0 |$timeout = $timestamp-$timeoutseconds;
* l" l7 T9 f# }?>连接mysql
! t4 n+ L$ v- F: v* a6 w/ Mmysql_connect('localhost', 'username', 'password');也允许使用变量形式。( p! m! W- C2 H6 E; A2 @# i
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接  ^7 u2 Z2 E8 l' M! C5 O
mysql_connect($server, $db_user);查询数据库的代码:( N+ E$ Z$ F  a0 ?
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! o* [) ^, X+ \+ Z2 C4 r
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES  K- y2 A* e( p: f
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" m$ u( Y0 k3 L3 J+ G" t
如果用户用错误信息的话,这样处理。
7 R+ V: x4 y# o* nif(!($insert)) {# X: B8 G, h  o
print "Useronline Insert Failed > ";
2 {0 y+ M9 S/ K3 p% r. }, f}然后实现当超过设置的时间就删除该用户记录。5 Q3 t% h! M7 @. V6 K' [' t. f
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& t6 p6 x* ^; r  N$ e! Gif(!($delete)) {; }8 o1 p9 j" D1 a5 x
print "Useronline Delete Failed > ";% C  k3 @2 i+ h3 `# p: B
}下面我们解决数据库中不同IP的问题% ]5 F+ _* H; K* o
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
# @" @' |! C$ T8 Z. F7 H0 @) jmysql_num_rows(query);来统计用户,代码如下。
7 M4 w1 p2 i& j# \$user = mysql_num_rows($result);最后关闭数据库。; d) ?( P7 }1 i: k( j
mysql_close();显示在线的人数。  t# E: d# q$ U# g) A  D
if($user == 1) {1 G. U- j) |- Z3 s# u0 X! R4 \
print("1 user online\n");+ n; e, p) V& ^0 k' h7 s
} else {# u$ t; d0 o+ c+ ^& j% l
print("$user users online\n");, W. P4 H4 H0 ~, E. e; t) M
}最终把上面代码写成一个PHP文件如下。7 x& C! b; t" |' s
<?php
; L  b! V2 Y% {- j) e//Put your basic server info here; s- ^3 \) r/ a$ e3 c3 ^
$server = "localhost"; //normally localhost" M, D! G% w; r( z3 g
$db_user = "root"; //your MySQL database username; G) I5 ^% r+ c+ t
$db_pass = "password"; //your MySQL database password) ?2 H2 F& |4 P! k# ?9 M# M4 }
$database = "users";! j, X- b" q; b" E* G
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. o: G% @) h* X. M
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last% y5 n' n3 q# j$ Y$ j
// $timeoutseconds seconds)
* n& f. ^) g3 ]( c" x9 k/ M//this is where PHP gets the time
+ q% `/ Y- u. j; Z$ M* ^- r% g$timestamp = time();
. f6 U, n% b6 Q/ c8 \//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 p9 f9 [0 E$ l; e$ A
$timeout = $timestamp-$timeoutseconds;
+ s, D' {" l* B8 z//connect to database
" [  z# a. |0 ?4 N6 G, \+ A! q& Umysql_connect($server, $db_user);9 C0 X* w$ s  g' g( o1 `2 b1 Z
//add the timestamp from the user to the online list
& M. j( ^) o. }! g3 {$ i5 z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& l8 ?0 [' |5 o5 \('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) a6 k3 Y! i8 w% j, g$ t( ~* gif(!($insert)) {' M9 [+ a& t% y5 \5 C( l7 F  s
print "Useronline Insert Failed > ";
% F7 D) j8 K6 D5 X}
/ I' n6 m9 J8 e- ?; v$ [" E  h//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$ P6 f) R0 \# x8 m- |# a$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) ^+ {8 ]/ ?. x/ {" L! lif(!($delete)) {' \$ V4 v' X# l! U$ J! u+ Q- T
print "Useronline Delete Failed > ";/ G/ [3 X; M' f  A  @- _
}
# @* O# m. ^/ G5 x/ E6 o//select the amount of people online, all uniques, which are online on THIS page
6 ?9 I0 ]2 K" V7 K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
, M2 V, G4 ?! n$ Qif(!($result)) {
8 B- z- ?# ]# s* Q! X; yprint "Useronline Select Error > ";- J. L) y0 G, f, C3 ^/ ?
}: L: x$ g2 o+ ^% |
//Count the number of rows = the number of people online
' h' N7 F9 j- t7 q+ Q& {$user = mysql_num_rows($result);7 B" P! s8 i& k) T# f6 W' }( ~
//spit out the results6 H8 {6 s0 Q- T; `. B
mysql_close();7 f4 h' ~( |- I" t) @- ^
if($user == 1) {* _8 S+ e8 W5 U0 _5 U
print("1 user online\n");" c5 @9 \) Q3 H9 a8 R/ p. D
} else {% M" Y2 U! T+ v- A8 g0 s& c- h( S
print("$user users online\n");, c8 d2 j% g! Q
}" r2 [1 x2 k- M; Y8 g. `6 y
?>
( r. v1 y: k3 ]2 B
- g, {+ a) H% b1 @以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 ~( j+ t! r3 ?& h$ Q# E) e% q
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: h. y0 E. w4 U# V% A) X! ]我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。0 H0 U; \6 b' P8 |- B& G
当然啦,这两款主机也是相当不错的。2 c* f! k7 T: F4 \1 w) j3 |  Q! X$ U
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! S3 p+ ?: ?1 E: a* m' s
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 f' m2 H  n! ]
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ * s2 s) f' K+ [& K5 e
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=552 D; L- {+ ?$ S& g1 q  j% ?  F! N
自己加QQ去问吧。

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