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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. K- C$ p$ f! u/ b0 t: n0 }5 b# i( M" h我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。; Z+ q/ w# {& K! W, Y) w% L
首先我创建MYSQL数据库表。# C& _3 B" N: H! M' s
CREATE TABLE tablename (5 V) [+ n6 Y$ H/ j- h
field type(max_length) DEFAULT 'default_value' (NOT) NULL5 V! M" z8 Z' z! |7 E9 j* o; u1 G
}可以使用的SQL语句。; \' s) l  }1 Y( @
CREATE TABLE useronline (
3 W, y: `- b( F& x% Xtimestamp int(15) DEFAULT '0' NOT NULL,
$ Z5 i* i& j7 G( vip varchar(40) NOT NULL,
9 D- M' D$ o& {2 o  t3 q; i3 ufile varchar(100) NOT NULL,9 ?/ k. b/ z+ O: D; m% E
PRIMARY KEY (timestamp),
3 q. r; {9 @; V! ~$ H6 o/ u" aKEY ip (ip),
# v3 X' Z9 E8 [: _KEY file (file)
7 P4 ^: F0 J+ q' f9 A);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ I+ A4 x7 Y% Q& S$server = "localhost"; //你的服务器3 ]2 }8 H. i& E
$db_user = "root"; //你的mysql的用户名
0 I: q/ h# t6 H6 U$db_pass = "password"; //你的mysql的密码
( c. P# V. O* ~" a) [$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)  u; j& y# y% e9 f" F3 m
$timeoutseconds = 300;取当前时间。! D9 S8 o9 E& \! r9 c- M
$timestamp = time();上面的完整代码:% e0 u2 U5 K! \# B
<?php7 b, x$ c! e1 v( T
$server = "localhost"; //your server
5 u% i& }" E# `6 s$ d# f$db_user = "root"; //your mysql database username# Z7 b% q, c7 t# H$ M) H
$db_pass = "password"; //your mysql database password if any
- ~2 ^2 Z/ h* d$database = "users"; //the db name) R2 F6 C8 I4 p( E3 A$ e) a3 g" ?
$timeoutseconds = 300;//timeoutseconds limit
4 Q. G, X  Y# U  W+ i//get the current time% {5 ]$ \  b# p) X7 ~- H* P1 v7 a
$timestamp = time();
4 w, _: @$ n1 w8 Z. o0 F//calculate the lowest timestamp allowed
* ^9 t+ T. @+ e' I- L% s+ P$timeout = $timestamp-$timeoutseconds;
/ D1 W+ _+ P$ G! c?>连接mysql
4 a5 ]( R4 z! E/ e! @& {. pmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ g$ F# }$ P+ [- x6 vmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ i7 K  C# F3 s8 K( Xmysql_connect($server, $db_user);查询数据库的代码:9 {- Z* a4 e% q* d* m% H+ D0 X
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- i1 I3 z3 w4 U( K
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 e2 a6 E! z4 H2 B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 C) u4 b, B9 `3 }) T6 l
如果用户用错误信息的话,这样处理。, p, a; V& D) P7 Q+ X
if(!($insert)) {5 k( n  F1 L2 T4 ]9 X
print "Useronline Insert Failed > ";; M9 o' l3 A. r1 q- O
}然后实现当超过设置的时间就删除该用户记录。' a1 ?, Q1 N& D9 I( k
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& C% P0 Y/ @8 |  Z; T5 {6 Yif(!($delete)) {
; a2 x6 V( t! Z2 j* O4 Lprint "Useronline Delete Failed > ";6 i: K7 c5 D/ t+ T
}下面我们解决数据库中不同IP的问题3 n/ M' R+ R& E, p* r
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用5 G2 C) L& h3 j
mysql_num_rows(query);来统计用户,代码如下。
% R) W& i7 K$ F: V/ [; m$user = mysql_num_rows($result);最后关闭数据库。4 {+ t; A+ v8 r$ ]: l& r0 [
mysql_close();显示在线的人数。
  g; M4 G) A6 e6 a* s3 iif($user == 1) {
! j, K8 s" c% y) hprint("1 user online\n");% E3 m" N" g  p
} else {! c2 r/ N  J6 D0 P; i9 x
print("$user users online\n");
6 e' m+ F* C' Y% [9 y}最终把上面代码写成一个PHP文件如下。
  @# b7 V7 {3 P) l% I# `' H6 b<?php
" J' h. j. A6 [; T9 D9 P1 D//Put your basic server info here6 ~: I6 [9 u% K( ?+ ~/ d
$server = "localhost"; //normally localhost
, m6 E2 H$ m1 {# |$ [9 m$db_user = "root"; //your MySQL database username# `% t, Y7 c; h& `
$db_pass = "password"; //your MySQL database password
- E5 [  N3 ~$ ~, b0 z. p1 \$database = "users";( R1 G% Y9 o! [
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
6 V- Q  x9 U4 u2 P. a3 d# g// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( s7 j3 u) a5 M& f6 V7 `9 d  |6 `
// $timeoutseconds seconds)4 |! n2 L+ a0 n- ]7 f* Z
//this is where PHP gets the time
/ \; Z* c% U; g# M$timestamp = time();! T9 S2 u! W# s& ^# P- t
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- K( G5 [# X) \% B. \
$timeout = $timestamp-$timeoutseconds;
1 A* q: i4 n& }% E- I  B//connect to database
$ M* {& k8 a+ o' z5 K% O6 A" z0 t2 Vmysql_connect($server, $db_user);
+ p* b( v& J4 h; C% J//add the timestamp from the user to the online list
) o  E8 w. c8 K, @) w( l& C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' q: E$ k$ ^, p9 h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ |* C: M8 v. L6 O3 _, x5 G
if(!($insert)) {
& }) w5 y$ Y5 s5 K! t6 f8 C9 y3 j( N2 pprint "Useronline Insert Failed > ";, s; z& o0 p3 G/ Y/ @
}
3 _, g7 ?+ S1 r7 X//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 E7 h) r" D* b& F; K7 x! ]$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
! ?5 t3 n, I# I* x( q8 zif(!($delete)) {2 g5 A! H# U1 o' ~) |- q- j1 I
print "Useronline Delete Failed > ";; p1 ?- O8 u3 Q$ f6 g
}1 ]. z6 E( L- b, R- ]0 U; J* f- Q& E
//select the amount of people online, all uniques, which are online on THIS page0 e! i$ W: ^5 A( F8 V7 x4 k% x/ {# O
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
6 ?4 Z- ?7 O# e0 j: |if(!($result)) {
* @' r. S" Q3 e3 jprint "Useronline Select Error > ";
: R$ o3 }; i  n7 D/ \}
2 H1 }" K4 [5 L$ H/ o//Count the number of rows = the number of people online: `  o  a0 G+ ^/ K, h1 n  ]
$user = mysql_num_rows($result);
8 \# }5 h! q. ~+ H) o* u//spit out the results
1 Y6 x8 E) I. d" ]( Nmysql_close();" ^6 H% r7 T% {4 ]* B, j
if($user == 1) {% p1 p3 {- g8 L! h8 q3 j& L8 i  k
print("1 user online\n");7 _/ u0 ^& n; S* `3 V
} else {5 D/ o0 H1 R; t# q. Y
print("$user users online\n");3 N2 L' S: S- C9 {8 Q8 {$ D  ~# q
}( \5 }$ U9 A; U* `3 C; M
?>
0 \. e3 q8 l9 }% c
) d7 v6 {0 V0 @3 }) R* Y6 w以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
, |1 l/ n$ G6 T& N4 A, u' i* ~时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。# r- n" t* M' A9 A: ?7 U2 Q
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 r" y7 G- I1 V* T1 _9 w! B1 V) m7 s当然啦,这两款主机也是相当不错的。
1 y* b- S* A  ]. z" o0 h智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
9 q% k, r5 z1 v标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6 H# L9 K- M" @9 Y7 m: P
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
: t+ T- f' |6 r0 r; f! B空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55; `; ~/ S# a6 z5 R' ]. Y$ \
自己加QQ去问吧。

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