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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 F6 l. O; s6 P, C- z7 v0 U
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 U! t" A7 n8 L" ^首先我创建MYSQL数据库表。: ~  R2 Z5 @+ ^# e; x$ T
CREATE TABLE tablename (
% ?, l0 E# V; G* v0 o, }field type(max_length) DEFAULT 'default_value' (NOT) NULL  P! P+ [2 |6 x+ x! z6 J
}可以使用的SQL语句。
, s3 a; c4 m$ v8 l9 u8 `CREATE TABLE useronline (
9 M1 V1 L) B* K# Y/ Wtimestamp int(15) DEFAULT '0' NOT NULL,- z0 W6 R! x4 s2 L/ H
ip varchar(40) NOT NULL,
0 r+ L: k' S" n$ Y& }4 d5 Nfile varchar(100) NOT NULL,. y, y2 o5 N  ?6 d) P% i
PRIMARY KEY (timestamp),. k- l; B1 @6 ~8 @
KEY ip (ip),/ a5 {6 w; k6 x5 P/ L* r
KEY file (file)
: I! Q% n1 `/ w3 c& `" y" d* I);下面我们是PHP脚本,首先我定义MYSQL的信息。' O6 e3 d: L8 n& D- \( H  A
$server = "localhost"; //你的服务器) K( v3 J9 [2 a8 l$ U( R
$db_user = "root"; //你的mysql的用户名/ d1 @. u+ n9 l+ [% i
$db_pass = "password"; //你的mysql的密码' v/ n1 Y( ^+ C9 l2 ]( d: O7 \
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数); H4 |0 [8 G, v( E" g5 g" t
$timeoutseconds = 300;取当前时间。  T: K2 a3 c- Q7 c* R  J
$timestamp = time();上面的完整代码:
; L! x# ]+ e+ c/ ]3 K3 c<?php7 m7 P8 V: A6 f- M! ]7 x
$server = "localhost"; //your server
$ }4 A0 T) ]* I$db_user = "root"; //your mysql database username5 p# ]- J4 a3 U& c5 x
$db_pass = "password"; //your mysql database password if any! k5 A* |% A, K
$database = "users"; //the db name
7 W7 Z! G7 T# P2 {$timeoutseconds = 300;//timeoutseconds limit' O* J3 G9 b$ X/ \3 U0 d% h
//get the current time
5 V: [0 s' W1 i$timestamp = time();7 d8 _: W* _3 F- E$ k& L* w
//calculate the lowest timestamp allowed
3 F) L5 Z" s5 k$timeout = $timestamp-$timeoutseconds;
0 a* @- m4 X3 y+ F1 F?>连接mysql6 P( V( F+ q6 s* p* ]7 C
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 P4 ]- e8 E$ U3 v" e7 nmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" ~! c0 C* u3 M& `1 s7 R
mysql_connect($server, $db_user);查询数据库的代码:
; R& ?2 \  V- j9 kmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
  X, {% v5 L/ e+ q) @; c, k. _$insert = mysql_db_query($database, "INSERT INTO useronline VALUES3 Y: x6 ]( j- h. z, M
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 M6 p, D7 X9 C; O$ K如果用户用错误信息的话,这样处理。4 _9 V6 F% j8 c+ p
if(!($insert)) {; k$ h$ g+ I1 H( I1 B1 |3 J) Y
print "Useronline Insert Failed > ";( m* w4 I. F8 r( C9 d
}然后实现当超过设置的时间就删除该用户记录。
# r7 p, Y+ l( d2 l: x+ {, |4 P5 @$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
3 ~& f! k+ n3 y' k6 r/ Gif(!($delete)) {
# @4 l  }& p' T1 {8 D9 {4 O2 ^print "Useronline Delete Failed > ";
2 w: ^) v' S, c( L$ f$ @6 i( S0 ^}下面我们解决数据库中不同IP的问题
) _2 S% l* n0 L) D5 C$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 @4 V4 z" c) O+ _3 Y( s0 o. p) `
mysql_num_rows(query);来统计用户,代码如下。
7 p% Z* g" ^1 ~+ x) V. t  }$user = mysql_num_rows($result);最后关闭数据库。9 E3 A- l2 R8 [2 k% l
mysql_close();显示在线的人数。
& m5 v) h; _5 B  @: g& A8 Iif($user == 1) {
3 H& c% x1 v0 p9 `7 Sprint("1 user online\n");0 X3 n/ B) A3 H
} else {1 J/ T6 T$ J! _2 ~) o. q
print("$user users online\n");5 Q, i9 }" W* K% o
}最终把上面代码写成一个PHP文件如下。
, T* d8 H+ U# a" u<?php, I* [  [: b$ `6 k+ |2 T  j
//Put your basic server info here
/ q/ W1 B8 R- T$server = "localhost"; //normally localhost
* x7 K( y6 h" x1 i$db_user = "root"; //your MySQL database username+ Y: f6 p: E" G9 j( ^% S, u* |* L% ~4 J
$db_pass = "password"; //your MySQL database password: K& p) W2 T, [/ i1 T# [3 K
$database = "users";
: `& g- r" I& a; b: @$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- O$ ~! k. u) a' v0 U2 u// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. m- Z7 E$ k1 D; m5 [* V// $timeoutseconds seconds)/ O9 C7 V; [, |- f$ G
//this is where PHP gets the time9 q3 w( H4 d/ o
$timestamp = time();
9 Z  A: l  Q- t* ~2 l8 ~//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed+ ^2 M: ]3 A) C! g$ x+ I
$timeout = $timestamp-$timeoutseconds;& I8 ^$ @- `: U
//connect to database( l- ~* k* a; F/ ^( b
mysql_connect($server, $db_user);
. C' T0 ^$ @& I0 `! \6 q; A//add the timestamp from the user to the online list/ O% p3 J7 D0 F2 \1 N# C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' Y' S; H. i- F+ h- A" c('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, l! J, C$ n  N4 k' Nif(!($insert)) {
! e7 m2 y; x1 t; t1 [print "Useronline Insert Failed > ";
- ~' h" A% d& |& z: E7 W: T}, X, g$ Q$ G- _" J: G
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 W% g! \' o( H% ?" B+ n# o0 u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");( u; i. m* ^& k% [$ {
if(!($delete)) {, E0 }$ ]3 ]2 z4 O
print "Useronline Delete Failed > ";
, Z3 n: z6 g1 w  l4 T. t+ p}
$ R( _% R$ M  O4 h//select the amount of people online, all uniques, which are online on THIS page
( n, E$ b5 W: E: ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 C9 B, Q- \$ `! T$ V
if(!($result)) {! V; a) G4 S& J% Q: f
print "Useronline Select Error > ";
' r3 Q/ S' R3 C6 N  m}! F( [5 O% i  a  B
//Count the number of rows = the number of people online3 ?) q- _+ D4 U- p* U0 `
$user = mysql_num_rows($result);
3 S; c6 t% C/ k& _3 Y; t//spit out the results
% f& _5 G" v2 b  t9 V! t* j* \mysql_close();
! s+ @: b: ~" o7 {1 D) u* fif($user == 1) {/ F5 Z$ w2 ]" g0 b' V# U
print("1 user online\n");9 `7 N0 w5 {% T& T7 |" [: y
} else {
1 p! K9 D* m- F9 ^print("$user users online\n");
' S0 Z% c3 C) V! m) l# c6 Z}' d! \: s9 o& j$ a( Y
?>/ w( T) V, s1 E6 R

6 Y- Y, E% u# P, g/ ~) k% t以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& g+ H1 w+ I& x2 |时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. W% Z* v0 N: N* N" h' o
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
- |; b- f# c8 q9 x, v当然啦,这两款主机也是相当不错的。
' e; P! P% [& Q7 ]智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* O4 W0 W- e% A5 ]& ?6 `: k. p7 o0 G
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- p" j7 ?0 V0 K" B提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/   r! j: [/ O, H# |
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: d$ Y. n7 e$ x, [4 P4 ~9 t7 @
自己加QQ去问吧。

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