返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ x# _* d+ w6 r8 j
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
* h/ A' W; t' a) r% d9 R首先我创建MYSQL数据库表。
9 V% r# R7 B( g6 q8 GCREATE TABLE tablename (
2 X: C  U7 S5 s+ yfield type(max_length) DEFAULT 'default_value' (NOT) NULL
# ~0 C; H0 G$ b/ E}可以使用的SQL语句。  I* M/ ~4 L& _+ k6 |
CREATE TABLE useronline (% M3 W9 i3 e% t+ k) h6 Z0 n
timestamp int(15) DEFAULT '0' NOT NULL,
9 {9 D9 N5 s& rip varchar(40) NOT NULL,6 d1 K. }  ^! S- r* O$ B/ L& O
file varchar(100) NOT NULL,
- y* p8 c8 h9 v% _, \PRIMARY KEY (timestamp),2 A' e. }* V) a, b8 y! q" r
KEY ip (ip),
& v  f' x! R  D8 O* C0 G2 c0 jKEY file (file)9 x5 N+ g2 X$ ~; j, d% ]
);下面我们是PHP脚本,首先我定义MYSQL的信息。
- d4 V6 U( `# q. i+ E  Q" {! p$server = "localhost"; //你的服务器9 E; a% j9 ^% ~
$db_user = "root"; //你的mysql的用户名
0 Z0 b! r# o4 \$db_pass = "password"; //你的mysql的密码8 y- u) f6 C0 W1 ~
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)5 e' a" u2 a) U6 ~, Q( H
$timeoutseconds = 300;取当前时间。$ e; U- d$ Q  r9 }1 C" V
$timestamp = time();上面的完整代码:
/ ?  z& E4 u6 e6 G# |0 i<?php
; \8 w4 ^$ P# i. }) e/ G3 {$server = "localhost"; //your server- x9 T! g% o9 m/ J$ J9 m2 D  I
$db_user = "root"; //your mysql database username  g1 j; _# {4 P" O" b5 @( S
$db_pass = "password"; //your mysql database password if any
# G, ^) }* p% Z$ z$database = "users"; //the db name5 u+ l4 f* Z$ S3 F9 V
$timeoutseconds = 300;//timeoutseconds limit
; d# w8 m- w" W$ Z; t//get the current time
2 G2 a( R1 {8 `) U, C$ ]$timestamp = time();( |( z1 W" o4 `6 u7 L
//calculate the lowest timestamp allowed4 I! o! }1 ~; @) \2 a, \
$timeout = $timestamp-$timeoutseconds;
7 l1 N8 x' a& P?>连接mysql, q" B2 E5 Q) W
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
1 V# p( v* t4 A5 {mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ p; B' F5 R% g2 p1 T. Lmysql_connect($server, $db_user);查询数据库的代码:
9 e: T+ \! Z/ j. ?8 O$ smysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
! ?# j9 _2 N/ H$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. A; A6 a4 r4 K$ e- t' Q* t5 Q/ I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 H4 f1 X8 Q9 J
如果用户用错误信息的话,这样处理。# w) G, i3 _# |2 F- F
if(!($insert)) {
5 O+ v( }' z5 Hprint "Useronline Insert Failed > ";9 n1 G- n0 o2 f0 M+ P
}然后实现当超过设置的时间就删除该用户记录。8 D# D; [. G  I9 F# ]
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
! z" ]- x9 @0 T( ^3 fif(!($delete)) {
0 T' Y% m) i0 e% b% H, dprint "Useronline Delete Failed > ";
  Z4 N0 B% M$ J, m( A! V* l: U}下面我们解决数据库中不同IP的问题- v, `8 g$ V3 A- u- s" e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 T  s+ @% A; v; q7 jmysql_num_rows(query);来统计用户,代码如下。0 Y3 f9 |% n" ~% E, N; }* H# s
$user = mysql_num_rows($result);最后关闭数据库。4 \, ^  s/ ?7 K6 Z2 [$ h% T
mysql_close();显示在线的人数。7 o2 G" }# L; L" r
if($user == 1) {
% G8 r3 D1 Q8 E- ~) @print("1 user online\n");. w; @7 r% s! B$ K. L
} else {, g4 G" [) l& z4 f) m
print("$user users online\n");
: W7 E& w: z! t}最终把上面代码写成一个PHP文件如下。
5 l) o4 X- _0 W* a6 T; X) E) |1 M<?php
1 D* {' @3 z( Y* {6 u//Put your basic server info here
! }* O# m9 `- T8 @0 e$server = "localhost"; //normally localhost
) W2 c1 K  k* H0 b( q- X$ c$db_user = "root"; //your MySQL database username' d) W' s6 _# {5 O' `
$db_pass = "password"; //your MySQL database password
, n- h+ _+ p2 B1 V$database = "users";
1 y, V7 ]# C5 q' K5 G$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
7 O" @0 U  |6 K! E( g// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last& c0 R' W; C$ i5 F; v& g
// $timeoutseconds seconds)$ e8 J. h3 b( t; C. ]
//this is where PHP gets the time
' a7 N7 Z$ k1 R0 l" o) n% [$timestamp = time();$ p# R! P) m- A" Z4 G/ G
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 J3 r7 A% F8 P
$timeout = $timestamp-$timeoutseconds;3 Q2 q8 `8 w. B' G$ a# S& E3 m
//connect to database
# Q/ Y0 C; X! Q; \mysql_connect($server, $db_user);- d& ~& [. q; T+ @; q* a* G
//add the timestamp from the user to the online list
  b4 k, ~5 U  V3 o: ^6 ~# Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 i" Y; H5 F/ N# R5 a, H) m- l('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" R( B, z2 S  _. K; Kif(!($insert)) {
) r8 G! [2 X3 ^' e: b2 `" c$ w" |print "Useronline Insert Failed > ";
/ ^8 k2 }$ e) h6 O" x}
4 O* G4 u9 \) D//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: i" M* U1 e7 e0 u) |( l: s
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");. j( J" m7 a5 i
if(!($delete)) {4 Y6 B, @3 K& w7 S* f3 b: J/ C
print "Useronline Delete Failed > ";
+ ?: n6 c' K: w9 Z}& }0 C+ l* b9 c. W: n7 h* B
//select the amount of people online, all uniques, which are online on THIS page
9 i, P# w7 ~4 O( }& h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 x. o& a( D; j+ ?4 c9 Rif(!($result)) {5 A' O1 G" a8 l" Y. u
print "Useronline Select Error > ";& G% m5 Z2 Z4 i+ @5 m9 t: V
}
% V. @; ?8 M; G//Count the number of rows = the number of people online  b# A& Y) P$ f) h, |
$user = mysql_num_rows($result);' |9 a/ @7 W3 ~0 z. F$ _* Q# u4 ]
//spit out the results5 M1 w5 j, C( B4 g
mysql_close();/ [! i0 I* e: r$ }! U, ?
if($user == 1) {
9 s. r7 `' K' Hprint("1 user online\n");
) [& k. T# W3 R2 \4 A6 S- G+ r) U} else {
; |" e8 H( O, kprint("$user users online\n");+ h1 e% D6 r1 }( s: f
}$ `1 N6 P1 [, N
?>
0 d5 G# f% Z- l" z  u7 n) n; m% n* T. |1 s- r" E
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" V$ ~* _4 N# Q* o时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% d8 Z; v' S# R8 {我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 X. S- y' G( R, h" O当然啦,这两款主机也是相当不错的。
! V5 w% m' ~/ d7 A智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 K, T- @* s; J1 u& y标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 q5 o5 \; M1 `2 \, p$ ]$ E  O8 x提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" u0 G1 Z+ X3 {' w+ `$ E( F空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
- W) m2 Z8 D! ?+ v自己加QQ去问吧。

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