返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!( a0 K4 a) T7 |( V9 |
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。* @. S- z; D' k
首先我创建MYSQL数据库表。$ G% y2 ^+ f* Z
CREATE TABLE tablename (
( S1 d$ {3 @0 yfield type(max_length) DEFAULT 'default_value' (NOT) NULL' P# U+ v" O( r
}可以使用的SQL语句。
. e) R" `: U" U1 q0 i$ j- ?CREATE TABLE useronline (- g& R# m* ]# w' ^
timestamp int(15) DEFAULT '0' NOT NULL,6 S% L: v4 Y1 [8 e' s% }% \' ~
ip varchar(40) NOT NULL,
5 r1 {2 o( J; V# ?file varchar(100) NOT NULL,1 V1 `( _' S" f/ b9 N) E/ A
PRIMARY KEY (timestamp),
# ]0 o" A3 C' ~3 k- \5 x$ s; oKEY ip (ip),6 Q, @9 {7 F4 L4 M! R0 d1 }
KEY file (file)- S0 n- M+ ~6 r# _+ S5 U
);下面我们是PHP脚本,首先我定义MYSQL的信息。5 a* q+ i6 H* O0 I% x
$server = "localhost"; //你的服务器
2 T7 C9 H, S3 L+ W$db_user = "root"; //你的mysql的用户名# V6 I1 L3 O, }
$db_pass = "password"; //你的mysql的密码5 S+ X9 e5 w3 t# \' \* v" x
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% w9 Z4 a2 Q% e0 m, @
$timeoutseconds = 300;取当前时间。
: M1 ?- m3 k' W* H( e$timestamp = time();上面的完整代码:. m  K7 E9 J* K9 j: u1 }
<?php" \" n- f) V9 z( g! M0 r
$server = "localhost"; //your server
3 x3 X; A( W* t# }/ E5 Q0 Y7 Z$db_user = "root"; //your mysql database username
# l) V: \! m9 }* ^$db_pass = "password"; //your mysql database password if any
$ z7 t2 V$ Z& K! B  d+ D$database = "users"; //the db name/ O! B5 `5 q$ g8 E4 V5 F( P
$timeoutseconds = 300;//timeoutseconds limit
! e( x" i* J& P2 b1 ?/ A, E//get the current time" h9 V) ^5 o& m3 d( o
$timestamp = time();8 i; o# s" g2 ~: f0 j" r
//calculate the lowest timestamp allowed7 l2 D2 R6 T$ E% b8 H# F
$timeout = $timestamp-$timeoutseconds;. X6 F' I, h- O
?>连接mysql6 E- y& }% k5 b, V1 u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。  d0 M; K  M; [
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 y) k( `* q' l# b+ S2 F& y
mysql_connect($server, $db_user);查询数据库的代码:# c. q& }6 `. ]% X& H3 V+ L/ i
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
  }/ i, a. H0 v7 T5 ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 T: l- n9 q7 W
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ b$ |2 D' D: w* Z" c如果用户用错误信息的话,这样处理。2 C  }: W. j8 Y( c- m
if(!($insert)) {
, s5 e: p# v. kprint "Useronline Insert Failed > ";
2 ]) @( L3 b% {6 f: B1 K# s+ {8 _1 ?}然后实现当超过设置的时间就删除该用户记录。) L: k7 S' Z- K9 p
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ o( Q. w/ p% R$ H. |
if(!($delete)) {  [5 x& G' G8 d3 k, t1 r. U& p; v
print "Useronline Delete Failed > ";
9 ?1 b- L. t: `) A}下面我们解决数据库中不同IP的问题/ ?; f( R) j, Y
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 o' ~  ?1 G8 @1 b, V0 Amysql_num_rows(query);来统计用户,代码如下。
7 m9 s; p2 W) `( |! D% X$user = mysql_num_rows($result);最后关闭数据库。
1 ?" _8 Q) O+ o. ?1 X$ K6 H3 emysql_close();显示在线的人数。
# C6 \3 h( h2 B) `! A; V2 g2 Lif($user == 1) {
$ S8 ?# b* _0 V3 w# zprint("1 user online\n");# Q+ L  S: ?5 v5 \+ X2 Z
} else {
; u% ~6 A: u$ `print("$user users online\n");
* i- ^1 s" m2 m2 t}最终把上面代码写成一个PHP文件如下。% p: z! v( _6 v9 S0 F
<?php9 J8 O: B$ Y; Q+ A3 E: v  Q
//Put your basic server info here
) G* E( S9 [; ?3 H+ v$server = "localhost"; //normally localhost
3 _' H6 ?* S, r% P  Z$db_user = "root"; //your MySQL database username% q8 u8 b8 M- p# A: L$ E
$db_pass = "password"; //your MySQL database password
* v. H2 ]( v$ i1 i4 k. x) ]1 ]5 r$database = "users";
  r/ A. q; s) g7 }7 ]/ A$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! j4 X, i2 S% x8 Y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 F5 u# C6 z) ^" |6 V2 S& Z// $timeoutseconds seconds)* _) e4 Z- ^5 i( z  r/ S
//this is where PHP gets the time9 Z  u* p5 L: I# c! S
$timestamp = time();) W+ J/ o; i& g# U: ^) r: P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed( Y% R1 w# s: U) O9 Z7 k
$timeout = $timestamp-$timeoutseconds;7 x; X9 a+ d. \& e
//connect to database
% D" M) c$ g8 H( W/ B; u( W5 mmysql_connect($server, $db_user);1 I6 _3 [% A* ]
//add the timestamp from the user to the online list" R  S. z* Z* J* A5 L
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 L6 a3 V" R. q5 n. }
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 G. N. X  j8 Zif(!($insert)) {! |# _5 g2 d+ X3 y7 ]
print "Useronline Insert Failed > ";  M/ S! Q0 e; l& M
}
* r$ J6 G$ Q* ^, C9 O3 ?* p' f0 t8 M//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.1 K3 ^7 x$ V) p# H: A
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");5 y& D$ `: Z4 h: A
if(!($delete)) {/ Q, ?' n( C8 r
print "Useronline Delete Failed > ";2 p  B6 \' r% w! ?
}) D' |; n7 ~: E  U
//select the amount of people online, all uniques, which are online on THIS page: r# v) ~" g9 ~
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
: j2 P) e* y6 G! wif(!($result)) {' g8 P6 r6 G, Z
print "Useronline Select Error > ";
5 k- o& C" s( F! E" W}
6 T8 f6 S2 i! Y) w//Count the number of rows = the number of people online
/ q! J. b4 m, R: b0 D# i$user = mysql_num_rows($result);/ o0 e' _2 ?' z5 I, X
//spit out the results9 p0 F' G6 h$ l; k4 I! h4 w3 q$ `
mysql_close();
4 d! P5 ]4 R6 T# tif($user == 1) {; H3 Z" j7 h2 l& v
print("1 user online\n");
& v! v8 d) m! e2 J1 j3 s% N} else {
% y, V; E! S; m) g" D/ I+ `print("$user users online\n");
0 |  a& H' O- n( Q) f}8 r$ v  d6 ?; p7 H
?>8 K6 U( o! G% E- d* k4 p

) Q6 S) k3 l) l' N6 p3 }" I以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: X* X4 A3 Q9 K/ q时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。3 y8 s+ P" r( m9 j2 i
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 Y8 Q  {  Y, i( o当然啦,这两款主机也是相当不错的。7 q- l8 e0 w! a1 e
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年. i2 q: G4 t9 }) {% \
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年+ r- o6 W  _8 X% W4 e7 @* p
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
3 O: N! b) F) P( b- d3 S空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) o' Z# |/ Z0 L$ t( @
自己加QQ去问吧。

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