获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
  v! w. C0 b5 f( V% b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。. o" q, d) U% i, ?
首先我创建MYSQL数据库表。
% T& J6 s9 U& X( P2 NCREATE TABLE tablename (
) S; V* ]3 P% p) `) qfield type(max_length) DEFAULT 'default_value' (NOT) NULL
2 A# N' t) [$ X6 }0 B9 m}可以使用的SQL语句。
' ^+ O1 G  M4 z( VCREATE TABLE useronline (
0 n+ f% h3 V0 A, A  y$ ftimestamp int(15) DEFAULT '0' NOT NULL,2 W: n8 T0 w5 @! M5 Y
ip varchar(40) NOT NULL,$ P9 T7 y6 z' @7 J5 ?8 k
file varchar(100) NOT NULL,
' e: E, H( z: IPRIMARY KEY (timestamp),' B. G2 _  a) \7 p# T3 G3 x. U
KEY ip (ip),
) ]4 I6 x1 B, BKEY file (file)8 ]2 p. s, k# q8 n) y4 _, ?. I" U
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: p$ }  }' y! [3 H* \% I  z$server = "localhost"; //你的服务器
4 y  a4 m) q- i2 R0 E$db_user = "root"; //你的mysql的用户名
$ y% _, Y3 D5 O$db_pass = "password"; //你的mysql的密码
# h9 p+ g# i- X5 n& q$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 c4 Y0 A6 s! X' Y3 e. F
$timeoutseconds = 300;取当前时间。4 F/ ~. P: f) U; M4 a6 o2 O
$timestamp = time();上面的完整代码:
) p3 f0 L/ h9 J, B, n* M<?php
$ B# O. g5 H; E: \7 K; u$server = "localhost"; //your server+ ~" g2 `, L; I# a7 {0 r
$db_user = "root"; //your mysql database username
& Y7 N, A* t( O8 I4 |) z" e$db_pass = "password"; //your mysql database password if any) y1 j4 [8 H) @+ X: f
$database = "users"; //the db name" c. F" D" S# C# r' e) j* }
$timeoutseconds = 300;//timeoutseconds limit
1 s/ U& c4 L; @' \3 M1 a//get the current time2 E0 S3 L) o" J2 v! g
$timestamp = time();
, y. {0 N) t, u//calculate the lowest timestamp allowed
2 e0 |- B( j& W" x2 p# r$timeout = $timestamp-$timeoutseconds;! R$ Y9 ^  I/ A3 Z3 ~
?>连接mysql
. g+ r, P0 y5 umysql_connect('localhost', 'username', 'password');也允许使用变量形式。
, W, t( A4 Q: Y. k3 qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接& a$ A$ e% ?3 [9 y3 |" o
mysql_connect($server, $db_user);查询数据库的代码:
  d) z( m  [/ h  I" Hmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
& h* z4 {* X* a5 K1 |; T$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' G- h! d" o5 N! K/ M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ q+ H% P" V" S& {- b  G
如果用户用错误信息的话,这样处理。
+ ?5 e/ r% q/ iif(!($insert)) {
) ]+ h0 _/ X& r+ rprint "Useronline Insert Failed > ";, h& h$ H* T; {+ x  y; J+ ]
}然后实现当超过设置的时间就删除该用户记录。4 L; ?1 N$ V+ [7 O2 ^! ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。) S. p: Z% _, g1 g! y9 O: c5 g& }% p
if(!($delete)) {3 W. O$ J* ]0 \! `! |- i+ p
print "Useronline Delete Failed > ";
: x/ Q$ ]9 b; {0 P" K}下面我们解决数据库中不同IP的问题
# E# S) C: e0 z6 f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. n& s9 Z2 c  F1 j) m9 k- E) }
mysql_num_rows(query);来统计用户,代码如下。
0 o* q9 }3 o0 x7 J# U$user = mysql_num_rows($result);最后关闭数据库。- y- n0 A$ Z$ |3 H" h
mysql_close();显示在线的人数。
+ q* n/ T  s$ i' @if($user == 1) {
, @0 S4 A) W- `1 i9 ?print("1 user online\n");- h2 q1 E/ ]! ~4 ^
} else {2 u5 s4 n5 n& X4 ~: p6 @
print("$user users online\n");  y* T0 r; [# }
}最终把上面代码写成一个PHP文件如下。- p% p; N+ N: f# }/ t7 ?. H
<?php
6 _& F; @# b, A& i3 A7 v" {* K//Put your basic server info here, ?1 \: g# u* y
$server = "localhost"; //normally localhost$ W. [2 j4 C) b& V: Z
$db_user = "root"; //your MySQL database username
5 l* E8 M1 y. E9 z4 m$db_pass = "password"; //your MySQL database password. I3 `- ^) N& l3 T
$database = "users";$ |! p' d4 J- v0 V+ O
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
, E6 m# |- @2 Q6 u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 M; c* n- ]- ]3 M// $timeoutseconds seconds)( G: V8 N2 X4 N, Z* o: z/ P  m* T' w) P
//this is where PHP gets the time
: t' \5 F5 g; l) }% d, H$ A$timestamp = time();
8 |- L6 v5 ^* R9 U//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; ], d/ z- N, U9 a7 f! a$timeout = $timestamp-$timeoutseconds;, q+ }, B" M2 M# c/ q7 t, h
//connect to database
! [$ L8 E5 Y! G% M$ m1 lmysql_connect($server, $db_user);( b: @/ M* {) b1 C
//add the timestamp from the user to the online list
# d+ u; s$ e  p- {$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. R7 f/ w& {2 |$ N# n('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ B; I! Q* ^; S" O# U
if(!($insert)) {$ q# J1 t- m( O/ J" @
print "Useronline Insert Failed > ";
; n# T  r1 r* ]. C# G}
' z. x+ L0 L- ~, [. }//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
! i2 K% d3 W& b* F( V$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");! ~9 q+ }- g5 u
if(!($delete)) {
7 `' o: @5 C8 X* s$ i4 j4 bprint "Useronline Delete Failed > ";0 _! B% I$ X+ F1 k3 d8 J
}
( f& g- s1 y3 _) L, o& K//select the amount of people online, all uniques, which are online on THIS page# Q# H5 i6 L9 A6 e1 A
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 ~5 v/ S) N5 q% ?' I9 `1 k, L/ c# @
if(!($result)) {% F, {# E9 u0 ~) w+ K  S
print "Useronline Select Error > ";0 y. M/ ^% T$ N1 j" \
}+ Q9 h; p$ v' N+ b; Y) ]3 S% q3 g
//Count the number of rows = the number of people online5 |8 z! |) y$ G1 [& g" x& U
$user = mysql_num_rows($result);
, G, T1 w9 s3 T7 L7 I  T7 a//spit out the results
( T. f7 s" k; Y. mmysql_close();+ }1 z8 S$ ?3 U, i8 X
if($user == 1) {- `/ o6 y* e. {- Z3 u: d' X
print("1 user online\n");
1 b6 q- n! v$ M% h, t. T} else {' v9 H& i+ ^. a
print("$user users online\n");) A% f: ]1 c3 X3 A
}
1 I' K+ l4 Q, J1 G4 w% I?>
$ s/ W( V8 W* a+ b' W/ J1 I6 p
6 Q+ }; Z3 B6 j0 ~- R4 h( o0 d以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 _) S2 i1 H) E9 |- v时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! v' L" z( O3 l: ^. ]6 d% \我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 Q# R) ^$ X( {! C) M
当然啦,这两款主机也是相当不错的。
9 J2 L& y) D1 _4 `0 T智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! @2 `2 ~0 z* f! P& x
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ ~/ `1 V! Z" a4 W  {* \提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, M8 U! r5 Q+ p2 i+ ~空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
9 Z4 `' V0 V9 y, D3 t. S自己加QQ去问吧。

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