Board logo

标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下! [打印本页]

作者: lilcy88    时间: 2008-5-28 10:40     标题: 刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 ]  q6 i6 T6 A7 V( w" K3 x
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" c7 E5 e3 k: R, z8 _4 S; d1 p( W
首先我创建MYSQL数据库表。
% @4 Q: P6 ~: l. H0 R- yCREATE TABLE tablename (
" l) V1 O/ J& k0 Kfield type(max_length) DEFAULT 'default_value' (NOT) NULL
2 L/ C. v' k; D; k}可以使用的SQL语句。
2 [8 n! g3 W& @1 g5 aCREATE TABLE useronline (
1 a8 T+ L( ?% Z( U. p, y9 ctimestamp int(15) DEFAULT '0' NOT NULL,: m, W1 a9 g6 a* |) g: T0 K2 a! c
ip varchar(40) NOT NULL,3 o1 J# ~% \8 C( f
file varchar(100) NOT NULL,
( p: O6 S% i$ ]/ d: {7 yPRIMARY KEY (timestamp),
) P1 C4 X3 e! M0 BKEY ip (ip),, r3 `6 `$ B$ B5 I+ H
KEY file (file)9 ^4 O3 v& {+ [7 _( ~
);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 H" R! I9 w, v2 ]6 a$server = "localhost"; //你的服务器+ W/ f/ S/ S7 K2 y5 Z# x3 l3 J% t6 \/ F
$db_user = "root"; //你的mysql的用户名/ \2 U& ^$ J# S  R
$db_pass = "password"; //你的mysql的密码
+ e/ o1 R: F6 G5 \" R7 G$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" K+ U- n1 r! U  U$timeoutseconds = 300;取当前时间。) o7 x1 X; M0 L$ B) d" Q: g; ^
$timestamp = time();上面的完整代码:
; n4 @% d3 S1 B& K. ~6 Q& b<?php  M6 _6 ?& w9 r0 c' [
$server = "localhost"; //your server- {7 L5 E2 v% I2 P+ x6 d; |, W) ]4 _- E
$db_user = "root"; //your mysql database username: c; _! k5 G: b
$db_pass = "password"; //your mysql database password if any7 r2 V! [4 y# F$ K6 F  T) n, |
$database = "users"; //the db name: i" W& b/ o3 e1 h  C- C
$timeoutseconds = 300;//timeoutseconds limit$ k; E7 |1 m5 }& l5 T9 o
//get the current time3 I4 h% L; n$ u- i) ^# P8 v/ s9 J
$timestamp = time();
" `/ N/ B' _# c; V3 d+ E. V//calculate the lowest timestamp allowed
8 h0 |& C( @6 D# ?$timeout = $timestamp-$timeoutseconds;
8 A0 k! v+ I1 q?>连接mysql$ k7 c* c# O. _- L  ?- P
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ {% ~! x7 U& |$ _5 u. Y( Wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- r2 P) S' }- n! a  ?- r' fmysql_connect($server, $db_user);查询数据库的代码:
: g( ]3 h% q. P  qmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: H. N/ L' Z3 u! O/ u+ s$ ~" t) P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, t6 w: Q9 X! d0 D$ t  R& T- u0 `('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 [9 h$ M8 b8 A# M. q. @/ q
如果用户用错误信息的话,这样处理。3 F. n2 `9 y2 g/ n% e
if(!($insert)) {% j* z3 \2 M0 ~4 @
print "Useronline Insert Failed > ";
. H2 l; x( n% u  F' }1 H}然后实现当超过设置的时间就删除该用户记录。
9 l1 B8 |# O8 x- Z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 e$ F2 m' }2 k0 d; f0 S: j
if(!($delete)) {+ {) C7 N# G" k& Z( m
print "Useronline Delete Failed > ";8 V& z" @, S" T6 p( ^
}下面我们解决数据库中不同IP的问题
7 Z* f$ W7 S" i  V) T$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" l  }' s" M2 D( \% L# a, h
mysql_num_rows(query);来统计用户,代码如下。9 B$ m& |( I1 R: ?; g0 U, ]
$user = mysql_num_rows($result);最后关闭数据库。1 T9 f# `2 p. i, ]& S' B$ t2 q
mysql_close();显示在线的人数。8 Z, l0 Y+ l1 f" C; }
if($user == 1) {
$ l% K5 Y" e# G, Aprint("1 user online\n");: S9 i: }- I: t. v9 g8 w) ~
} else {; A' w0 U5 \* H! P& i$ [! s
print("$user users online\n");
6 @, ~6 C4 Z  e' b' r6 I}最终把上面代码写成一个PHP文件如下。" \* Z- [  q1 g, P
<?php
- d1 x& S- k) n//Put your basic server info here9 U5 e$ _, a6 w
$server = "localhost"; //normally localhost
( P; M8 V! h0 C8 G' Y6 w" T- \& {$db_user = "root"; //your MySQL database username2 ]( R5 b/ `/ P2 e( |$ ]/ ^
$db_pass = "password"; //your MySQL database password
  c5 \) A$ C8 K+ r$database = "users";; M- \* x7 i1 B# w4 y5 e
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; \5 m- H3 e7 C& s  w
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last6 D) g( _3 R: m/ a( G
// $timeoutseconds seconds)' [) r' Y5 s9 D9 t
//this is where PHP gets the time
( X* s: h. E3 @# V! {5 _- V$timestamp = time();( p, W0 {- G- A( e' l. o8 Z
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* H  t5 e- h  q* x7 D6 C1 x) _$timeout = $timestamp-$timeoutseconds;
0 a# T2 n) R3 ~# k6 P//connect to database
. [5 O  E, X; w7 f5 tmysql_connect($server, $db_user);
1 s0 h8 z- H4 m. A  P& D//add the timestamp from the user to the online list5 r6 w+ Y6 C' {
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. n/ _. \2 W9 y2 t5 x3 U2 O/ e9 [1 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 Y* m) Z. V, b6 y# T9 X# @
if(!($insert)) {( Q5 V/ F5 n3 U) X
print "Useronline Insert Failed > ";  Y  a! y, Y* e, F$ z
}% B! E+ F! @# m/ J8 A0 Y1 ^
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.5 s; H+ [2 T. p: H: k- R( W6 V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& h" r* B9 B: a" O1 _, h
if(!($delete)) {
4 _* }0 W. t! }/ c' Zprint "Useronline Delete Failed > ";& L, N. l2 U/ @3 m1 {1 k& P1 D' t
}
' z5 A$ M: k# u: t# v1 W. l//select the amount of people online, all uniques, which are online on THIS page
9 m8 x! F6 G+ v$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# E3 H0 h( w/ D; k* x( i. N7 a4 Tif(!($result)) {2 _) B/ ^  }$ Y$ q7 Z. R9 P! p
print "Useronline Select Error > ";
- H3 o( |" W5 i- W  c}
+ Y4 T; C& h: a7 x2 K. P$ G0 M//Count the number of rows = the number of people online: s8 e0 T6 r2 y4 Y2 m& e
$user = mysql_num_rows($result);- o% l9 g5 R% q2 R
//spit out the results
4 D9 [, K7 _' J' umysql_close();" h+ S: ?+ r4 P) {
if($user == 1) {
% j5 Y( _) J% Y% W# X; Iprint("1 user online\n");
% B1 l5 Y* F& o2 n% s} else {
9 W- z8 N$ ~$ l5 Cprint("$user users online\n");6 z2 p; W9 Y2 W4 w
}
8 }% Q: s; L# p/ [, v: f?>$ @# C, N- R6 y" `! p
+ @/ O% @1 G( p3 j: I; t; I( O
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。: v: ]2 ]5 F  k+ j. {( c5 V2 [
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ x" E) x. d' }/ @! l
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 f0 f4 N, O2 Z, f2 t6 Z
当然啦,这两款主机也是相当不错的。: k# Z1 V) E+ e3 Y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年2 _% K5 a- O5 T
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 c4 L. v; v8 w) w6 P提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& k8 i: d- s/ {9 F4 G# L3 A2 r空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
( O7 ^; I2 d3 h' e0 W自己加QQ去问吧。




欢迎光临 捌玖网络工作室 (http://89w.org/) Powered by Discuz! 7.2