返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
0 Q1 z- ], i" z2 H( W' _我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
% G* s2 R6 |- ~( A6 l' N首先我创建MYSQL数据库表。9 N- V1 D4 W1 `) F3 y
CREATE TABLE tablename (1 p+ q6 _& ?+ s: a- I+ C1 J+ r0 D
field type(max_length) DEFAULT 'default_value' (NOT) NULL( w' a- E) k# M( D! f1 _
}可以使用的SQL语句。2 z1 M: Y1 a1 B3 Y
CREATE TABLE useronline (
/ J+ R/ O  |6 S6 c" Itimestamp int(15) DEFAULT '0' NOT NULL,
7 p# b( _5 ~4 N  S( G7 I! Iip varchar(40) NOT NULL,, P! E# V- X. [, G& m$ ^" |0 R; u
file varchar(100) NOT NULL,7 R3 t  F3 }& Q
PRIMARY KEY (timestamp),, h/ ]% k3 Y2 e
KEY ip (ip),; a' @  D0 `9 |5 N! h; Q
KEY file (file)( n: k; U9 ?; d% B. O7 X  u
);下面我们是PHP脚本,首先我定义MYSQL的信息。2 u' e1 s1 D: M; s! R  D( n, x4 b0 {
$server = "localhost"; //你的服务器
  m; f( T* q3 Z7 ]9 `/ `" F$db_user = "root"; //你的mysql的用户名
5 w, T  X7 C3 _$db_pass = "password"; //你的mysql的密码
% M% U; U+ n( V) \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 g" I( Z  P. {$ z
$timeoutseconds = 300;取当前时间。
: t; C' H/ P6 ^! y6 S' ?& d$timestamp = time();上面的完整代码:. F% L3 Z5 ^1 r+ s* s1 I* Y
<?php
) k8 I( Z& S7 d0 t5 c$server = "localhost"; //your server( H$ D7 u# t/ U! t
$db_user = "root"; //your mysql database username6 B2 _! f9 ~8 N
$db_pass = "password"; //your mysql database password if any
" }' Z# a  i! Z, ^! Z$database = "users"; //the db name
- \& ~. m9 {6 S' W$timeoutseconds = 300;//timeoutseconds limit
# d: [1 r8 D1 T8 s/ b: `( y//get the current time
; t# q& N! Q' ?8 Y4 P) Q$timestamp = time();3 H) q9 B0 i1 T! p
//calculate the lowest timestamp allowed
4 N# e3 d5 H. ~! w* a$timeout = $timestamp-$timeoutseconds;* W" E' f0 F& b% c
?>连接mysql
# Z7 r. `% I. B) G  Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
/ q3 ~- c/ v- Qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; Z1 _1 u& w8 e, E9 ]" [/ {mysql_connect($server, $db_user);查询数据库的代码:
) R$ x5 e1 w% ~7 Q3 b; i3 n  Hmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 ^# V4 x) g: Q. l* u" V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- M$ X, h* P  T: Y; ]7 g% I# W2 d! m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. z( r+ M- D* A1 _- q如果用户用错误信息的话,这样处理。$ \: y3 g8 R5 O+ H
if(!($insert)) {' z2 p4 O" Z- r9 N0 L; e* Z
print "Useronline Insert Failed > ";6 i3 g3 p6 S, W) g0 c! o$ z4 s
}然后实现当超过设置的时间就删除该用户记录。: c  h. X. Q+ m6 s2 B3 O
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
$ A$ e& \7 J5 M, mif(!($delete)) {
5 E7 D& B; i+ c% Pprint "Useronline Delete Failed > ";
/ {; m! k7 D/ T/ x}下面我们解决数据库中不同IP的问题3 C0 T6 l( a) t0 r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用8 D' G% O# t% J9 l* R
mysql_num_rows(query);来统计用户,代码如下。* u( g2 c* t- l8 a* M, p
$user = mysql_num_rows($result);最后关闭数据库。
% ^* [/ y! [4 q# C- _$ tmysql_close();显示在线的人数。, q2 p  b2 J: I, D0 [. G$ _# H
if($user == 1) {
+ T; ~4 O# {9 W/ ]) J" @/ Rprint("1 user online\n");) G+ |3 K5 O9 G: S
} else {
) O# j& v9 P4 ^. a0 \5 p. c: V7 m1 Oprint("$user users online\n");+ e' g! L! E0 ?; h  L% h
}最终把上面代码写成一个PHP文件如下。
( a& e* F' |& _1 F* i1 J& k9 V/ C5 b<?php
! ~0 ^/ q3 m, v- H//Put your basic server info here8 H- e2 s0 l3 \2 }
$server = "localhost"; //normally localhost/ Z5 ?" B/ E  I; V+ \
$db_user = "root"; //your MySQL database username
, t/ a  T" z% H8 E2 v8 e4 E1 r" j4 ~$db_pass = "password"; //your MySQL database password
7 j9 i5 }# W$ p; C5 Q2 c- s$database = "users";9 s6 t# z' E* B
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
; P8 l8 v2 `7 o; X# @. m  T0 n// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; o& D" w9 W+ j; `- X
// $timeoutseconds seconds)- i# f/ ]7 T+ L. d$ I: W- }! A" A
//this is where PHP gets the time; m1 j; O- M6 ~/ g/ I
$timestamp = time();( C/ B) P- i  l0 }6 I6 z% T
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
( S7 R+ g! f" [3 ~: v) o' c$timeout = $timestamp-$timeoutseconds;
+ [/ R! d: J! d//connect to database. y  w6 _# g" |, X% A, `! Q; d7 Q
mysql_connect($server, $db_user);
" M  L9 q& Q$ k//add the timestamp from the user to the online list" o( C( p* q9 B$ F2 _* V, O
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% v2 L4 C0 r7 g2 l7 _  Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 q1 o) ~' X/ L; b" X0 Nif(!($insert)) {1 m, @3 |, d5 e( _; ^2 Y
print "Useronline Insert Failed > ";
3 p5 g# w: b( |* j4 p8 }}
4 J# ~2 R$ N8 @  b4 Y5 D- g+ H//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.; z! c4 X2 G1 w( J! V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) l) E0 G- t0 p+ H* p; `if(!($delete)) {" L5 g) [. Y! G8 f* U$ x
print "Useronline Delete Failed > ";
! o4 A7 ^6 @2 b9 r  R}
: Q. _" p% y1 ~! L0 U% ?; F//select the amount of people online, all uniques, which are online on THIS page
) a1 K+ H& F/ ~3 V8 s: L$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 _$ e( S; Q; p& \7 t
if(!($result)) {
, ]1 \! x0 y" o" y" O0 Jprint "Useronline Select Error > ";
6 b9 Q2 d7 O) s) v1 x% a% `3 b}
" E# N4 A# w' ]) z) ~3 ?2 @//Count the number of rows = the number of people online
% n4 U, }& X8 E0 `- f$user = mysql_num_rows($result);
1 s* ]  M, x& k" Q1 `. U//spit out the results
" r( i0 }. d- @, omysql_close();3 \' a" P7 r5 Y3 F
if($user == 1) {' O4 h, V! p, u+ Z2 @
print("1 user online\n");
* q# x! J1 r& p. y- l5 v} else {! b) u3 `* a1 m" H& O' N: I. j5 l
print("$user users online\n");3 i3 O5 P* l2 }6 k( F3 q) I* X
}
* x" B% E' p: A( t7 {" h?>
* @/ e& S) J8 J% b+ Q
- i+ W/ G) C& H/ V$ O) d4 n' L以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。0 a: m, u& x/ C7 T& s* ]0 _
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) u5 y) V' {& s! O& h9 H2 e( {我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; D% t0 i7 w# t" o
当然啦,这两款主机也是相当不错的。
  t6 x! d! e5 R7 {智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: C/ B5 s4 i# i: L& C% `* w. N标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 r7 t: Z" ?5 Y, V$ L, l( z
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
% u. Y& d" {, t% \/ M空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
' d- {4 z( P! ]自己加QQ去问吧。

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