返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
# u3 [0 B3 J+ u1 ?3 l我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。* K. v+ @% b2 x  Z" I
首先我创建MYSQL数据库表。
6 _9 X2 ]3 q3 A6 Q; G- ?- V4 WCREATE TABLE tablename ($ g8 Q9 [4 S$ {" o: ]2 p$ y
field type(max_length) DEFAULT 'default_value' (NOT) NULL8 X% p, Q7 j3 d+ w2 `' q+ Q1 n# I
}可以使用的SQL语句。3 Q9 Q9 {: m, Q4 L
CREATE TABLE useronline (6 L+ A# J1 J" X* o: Y
timestamp int(15) DEFAULT '0' NOT NULL,2 x- }; \! z8 G, D! O1 }
ip varchar(40) NOT NULL,6 s( F2 e8 x0 O$ X% E* L9 e6 `( s! I5 `2 A
file varchar(100) NOT NULL,' A6 R. W9 u) R3 a
PRIMARY KEY (timestamp),
2 O) R0 B* u4 L6 k. \& e4 x1 JKEY ip (ip),* p1 Y4 l  S0 R8 m; c. y
KEY file (file)
# e$ K( I* S! N" H);下面我们是PHP脚本,首先我定义MYSQL的信息。1 Z! x: O9 c+ e
$server = "localhost"; //你的服务器, }5 F. C9 z8 }% t
$db_user = "root"; //你的mysql的用户名
* l  B4 P. ]' s: @% @& l6 N, T$db_pass = "password"; //你的mysql的密码8 j4 Y0 [6 c8 K! e
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
% U( i4 ^! @& W6 M$timeoutseconds = 300;取当前时间。7 t3 A4 B" Y* f2 r! V2 B
$timestamp = time();上面的完整代码:$ Z) X5 o. q5 x3 f
<?php+ R& O" i: d; G- |( \
$server = "localhost"; //your server5 ~: P  O/ y5 h9 D; K( M, V. t
$db_user = "root"; //your mysql database username
. ~4 g- r7 i+ t$db_pass = "password"; //your mysql database password if any
8 D/ R. y- }/ T* q7 R$database = "users"; //the db name! Q! p+ d% n6 @* k5 |* ?
$timeoutseconds = 300;//timeoutseconds limit/ l' `# T( P5 I9 X3 k
//get the current time
2 X9 g% u4 `" s$ \  k1 ^$timestamp = time();
: }: n5 S, T3 b" I6 g//calculate the lowest timestamp allowed8 L+ n/ D& X- t
$timeout = $timestamp-$timeoutseconds;
2 r' `0 F8 `$ \" V( o0 s; o+ X?>连接mysql% J$ k; R% P3 g. `4 o
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 w, G- k- j$ \0 [0 J/ X" y
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接7 x8 k1 ^( g. b* b+ [4 n* ~( I
mysql_connect($server, $db_user);查询数据库的代码:4 W# M3 p9 `3 J, v% _
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
/ O' T3 N  |# \7 j+ g1 _6 z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ n' R- l& J; j) ]' K7 K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! M4 }, B4 S$ p3 P+ e- R, F如果用户用错误信息的话,这样处理。$ b% e* W9 Y3 ], M: t7 N" L
if(!($insert)) {* R. V$ \" T+ a" q  H
print "Useronline Insert Failed > ";
# l& i( ]0 P+ n; I( U}然后实现当超过设置的时间就删除该用户记录。
; g/ i  E" J# I4 b$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% {/ n9 \# ]: p, Z
if(!($delete)) {% A& r# @, N/ W% P
print "Useronline Delete Failed > ";% u! C; r9 @) L4 s# J7 U; M
}下面我们解决数据库中不同IP的问题1 A1 r' w( ?  G% Y2 r9 D8 _0 u" `
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 c: l7 I! S) Omysql_num_rows(query);来统计用户,代码如下。$ l; q& |( C$ N) r, J
$user = mysql_num_rows($result);最后关闭数据库。) z9 y7 I' z7 Y/ f
mysql_close();显示在线的人数。* v* ^) c: m% _# n6 U$ W( n) w
if($user == 1) {5 G0 a$ }- H3 V( \2 i  [1 l
print("1 user online\n");
# N1 \" Q+ n& w" Q; g( \} else {0 p4 b0 u; N3 D! q
print("$user users online\n");
8 X: `2 I5 Y0 l" j3 }}最终把上面代码写成一个PHP文件如下。
1 q3 s2 [7 f' O. L: N# t6 f5 C<?php, x) `: h2 D/ g3 s, M+ P  L  I
//Put your basic server info here9 s. U6 P& R; ?; f/ {9 b3 d
$server = "localhost"; //normally localhost
1 `' x2 H7 r( Q: ^$db_user = "root"; //your MySQL database username( j2 H( @4 y$ E# k( G2 s4 d
$db_pass = "password"; //your MySQL database password
# T, Y- M. @1 L. ?$database = "users";6 W& q0 V$ i2 L- b3 |
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- W! }  u1 Q2 Z  x/ ^3 k1 S
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 z( ]) N- _! s: t
// $timeoutseconds seconds)( v, u2 u' u1 |' ]6 A5 L( n: {
//this is where PHP gets the time
* |/ [8 D' y+ x8 h/ s$timestamp = time();8 U# l& ^* J; y' t" {# S" ]; _
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* j  I" ?* d- j  a6 {; Z$timeout = $timestamp-$timeoutseconds;: Z% {) _5 Q- g4 Z
//connect to database; k! c8 J6 @5 X4 ]( T5 H
mysql_connect($server, $db_user);8 T: k7 ]: Z: G8 _
//add the timestamp from the user to the online list
* `2 i8 a! v7 H9 H- v$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 b3 v9 `/ V- [7 T  J% L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- ]% x5 F) j! p. [5 e% b2 x/ v) ^8 n
if(!($insert)) {
: T& P/ J& x+ {- i( H8 i6 Tprint "Useronline Insert Failed > ";+ w) m! X& y# p" W) s9 @
}3 K' p+ n; P4 M3 `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' t2 b) u  t( ?. ?& i8 X4 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 B, a% T) D/ _0 [" N# u4 {* T" `
if(!($delete)) {* ^6 T- x/ _" N8 g6 S* y
print "Useronline Delete Failed > ";, \, p! ]5 G4 a
}
: X* G) O$ U. c, ~9 v6 D, G//select the amount of people online, all uniques, which are online on THIS page4 ^+ U1 U, S: l- t" c" V
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");; ^$ h! s3 f2 K. q
if(!($result)) {7 P6 W3 c3 i) A4 @
print "Useronline Select Error > ";
1 e/ q* X$ r$ @: a# }}
' b0 V$ W$ y/ y7 e/ M//Count the number of rows = the number of people online9 u( f; a" a5 m2 n  g6 {/ Q
$user = mysql_num_rows($result);
; b5 s4 h; h3 K//spit out the results
) Y. P% ]2 A  c; d' k/ ?mysql_close();
  L, V& j+ {$ D) q- y. sif($user == 1) {* t, B" a- k0 q/ a: U/ x2 A
print("1 user online\n");7 r6 x( k2 G$ i/ s
} else {* B0 W! v! Q0 V, x2 L$ K( K
print("$user users online\n");  h& b! X0 A4 l
}( ~4 m' a: p$ C9 C: D
?>9 ]* s8 E+ l6 ?) F" K* U* B" D2 O
( k% @: r  R4 V6 V# D6 d
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。5 w  s$ C" @, Y! N
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。1 C1 q& {7 X6 g* ?- W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* m$ a0 Q. ?0 a3 S3 C0 \, Y* a) A
当然啦,这两款主机也是相当不错的。* }' T; g( l' B) v6 a% w0 [; n+ {
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& ], p1 K) r9 F8 c; f7 d标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( n2 n- Y& h) @: `7 @  ~
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
; A9 R+ C0 w1 t7 u7 I1 e6 N' |8 ~' t空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ x& f' s! f, `3 D+ _自己加QQ去问吧。

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