返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ t8 `+ `2 \( a$ K
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' F. O) a9 t/ ]( `
首先我创建MYSQL数据库表。
9 r! S5 _7 W3 q6 k  Z) C* bCREATE TABLE tablename (1 P. e# |, C# N4 H
field type(max_length) DEFAULT 'default_value' (NOT) NULL
& d" X3 K4 b0 ^9 `2 B2 F}可以使用的SQL语句。
1 N- s$ U8 {! ]CREATE TABLE useronline (
5 c& Z4 {$ l0 k5 f/ @' Ytimestamp int(15) DEFAULT '0' NOT NULL,
6 R- q* w3 O1 b5 g0 r' {* xip varchar(40) NOT NULL,
5 H, O" Y5 J" J) Rfile varchar(100) NOT NULL,2 G* r- d9 L' A  K
PRIMARY KEY (timestamp),
  A  M# ?5 J4 e8 P2 C% d' q/ KKEY ip (ip),5 Y- {& f9 L* h+ Z
KEY file (file)$ l* N7 l9 P. ~3 G  i
);下面我们是PHP脚本,首先我定义MYSQL的信息。7 |( ~/ B3 Y& E  N: _+ V3 \& h" u
$server = "localhost"; //你的服务器
/ _$ @4 e# q: ?$ P$db_user = "root"; //你的mysql的用户名! A7 v+ O8 I: Q% G0 Q
$db_pass = "password"; //你的mysql的密码
& z- y8 F9 s% x; \7 l2 }% L$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)' m6 f! H9 l# e  T! K
$timeoutseconds = 300;取当前时间。
' O2 v( X, [' Q# g4 C+ K$timestamp = time();上面的完整代码:
" u  C# K2 C0 ]8 X  V" G: F<?php, e* F. j0 _# B( _6 r0 _/ Z
$server = "localhost"; //your server
' @) |2 l, R8 F3 |$db_user = "root"; //your mysql database username5 }8 C! g9 b$ Z- M: v7 b2 Q
$db_pass = "password"; //your mysql database password if any& _2 ^. G8 Y) A0 B0 j$ L$ d9 i  ?
$database = "users"; //the db name1 ]" {" |! w) u. A5 U* {
$timeoutseconds = 300;//timeoutseconds limit
0 B- }# a, t1 Y8 B/ K$ G3 W//get the current time: F  Y: h7 E) r# T( ?, a6 T$ h0 c
$timestamp = time();
% D" Y8 Q, y1 u/ k//calculate the lowest timestamp allowed* b  p. B: j3 v1 O, F. H
$timeout = $timestamp-$timeoutseconds;
) e5 }( t! d3 l' S7 D/ C?>连接mysql
: ]( V; ~6 L2 S- c- L% ^mysql_connect('localhost', 'username', 'password');也允许使用变量形式。  B$ u) l* R' V
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 s6 b8 k& S0 Y) y/ rmysql_connect($server, $db_user);查询数据库的代码:
0 ~* r1 ^# _) m; e1 hmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! K  ^, l' ?  }. T  T) G
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 `* U" F' A5 s! z% Y+ J! a- S5 v
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
2 @3 i. F& A; P" N) _0 }如果用户用错误信息的话,这样处理。
5 e" v1 s$ G& n7 D6 G5 l; \2 kif(!($insert)) {* S4 r/ b  n! {. B* G4 `2 j1 a. ~0 A4 p
print "Useronline Insert Failed > ";$ ^& v6 V: q7 d( V, `' S, ?
}然后实现当超过设置的时间就删除该用户记录。0 |* Y  {8 V& q6 F
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" V1 b2 y0 s9 g/ J$ r
if(!($delete)) {2 g& R1 d# j  T) M0 L% X6 j
print "Useronline Delete Failed > ";
" \1 P, f6 P5 y( u; m}下面我们解决数据库中不同IP的问题
3 }6 s7 g' ^$ Z( s' z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用# @. O& ~- a* D
mysql_num_rows(query);来统计用户,代码如下。
! z( Y( ?2 r8 k0 Z) }$user = mysql_num_rows($result);最后关闭数据库。% P+ C. P9 ~/ G  C
mysql_close();显示在线的人数。
: {8 s& v) {$ \/ C- X: a9 Uif($user == 1) {) `+ i, |; N) a) P6 n
print("1 user online\n");
5 f3 G5 B* ?) u" r9 ]6 ]/ |} else {
) M1 E, _. m$ E6 Q+ i" e3 {6 \print("$user users online\n");: ]0 j# E% n3 ^- A' m
}最终把上面代码写成一个PHP文件如下。( G# r/ |% [% V* L+ e" Q4 e
<?php% c* b% C: I2 N. c6 D
//Put your basic server info here# _4 H9 y+ `& q$ N: ?
$server = "localhost"; //normally localhost3 Q0 [% b! v/ U5 g0 q
$db_user = "root"; //your MySQL database username0 L* k6 L! e1 r, d' _0 w
$db_pass = "password"; //your MySQL database password( K+ |2 O$ J& c, p% A
$database = "users";
, _' n, S: [' Y+ a2 O0 s$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
9 U6 V/ J0 N% x4 {& n// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 y: T6 z7 Y7 B7 [. P1 @
// $timeoutseconds seconds)9 D& Z# s0 X" X: w$ f
//this is where PHP gets the time4 g# A! w1 s& X1 I+ w  f
$timestamp = time();" {) b% @* P2 w) n5 c: E4 o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. m0 P0 |+ q7 v$ X
$timeout = $timestamp-$timeoutseconds;) V8 Z0 z' E# s1 \
//connect to database$ {! Q; ]  G' H+ k% p
mysql_connect($server, $db_user);  t& V) g1 `9 {" g
//add the timestamp from the user to the online list
4 X* d5 }) o6 D4 e- `# l3 F$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 ~6 P5 y- T& z+ @('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 T2 R) U. Q, O1 z, M
if(!($insert)) {9 q. R" y: P/ k5 S3 n3 N" R) O
print "Useronline Insert Failed > ";* V8 ?1 {; H; ~$ h
}  o/ J" K+ j' n$ @% ~
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; J/ V  i/ e! ~: V: y7 H: |$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");$ t3 t, T/ w* ^, C: h
if(!($delete)) {  T2 m+ ]" k; Q$ I
print "Useronline Delete Failed > ";
/ V: A# i+ O4 ?& J# n! F; C}
2 u  I5 F: |' @//select the amount of people online, all uniques, which are online on THIS page0 C% T5 `8 Q: |
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 E  z+ B" s# ?3 ^3 s* w) F
if(!($result)) {
8 {% v: F( c0 c' g) Xprint "Useronline Select Error > ";$ N6 w0 A2 u/ ?! W3 N/ I
}# q7 q4 s9 {" u+ @
//Count the number of rows = the number of people online' u$ u7 K' M7 O* f/ U% z
$user = mysql_num_rows($result);
" n. W" Z5 N1 ?% Z1 C, f9 i& {% n//spit out the results
  E3 q5 |, `" g4 dmysql_close();* B1 m. x4 o3 U2 y- Q
if($user == 1) {" O& Z, M7 H- T! |, l; z. O
print("1 user online\n");
, \1 {0 D% C: F+ _} else {
( V! ~8 h# _- p; d. a1 c* ]# Wprint("$user users online\n");# x/ W3 E; ~9 Z+ d/ y
}5 p3 a- |- J1 z
?>
  a& n* C0 `( i( @) r
: P- K0 {$ S  K, B以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。! a6 O/ z2 p; |2 E
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 x6 k  @) Z/ S5 T2 U, h6 f我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。& n' t6 V: k9 p
当然啦,这两款主机也是相当不错的。
4 u/ ^' }7 |4 W4 D智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- k- I% t# i/ _+ u$ e
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# e- e6 f# q2 {, N& r提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 8 k) u9 k1 j( @6 B2 \! t
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
$ X. r' W+ |# ]# }自己加QQ去问吧。

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