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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!: q- Q6 e# F  {2 m
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。: W8 Y+ x/ `. x/ d* }( n! V
首先我创建MYSQL数据库表。; y2 N- p" S! D- @: S+ N
CREATE TABLE tablename (  R. X5 b' `* M$ E# J
field type(max_length) DEFAULT 'default_value' (NOT) NULL
" F" E1 o6 L! n6 C}可以使用的SQL语句。: M1 ]# G7 ?# J# z9 c# D
CREATE TABLE useronline (! A; _$ U8 V* b1 @
timestamp int(15) DEFAULT '0' NOT NULL,; f$ j; x( v' E
ip varchar(40) NOT NULL,
$ ]! r4 c: I) V6 ^  W! Ofile varchar(100) NOT NULL,5 g* b( K6 V9 Z0 ~7 p) k, s
PRIMARY KEY (timestamp),
, @  D5 t$ ?" C7 F0 HKEY ip (ip),$ v/ T6 e& \7 ]3 n
KEY file (file)) f6 i2 _& p0 N( Q( }: G
);下面我们是PHP脚本,首先我定义MYSQL的信息。
1 u3 l% T( _+ @) S2 Z- }$server = "localhost"; //你的服务器
4 U  i3 v2 b8 R# V; ~$db_user = "root"; //你的mysql的用户名& {) [0 W" r8 h5 y" ?
$db_pass = "password"; //你的mysql的密码
# P) K2 [) J. @- Y' ?$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ {. h$ M9 L. k! R$timeoutseconds = 300;取当前时间。
5 {$ A- g& F- H& ^' l, Q( T) l$ Z$timestamp = time();上面的完整代码:- `; {' z) N- @' M! ~
<?php/ f3 d  P, N; g' e  v* o
$server = "localhost"; //your server! S4 ]5 ^: o# x( ^. ]7 p( F, }
$db_user = "root"; //your mysql database username
5 q- b) s9 f/ I6 T2 i$db_pass = "password"; //your mysql database password if any
0 S$ P1 Y* f  A2 j) F$database = "users"; //the db name
) Z2 T  K* U( y7 {; \7 l0 P8 w$timeoutseconds = 300;//timeoutseconds limit
: k. h  K0 z- W. t0 |//get the current time
1 F- n; y/ w0 [! B& P$timestamp = time();
; P& ~8 K5 s5 M/ Q! O1 U//calculate the lowest timestamp allowed
% {; c- y& m7 I) L$ x; o( \0 V5 w$timeout = $timestamp-$timeoutseconds;, M# n* Y& u7 {/ I9 m
?>连接mysql
* b& _' p7 D2 l( k7 `/ v5 u0 b1 b. V3 |mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- Z* L# R" J0 c% z; u! E: Q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) j1 q8 ~& a, Y+ @0 d5 wmysql_connect($server, $db_user);查询数据库的代码:/ y7 l% N: H' k0 \" f+ w9 r
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- g# ?: W% \  _7 Z: w+ Q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
0 h% [4 O! H9 R) [8 o+ O('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ l% b/ r7 S" N+ u如果用户用错误信息的话,这样处理。
! ]+ }8 O' J  z4 W. C: m' jif(!($insert)) {2 a* |7 c: N4 {  q  E- m# Q3 P. ~
print "Useronline Insert Failed > ";
9 G! Z7 e- T  @2 J4 r( M9 K}然后实现当超过设置的时间就删除该用户记录。
3 L) i; }4 [9 _. v5 C; D7 \/ P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。+ E7 k9 v, t8 E  R8 U0 b
if(!($delete)) {  S) z7 }  I1 w$ \3 y4 {
print "Useronline Delete Failed > ";5 c0 B9 }4 X0 C9 N( f8 ]/ J
}下面我们解决数据库中不同IP的问题
1 A; B. E, h6 V# L. V. g% x$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ v3 C1 d4 l. B5 mmysql_num_rows(query);来统计用户,代码如下。
0 o  S4 N* j6 S$user = mysql_num_rows($result);最后关闭数据库。
2 ~. l4 X- `/ q; W+ |mysql_close();显示在线的人数。# b, o/ N+ x% S: R# E3 N! V! }5 @
if($user == 1) {* c$ b1 Z* m- E0 d, V5 Z
print("1 user online\n");
' G, j1 U& u$ q' \5 H- X} else {
  U/ C# h% [! yprint("$user users online\n");0 t6 Q" ^4 p5 ~# w6 u, j; }
}最终把上面代码写成一个PHP文件如下。  F6 I* G* I& ~* r. B/ O
<?php7 ?" c0 _3 {8 K; l" v+ v/ ^
//Put your basic server info here
9 Z+ \. Q, _/ @$server = "localhost"; //normally localhost3 `9 u; J+ {8 a
$db_user = "root"; //your MySQL database username9 [( F1 C- Z" [- Z5 ?4 [8 @
$db_pass = "password"; //your MySQL database password
! j; q4 ^9 A3 E$ l+ Y$database = "users";2 f+ Z4 D- @4 Y& C. e8 `& M
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 J8 f) V+ E# V# T" _8 U2 Z// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 Q- n2 B/ i2 c/ t// $timeoutseconds seconds)3 X+ t: H4 q% v' U  ^. R2 E+ L
//this is where PHP gets the time
8 N, T1 T! ^- B- |* P: ~2 C& c$timestamp = time();
! m/ A$ s6 z' E2 n//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed& p, V! i! \7 P+ f! @
$timeout = $timestamp-$timeoutseconds;
) h) x6 v! L) ~% r//connect to database3 d9 K9 b& w& D' b- C4 j# K
mysql_connect($server, $db_user);
2 h0 e0 T( C4 l: k$ v* l( }, L//add the timestamp from the user to the online list
0 A0 s" T4 M  g- o# N7 r( W- ~$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
  C3 d! ~% s9 v6 |8 q$ W& j7 E('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 @/ b3 ~+ |! e( D( r7 [9 ~4 [* E
if(!($insert)) {
5 `  v, e+ H& k* }print "Useronline Insert Failed > ";
+ @- s5 R% S$ j! y. H}! H" d! h. k1 F) G: f  l/ r
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; ~% I8 u: Z6 g- t) Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ J! Q6 i6 l" Tif(!($delete)) {
& L. A# M/ R: C% i% |5 B: N1 D& Tprint "Useronline Delete Failed > ";! z, B& m3 h! r( b5 M, O/ _
}
: Q* [5 ]0 R! `//select the amount of people online, all uniques, which are online on THIS page+ B) W0 C& O, q8 M, m' w/ t) v; U% i
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
4 i! z7 p& h# s/ T" Q" Yif(!($result)) {
' r  F! w5 Y# l5 z' R7 C- {+ Mprint "Useronline Select Error > ";. U) V$ S% O- H. X8 |. E3 s7 w+ X
}
* |7 t) L: W+ @* W5 c3 V, p//Count the number of rows = the number of people online1 d% s1 m0 E* J4 y( S. M
$user = mysql_num_rows($result);1 Y  a! H0 B' D: g8 c
//spit out the results
8 \! S3 c  U' X. Ymysql_close();( c; v3 k( ]( O! p
if($user == 1) {
) a- }; K' r1 _) jprint("1 user online\n");$ v9 n! v  b. t5 n- ^# u( b
} else {
) j" ]% [# l. o6 V% [print("$user users online\n");& g6 q* z  g9 Z' H5 a3 \
}
- g$ [" R: y% u8 l, V?>
/ W" k: B. d* T, o
" `+ v" f0 y9 m2 D以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 U) [( w2 r, O6 e时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。! _2 a. J+ V8 V9 ^* V  Q
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( [5 D' d# Y7 u% \: R9 K当然啦,这两款主机也是相当不错的。
1 D* a/ w1 U0 g7 a- J3 d智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 h8 }9 A* h7 D标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( q4 ?# T# \% u3 d
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( }6 Y! ]6 j4 ^0 ]2 g- |9 m+ L
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
; L. E9 L8 A' [# b; {% W, ]自己加QQ去问吧。

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