返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 x$ q" Z' b  B! N* v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' ]# b7 Z+ S! ~0 C- K
首先我创建MYSQL数据库表。3 J6 ?+ u" W+ V8 j" h( l
CREATE TABLE tablename (( l7 }0 Q1 r+ \  Z9 @
field type(max_length) DEFAULT 'default_value' (NOT) NULL' t6 q) N* G, r- \
}可以使用的SQL语句。
( G) D3 J2 Y" p9 Z! y( _% }CREATE TABLE useronline (
  m8 m0 [; \7 `" |" ttimestamp int(15) DEFAULT '0' NOT NULL,
# p1 }' i0 [8 l$ Tip varchar(40) NOT NULL,
% q3 |, @( b6 a4 i1 ofile varchar(100) NOT NULL,0 `2 T/ _, c& I4 Y8 M4 P( ]3 C, \
PRIMARY KEY (timestamp),6 n" t. L3 O& |
KEY ip (ip),) W6 I& Y! V) F
KEY file (file)* Q; U3 ^: c- Z4 ]. n
);下面我们是PHP脚本,首先我定义MYSQL的信息。1 V, n! O  u" g
$server = "localhost"; //你的服务器% d- w* Z! F3 B+ ?- ^
$db_user = "root"; //你的mysql的用户名  F  u. Y) C$ F2 Q: _' v
$db_pass = "password"; //你的mysql的密码" s/ l$ y4 B  a- y$ Z( }
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)5 z3 t& N- }+ H6 P- r
$timeoutseconds = 300;取当前时间。# c4 c* D) K; T5 }$ }
$timestamp = time();上面的完整代码:  m" f2 A. ~4 J* B3 e$ C
<?php1 g, Q0 c0 ^3 ~$ p
$server = "localhost"; //your server
4 Y/ v. a! `: Z- X9 N7 X: f* _9 E$db_user = "root"; //your mysql database username% F' G: v7 |/ c* T0 _+ v6 `
$db_pass = "password"; //your mysql database password if any( o' P+ `$ {# J7 F3 r
$database = "users"; //the db name1 t7 E- s/ {' s
$timeoutseconds = 300;//timeoutseconds limit
0 {7 T1 y  e- s. V$ z5 H! ?: ^9 ~5 s; p//get the current time3 V/ p5 d5 \6 k* m% T. R
$timestamp = time();
& h) N3 u/ O4 D  ]//calculate the lowest timestamp allowed: h) [# q6 c' H0 @0 T
$timeout = $timestamp-$timeoutseconds;' Z* x0 M3 u. u- L6 k6 F
?>连接mysql
: y4 U! j$ x+ I. g, _) N9 p+ `mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
. P7 u- i$ b6 [9 b+ u& Dmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接. R6 c% Q( O* L9 a. w7 r# I
mysql_connect($server, $db_user);查询数据库的代码:
) F* D3 m8 R) P% z2 U* O9 P, Jmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; F% [; F1 S' K, f  O4 T/ C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
! M. z; w1 `+ N$ g8 B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" P3 X' |% a7 B1 x
如果用户用错误信息的话,这样处理。# M2 s" e9 g5 v5 H7 d
if(!($insert)) {
. }/ b+ X, q" N: v8 A5 Zprint "Useronline Insert Failed > ";  b+ T7 b/ p; a% k% @0 ^! M' w$ j& X
}然后实现当超过设置的时间就删除该用户记录。5 x3 e! h4 v# s2 O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。3 m6 L3 z/ ~# K9 v3 R: [" S
if(!($delete)) {$ d* R7 q) Z# l4 i) L/ T) o1 K
print "Useronline Delete Failed > ";$ v$ P; ]5 ^# ~% {4 j" I* O
}下面我们解决数据库中不同IP的问题* P& U6 H1 R5 |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 q( _0 W( s8 S! i0 f
mysql_num_rows(query);来统计用户,代码如下。
5 B9 O, ]# R" w5 K' O3 E  R/ D$user = mysql_num_rows($result);最后关闭数据库。- l5 e$ q, M6 F6 l! i  A9 R" \
mysql_close();显示在线的人数。0 j6 |9 {" ~; W9 I' G  Z
if($user == 1) {
; w8 P* r( j( `8 d: ^! Hprint("1 user online\n");1 c* X/ P; R! A8 n# H; r
} else {
9 S  X. C  M& }1 ]4 B/ h8 nprint("$user users online\n");
0 l7 p/ K& c, H9 V+ p& G}最终把上面代码写成一个PHP文件如下。" g' w8 M: K9 M5 G# x
<?php7 E( z1 ^% K% T! H9 N: O) k  X) T
//Put your basic server info here, W; h7 t4 R# N) L' _
$server = "localhost"; //normally localhost
# o2 h5 X+ n: ^$db_user = "root"; //your MySQL database username
6 B! \3 `  W( F6 q9 G. a$db_pass = "password"; //your MySQL database password
! J' N: v" a! j. _* [) `$database = "users";5 j+ ]: M, R/ k  r
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are3 R7 o0 n7 _2 t4 w& V/ Q! Y
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
$ B1 T$ A& g* A0 q1 g2 Q* w// $timeoutseconds seconds)
" g" C  X" T6 L. j( M& U7 n( d4 @//this is where PHP gets the time7 U* h3 p/ W( |1 r
$timestamp = time();
3 A5 s8 K$ a; X- J. N5 I, z- J0 J//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 W* s% K! l& T
$timeout = $timestamp-$timeoutseconds;
! t  _6 P# Q; d% V2 g//connect to database  n" V4 Q* N- L; g. V) y5 S
mysql_connect($server, $db_user);' z# W2 d: I: Y. b7 j* [
//add the timestamp from the user to the online list
- z8 @. E& }2 N3 n' E5 [$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; N$ ?: i6 X, p('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, v0 @. U0 b. v+ Rif(!($insert)) {% O4 `/ Y1 z# q% R5 F
print "Useronline Insert Failed > ";
9 \, k: P7 P( t. I}
4 V; c; x& \( \$ L//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
9 ^0 W$ W5 ~( z. D8 U1 t$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");8 ?1 J; G4 t. B3 _1 i  r4 k3 k
if(!($delete)) {
1 {6 E( L/ p2 \6 Xprint "Useronline Delete Failed > ";
& j% K& P' o8 |, N$ a+ f+ T}: K# m; e- V# P. u) Z' q5 m. e
//select the amount of people online, all uniques, which are online on THIS page1 y$ ?4 ~. U+ P" {5 N
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" m5 S4 w! l( X5 E+ z  H4 Kif(!($result)) {
4 V1 V. ~$ c$ kprint "Useronline Select Error > ";7 P& _: P# o5 y$ [+ G0 m
}
" i3 R" u( M; L; q; L//Count the number of rows = the number of people online
) k6 L! T- R7 W2 Z$user = mysql_num_rows($result);8 B1 K) v* O" ^6 K/ w
//spit out the results: I. m# @( ]. j; z2 }# c
mysql_close();6 ~# D  d0 k$ y* N
if($user == 1) {
: p; z4 b0 t! G7 yprint("1 user online\n");
+ F! F  ]8 D/ @) |; D. P3 E. X$ `} else {+ V" C4 k$ O, m; m- ]# J% f
print("$user users online\n");1 R. m$ ^$ P- T6 G8 R3 ~* W1 |# O3 O/ z
}' D$ D& j; |, `
?>& V" j/ [/ e* v' o5 E

' x% \/ E" a( e以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。4 w& _( G& `. U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. E% q% G. w- y
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* l5 D: r# Z; q; U6 z
当然啦,这两款主机也是相当不错的。
7 x- P% ?( [0 @  b4 V' p智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年; [" s8 ~/ U2 c7 j1 }! n) M5 B
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 ?" Y2 O0 `' s" W" r0 e: E# J' K: s
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 z4 g( I7 z' u0 |) n; a4 z
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
) p" ^3 h( d7 `$ _自己加QQ去问吧。

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