返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& _: j# X) e% b- L; C" m# u2 J) y我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 ~: J+ ~$ `; z! F
首先我创建MYSQL数据库表。
1 d0 ?' X; d  t$ fCREATE TABLE tablename (
$ s; }+ j+ @8 Dfield type(max_length) DEFAULT 'default_value' (NOT) NULL4 N, R5 n4 O5 v' K% i
}可以使用的SQL语句。
+ h$ n6 A4 ]8 U2 c9 K* j( cCREATE TABLE useronline (
! U3 C  A  t, m" g5 g0 Ftimestamp int(15) DEFAULT '0' NOT NULL,
3 R0 D3 T% f. M: t; vip varchar(40) NOT NULL,
; u. e8 @& }2 V$ N& B3 \file varchar(100) NOT NULL,
; ^. W7 z2 @, w4 M! {PRIMARY KEY (timestamp),
/ ]1 ]3 V' H/ e# s0 ?+ N9 uKEY ip (ip),' T) e" o# ~# ~7 b  L! C
KEY file (file)
' R3 L0 b( a. r! F. d);下面我们是PHP脚本,首先我定义MYSQL的信息。4 _9 H! G& w8 @6 o6 H' x# A
$server = "localhost"; //你的服务器
+ p+ z% `, W& a0 G5 p$db_user = "root"; //你的mysql的用户名! m8 h  \2 t4 s& N( K' S) [. {# h
$db_pass = "password"; //你的mysql的密码
- @% I3 }, `8 |$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 `( o# v+ @$ f& M4 ~" t2 D/ E
$timeoutseconds = 300;取当前时间。% f7 l9 W* H! r; N8 U
$timestamp = time();上面的完整代码:
% W2 j' d: p! z0 |; g4 |  p# W<?php! H; q3 W9 @2 N* L8 G( W8 C# R
$server = "localhost"; //your server% S9 R2 u8 U$ U7 Z  L
$db_user = "root"; //your mysql database username; h1 b6 z4 k* v$ f/ a5 o. |, u1 v
$db_pass = "password"; //your mysql database password if any
( l+ f! \  W' W; ]8 @$database = "users"; //the db name
) q  B' N! L1 P9 c$timeoutseconds = 300;//timeoutseconds limit; O$ `' P  R" I
//get the current time' g5 v" }( H+ f7 b
$timestamp = time();/ ?4 x' I7 y# }% U6 m4 T" F$ @
//calculate the lowest timestamp allowed5 e. k( s' c( ~6 H" k
$timeout = $timestamp-$timeoutseconds;
$ y+ T8 \4 g! |7 a1 |6 N6 {?>连接mysql
, J4 ~4 r) x& N& ]# E" Fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。0 `- S  c  t% e: u
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ R& [9 W# @4 `
mysql_connect($server, $db_user);查询数据库的代码:' ?9 L4 U; r1 W, Y
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 t7 V8 a7 ], ^( T' J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: l: s  w8 g) Y8 q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 u7 B- a) B3 s' _! ^" h4 [如果用户用错误信息的话,这样处理。, b, n$ W8 M+ h* f
if(!($insert)) {4 o9 S, M( {5 v& l- K
print "Useronline Insert Failed > ";
5 X  b/ @( D" R% @8 M}然后实现当超过设置的时间就删除该用户记录。% G; H) n# q' M2 r7 R( c
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, e1 g- G! M7 f" M& I1 v
if(!($delete)) {+ m# c4 c) Z& T  h
print "Useronline Delete Failed > ";- f2 ]9 P& _; T& \
}下面我们解决数据库中不同IP的问题
1 D- c! M2 ?6 I/ b; M  G& f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用3 ^- b# `0 J: P# G5 |6 S) ~
mysql_num_rows(query);来统计用户,代码如下。7 L8 c& t8 V( R% O% ~6 }
$user = mysql_num_rows($result);最后关闭数据库。
3 ?# }; X- {" v( B1 {4 m3 Smysql_close();显示在线的人数。
/ V8 U3 S( O# W; }if($user == 1) {) S" ~2 L0 H. ~( \. ]2 n3 R& t# ~
print("1 user online\n");; a0 F2 v0 p" k% E
} else {8 u  x$ O' q0 _  B
print("$user users online\n");
. ^/ U$ H: \9 S% F8 @}最终把上面代码写成一个PHP文件如下。
$ a+ B9 r+ E$ u<?php! P" ]+ g' D+ s  L! {0 {& l
//Put your basic server info here7 m9 O1 B+ ?% h& }7 v
$server = "localhost"; //normally localhost# J% a" y5 O: O4 ?2 U& Y; W
$db_user = "root"; //your MySQL database username" J( {# {4 U: Y6 W5 f
$db_pass = "password"; //your MySQL database password( _% Y% H8 d8 x# j% W
$database = "users";
" k$ [' z7 n  L" X( P3 [* a$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 _5 V% s  i% Q3 P" c// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 B8 {* o* Y3 P& ]4 o, ~/ }// $timeoutseconds seconds)  X/ `" m* _  M0 W) n- a
//this is where PHP gets the time' |7 [( @) Y1 w  k0 B7 N& k2 G
$timestamp = time();+ \, {0 B' B* n$ _+ q( y) B
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' G6 k0 @5 Q, c$timeout = $timestamp-$timeoutseconds;
) {( p( Q# z$ l, f7 V: S//connect to database
- x# r4 O4 y5 n8 }8 ~, k& N6 |" mmysql_connect($server, $db_user);
/ W" K1 J- y3 d+ f+ A" h1 W//add the timestamp from the user to the online list
1 c1 I& b' R6 J! j5 }2 I& ?$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# S) V* R6 F+ K& R9 U('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 i7 r' W: l( M+ S/ w, S7 K# E' ~+ f' mif(!($insert)) {; X, a7 ?6 b0 q3 z9 h
print "Useronline Insert Failed > ";
, P1 \2 R  N9 E% k1 ?}
! v1 N: k; u9 A5 o( Y//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
( n. H- Y- l$ M& L$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# E+ i4 O  v4 |
if(!($delete)) {# z+ Y4 U# v7 m+ P
print "Useronline Delete Failed > ";; j% B) @1 E) p" a1 j
}6 w4 J, L/ g, Z% X# C
//select the amount of people online, all uniques, which are online on THIS page: k/ }$ Q3 c! v$ G% M
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
! g9 I7 |. H# Q+ [; l+ Gif(!($result)) {
& D3 l; s% j. c7 q( ~( S* Mprint "Useronline Select Error > ";
* v. t  S3 G0 o% Q1 b- w8 ?}$ H; D* T0 o5 f! v, ^; K3 L
//Count the number of rows = the number of people online5 v$ \+ p6 M1 z8 P5 \: `
$user = mysql_num_rows($result);1 G& ~9 B7 ?8 [
//spit out the results; j2 u6 L* p2 b4 p
mysql_close();- M% n# N+ K: d& i- U. b
if($user == 1) {; Z) D' }: g7 ]6 w+ E$ q' `3 L, @
print("1 user online\n");% W( k- a0 V; a  k$ R
} else {& @3 I2 R- A2 S, V* P
print("$user users online\n");2 X$ s; E, s; n
}* n) j9 X% U1 L% p, u; \; ?  N0 o
?>
1 n, A; r4 n0 U: U% ]$ ~/ B. H( g
- p& {* O1 p4 N5 N* @! c) u9 O6 C以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。1 t& ^% R: C9 d& t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% V) L3 t1 ~% Z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
! s8 j8 u: U7 W" X( S5 T" \. @& Z当然啦,这两款主机也是相当不错的。
/ f5 [: b0 e  R: R8 P& N& X- ^" ?智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
0 {1 u  @; M) N( F0 u标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
& b" c5 Z" y" N" V; J提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) _: H! |: X# d/ {5 `' ~* ?' }
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
/ I* k5 P! V+ N自己加QQ去问吧。

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