返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, H/ E1 Z  A6 j2 C" K0 x( t+ f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。* u; F2 @  q$ s: G( ]: _
首先我创建MYSQL数据库表。! e* E6 B+ M4 m. e  o- a
CREATE TABLE tablename () J- {6 O: l" s1 O" U) D) c
field type(max_length) DEFAULT 'default_value' (NOT) NULL
9 d+ j+ f$ ~7 R1 }2 b}可以使用的SQL语句。
: b# m) q+ u7 u5 R4 xCREATE TABLE useronline (/ A. }8 t1 v5 F6 R: \$ r* i6 i0 u
timestamp int(15) DEFAULT '0' NOT NULL,% ^0 J9 Q) Y* d" \
ip varchar(40) NOT NULL,$ R7 Y4 M3 r( t* X
file varchar(100) NOT NULL,; C7 ]- m3 L/ Q
PRIMARY KEY (timestamp),/ z! M) E- L- f. Y5 N- ^: {: }2 S8 X
KEY ip (ip),
* I. f7 e6 C% [+ q# w8 fKEY file (file)
* S; Q2 f7 }( c: |# j( t  Q) ]);下面我们是PHP脚本,首先我定义MYSQL的信息。
) n4 X! ?; [2 ^$server = "localhost"; //你的服务器
# ?2 y0 j  R- c$db_user = "root"; //你的mysql的用户名
$ n$ i& L" \4 @% F# K6 j$db_pass = "password"; //你的mysql的密码
' L; U& E7 |! Q  r2 c* w0 c0 z$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 Y3 z* @( G2 g6 u- B. o$timeoutseconds = 300;取当前时间。
* a" I- l1 G  A' _* _$timestamp = time();上面的完整代码:
  Z6 e5 c& ]7 i$ A' X1 c4 N; Z+ I! B3 U- Y/ p<?php# ?; R! U% z+ {% O
$server = "localhost"; //your server- f# X7 W6 R7 Y1 J8 ^+ S6 P
$db_user = "root"; //your mysql database username$ d5 [5 B* V5 Q8 @5 i& u
$db_pass = "password"; //your mysql database password if any
+ A  f7 j' \3 k6 N% v$database = "users"; //the db name  p+ W: r& K  ^3 P  i6 h5 m) K
$timeoutseconds = 300;//timeoutseconds limit+ A; F; w, i9 `# N. @
//get the current time' A9 Z7 A2 m7 Y5 {  B8 w9 t
$timestamp = time();
: k0 c9 Z7 t: w0 x//calculate the lowest timestamp allowed
( W( l  H+ O/ r2 |' J2 B% [3 D1 K$timeout = $timestamp-$timeoutseconds;
0 X* b" h* Q( p# z; n?>连接mysql
" g5 `. d7 d4 E9 a- p6 @mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ y" P" C" V1 Z/ w" S3 Z5 tmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 r0 r* \, Y4 Y; ?* r
mysql_connect($server, $db_user);查询数据库的代码:1 B! ~- f/ j7 \& ?! Q* m
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。( n: Y9 B9 w/ a
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 N7 [# u6 \; l- _+ j! [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: L% Y  g3 z( J/ W' e) q
如果用户用错误信息的话,这样处理。7 E; M4 H( b" j7 \. E, b
if(!($insert)) {7 L) x8 v' ^6 B* a9 Q4 f! K2 k9 o8 A; J
print "Useronline Insert Failed > ";
( c9 ]# r! Z8 P}然后实现当超过设置的时间就删除该用户记录。/ O3 b& ~3 e7 k4 ~. E6 p5 G  v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 R2 G. m+ ~/ @% {2 ~" @if(!($delete)) {
8 Z& D4 C# h( g* n4 z5 }# A. B3 t6 Rprint "Useronline Delete Failed > ";9 p( t3 r, c' t& `0 q; c7 G
}下面我们解决数据库中不同IP的问题: w/ J, ~. T# o; S
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 p& I2 z- [6 U
mysql_num_rows(query);来统计用户,代码如下。
( `6 g$ z% D) F# @! g/ ^$user = mysql_num_rows($result);最后关闭数据库。
! ?5 E$ B) r! ]4 Amysql_close();显示在线的人数。( t1 B  s8 c+ N& j0 m$ T7 a( M, X7 d* H
if($user == 1) {
% J8 O& E) v# bprint("1 user online\n");- u* x9 e. S2 v
} else {5 x& t1 M5 Y; ~8 S0 W* p1 @) G8 }
print("$user users online\n");
+ O1 Y3 K; ]  D# {0 m}最终把上面代码写成一个PHP文件如下。
  W2 g$ B, Y! x. Z8 t<?php
/ D( ^4 }: q! S- W; p//Put your basic server info here' w6 x' @& x) x' [
$server = "localhost"; //normally localhost% c$ I5 a, Y5 j% n
$db_user = "root"; //your MySQL database username
5 L4 i/ M$ R( u, B1 E& w% v$db_pass = "password"; //your MySQL database password0 u2 b* \( S) A) x( f3 W
$database = "users";2 `0 ?2 ]) e. d9 `
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
& _" a" @" `- P3 r// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" B; l& M, F1 Q* }// $timeoutseconds seconds)
& N2 o1 m4 A% x/ M//this is where PHP gets the time1 o; a/ t, e! d6 Z
$timestamp = time();
. z. r; \0 o4 M//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: r$ ]  p8 D% h7 m
$timeout = $timestamp-$timeoutseconds;
% G# ]+ |& C9 a2 Q$ n) q9 N6 R% a//connect to database6 M9 e" ~1 A- K/ n$ z
mysql_connect($server, $db_user);
! ?6 o. K4 q8 G$ z$ Q2 L# ]# f//add the timestamp from the user to the online list
0 d- R& f' y2 G5 q) \, f" k$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! P+ o1 }1 N5 j  }4 y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( v; X4 w9 {" |& W# cif(!($insert)) {! D, u0 A, D6 J/ s% s- h0 T* b
print "Useronline Insert Failed > ";/ g- p3 l/ X) D
}
9 f2 K; z5 ^2 |- X; ?- e8 X! m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.# U& u: I$ y& _$ t! j
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
7 ]' b3 e- m- @6 P# S  O5 _/ Sif(!($delete)) {' \: R) d4 p9 i$ Y3 L4 ~& g
print "Useronline Delete Failed > ";9 E) y7 O: J0 v4 Z. z
}
& d; C7 C8 E6 h. b( u: ~//select the amount of people online, all uniques, which are online on THIS page/ @5 J- f( {+ ?0 K3 w3 t8 W
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 F; m4 I: z9 P+ B. z. w* U
if(!($result)) {
# N" Z' {+ F" eprint "Useronline Select Error > ";, M; O6 }4 N1 T
}
) Y7 ]1 Y$ L7 J, Y# n//Count the number of rows = the number of people online
$ T, x; u) @. ^4 g! C% [  m$user = mysql_num_rows($result);- _6 l  }5 i: h2 U% ~4 i5 y& n
//spit out the results
% J( W( y8 T; U/ }& W) a, X1 umysql_close();
9 o" ^+ s) w: s  w$ \5 oif($user == 1) {
2 M8 C( ?8 L7 t, Q5 d7 |) k$ A4 rprint("1 user online\n");2 ]. b) K  M1 U' b& r7 C+ s
} else {
- |1 @  B- z  w+ G$ z3 _- {print("$user users online\n");
4 a7 W$ `, N; @9 i' q# J}" ?4 Q8 t6 Y1 t) f+ K
?>
) E: k/ m+ z$ u5 i& i
: w- R4 U0 p" F! q8 C: n以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。  W" b' M) X' \2 S2 S  }- n0 n1 E
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ u0 G3 h. _& E, f6 G
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% H* d0 {" T1 Y( N2 U  K& E当然啦,这两款主机也是相当不错的。) m/ f5 @2 R2 f& L% j
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年3 B" r, s& {. L: l9 {: }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年' H& n0 n4 P5 a
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& r1 U: |  T; p& N, j4 W% T空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
+ ~0 Z- B/ H- v3 _9 l自己加QQ去问吧。

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