返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!2 h1 a9 c4 |1 k9 K
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
% s9 Q% w6 Q  e8 t0 X9 ?% p首先我创建MYSQL数据库表。
+ `% z* Y0 d3 v& @1 @& [. hCREATE TABLE tablename (
# l, _, `' b3 ~6 O3 I: _field type(max_length) DEFAULT 'default_value' (NOT) NULL6 ^$ j$ W+ h% P" v
}可以使用的SQL语句。
4 O+ O, @6 ?- `2 L4 eCREATE TABLE useronline (
& w" S! G7 k, M2 g1 j; Wtimestamp int(15) DEFAULT '0' NOT NULL,
) n8 W2 @$ t5 }8 h' E: Dip varchar(40) NOT NULL,
4 P3 Q( F5 d  F7 y) `* L$ dfile varchar(100) NOT NULL,4 }# b2 l* j# \
PRIMARY KEY (timestamp),
6 @) t- G' ]4 h) ?- O* R* @KEY ip (ip),3 r! n$ i4 a: @# ^+ q
KEY file (file)# j. `2 Z- J5 m. t& J4 ~& [! }
);下面我们是PHP脚本,首先我定义MYSQL的信息。9 N. z7 E, T& }0 p$ B4 m4 }
$server = "localhost"; //你的服务器# ~2 |9 D$ f. x' ~
$db_user = "root"; //你的mysql的用户名4 h3 E4 r& n/ Y( e6 o
$db_pass = "password"; //你的mysql的密码: v/ s( e- I% F3 O8 z# Q( s
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
  ^; W' h& n8 j9 u; Q* j& T( V0 ~8 E$timeoutseconds = 300;取当前时间。
7 r# l% Q- t- t8 \- y. H$timestamp = time();上面的完整代码:. k1 i* S, ~% R
<?php
/ ]/ d" O% Y6 r$server = "localhost"; //your server
6 e0 g4 R( h0 X, S$db_user = "root"; //your mysql database username& @# ?7 N$ k9 ^" q0 A; i9 s/ ~
$db_pass = "password"; //your mysql database password if any
6 o9 o( n: u" `! n/ M: j$database = "users"; //the db name
% x5 n2 @! L4 t2 C# I  h1 o$timeoutseconds = 300;//timeoutseconds limit/ [: F/ {# P& s8 C
//get the current time
! T! C, R; c* f( b) d$timestamp = time();
- V" e* y# E( `+ j3 k5 W! G//calculate the lowest timestamp allowed
" @$ p& x: A. Z( X6 I. R8 O$timeout = $timestamp-$timeoutseconds;
6 ?6 |, {0 f" n# L, h" p?>连接mysql
$ {: {+ V4 a/ n2 [& D  t' V* {mysql_connect('localhost', 'username', 'password');也允许使用变量形式。1 X. R% T$ Q9 F- b! Y+ D+ Y
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 J/ B% U$ f  emysql_connect($server, $db_user);查询数据库的代码:
2 \8 C+ p1 F+ pmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# O) d% }6 c# e) m9 O! Q8 y# x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" `/ Y/ t- N5 i. f' i- P('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( |' ~3 F3 {/ c, V9 e- d6 e* q; l如果用户用错误信息的话,这样处理。1 f  X, V# Z3 U! g7 d
if(!($insert)) {
4 v( y; z! V* b" ]) J" g; aprint "Useronline Insert Failed > ";
0 l7 a2 m/ L) `}然后实现当超过设置的时间就删除该用户记录。
1 S) k6 W. _# b# `8 Z% L$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。  V+ o6 r- p" ~1 c, S0 S
if(!($delete)) {
; [( m! _* q1 q6 s8 P- ^$ Gprint "Useronline Delete Failed > ";3 v2 i& x6 l! a9 t
}下面我们解决数据库中不同IP的问题9 s* b8 n8 T! q# ]  [6 Z
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" t- H& ]; w$ b' D  k  D! @
mysql_num_rows(query);来统计用户,代码如下。2 s, K, @- b) y' A* {) U. X
$user = mysql_num_rows($result);最后关闭数据库。. C& m; A( E" c3 |, b7 W0 i! ^
mysql_close();显示在线的人数。" [3 ]. D: [+ y, n0 z- O1 K
if($user == 1) {
& Y* z/ ]3 z8 ~, n$ K) u5 Zprint("1 user online\n");4 J* e# g* l+ q2 g. T, o6 m
} else {
! V8 _' |) t' M! d8 Eprint("$user users online\n");8 p0 X! n- C" v# L; \
}最终把上面代码写成一个PHP文件如下。6 o; r- ]" ~  o; s8 M
<?php0 f( Y- o; c. b( u; ^4 f
//Put your basic server info here1 ]* @" w" z8 |: y2 k/ x8 k
$server = "localhost"; //normally localhost
5 z* a' z6 @! n$db_user = "root"; //your MySQL database username7 J# M6 g2 F# I, [. J# R
$db_pass = "password"; //your MySQL database password
/ `: r& L5 y$ e6 a/ a$database = "users";! J3 s% @$ \* P
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, y" p) P$ Q! c9 t- a8 r
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) G8 q. ?3 ]# I0 u% a// $timeoutseconds seconds)
+ \6 @& l6 l5 `8 W; G0 {//this is where PHP gets the time
6 P, S! Q2 i& A+ }6 q( q4 ~  U$timestamp = time();
5 ~6 {# q  `% m# E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
( T, y# H- m  T3 y+ z# p' p$timeout = $timestamp-$timeoutseconds;+ [+ K% A, H1 L6 w3 X7 l
//connect to database
3 S1 U* a  v! Wmysql_connect($server, $db_user);2 L* P% j) N$ u, l" a3 r, o
//add the timestamp from the user to the online list
" j) @+ u7 Z* X2 S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( E5 V4 }( u( [. i
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- @+ w% u- y/ x. P/ Vif(!($insert)) {
# x! k( [4 m6 Z0 K0 uprint "Useronline Insert Failed > ";
* C( u9 b8 ?/ v' w( ~1 u}
% {6 j) k0 s( \, g* d( W6 c//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.3 L1 ~/ S& t3 d- v+ }: A* L8 i
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
  T7 X" N# e' Q. C- ]- L& a0 Jif(!($delete)) {
* R% |; J+ ^; F1 p7 wprint "Useronline Delete Failed > ";
! X% g* a8 l- C8 Z# F; n}
# Z' X/ w& K' k//select the amount of people online, all uniques, which are online on THIS page
7 J2 R; [  E) U5 R" H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
) N0 k0 {; R9 n" y9 Vif(!($result)) {" o5 k( D9 j/ Z2 a
print "Useronline Select Error > ";6 P1 A; ~& @8 R$ f4 w
}6 V: U: k9 k' _, f6 X
//Count the number of rows = the number of people online
2 [# S0 R8 p: l7 Y: a/ Z3 S& c8 Q$user = mysql_num_rows($result);" S2 |9 ?5 C" j; ^& B: ?& c, Z! }
//spit out the results
9 n7 c: b" j6 ~; H; _/ D6 _mysql_close();
! \7 U) k+ H4 b; f3 B, [+ qif($user == 1) {
! h) \/ @5 h! _5 A+ [+ dprint("1 user online\n");
+ G' q7 P3 K4 }! e} else {
; k* R: T/ ^' x" i3 q" nprint("$user users online\n");
# R4 J, D, W: Y' J+ {  M}
. f! g8 T- \6 f?>3 C/ u6 O! ~5 r. b2 E3 y# |
# r3 A  Y' m. y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。8 |( c! u" Q9 s. V
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。/ C( N# e5 l' E- t
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' q" q. e( A& t* D5 _0 x  f+ y) V
当然啦,这两款主机也是相当不错的。- n9 [% [* ?( ]
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
/ U- {' s$ L3 c- e8 y) i标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
8 {% y" D: K8 x2 M% r提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% `) H6 B% S/ n7 j) k空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& T9 k, ~- o) D' n( H- I3 C1 u  H
自己加QQ去问吧。

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