|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
. o/ v5 o' Q8 o% {2 M我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。 a+ g7 V1 g! X4 }& g3 w
首先我创建MYSQL数据库表。
' A2 s# t+ |) _CREATE TABLE tablename (
% x0 A% T% U! \- |( lfield type(max_length) DEFAULT 'default_value' (NOT) NULL) V/ c5 ]$ z/ F! E! d G
}可以使用的SQL语句。
* g: |, Q* y0 @CREATE TABLE useronline (5 l q1 I/ H! h7 t& T- C1 [ o0 t' ?
timestamp int(15) DEFAULT '0' NOT NULL,
+ o& F6 d4 t! c4 o0 tip varchar(40) NOT NULL,
6 Y3 a3 w5 ?, Dfile varchar(100) NOT NULL,
% v1 D' D5 O3 {% T7 i/ {PRIMARY KEY (timestamp),
9 d: @/ H- x% p) B$ {KEY ip (ip),
3 N% u+ [7 O( W7 T2 LKEY file (file)' N3 ?2 Q, E9 Z8 h9 _+ F6 n
);下面我们是PHP脚本,首先我定义MYSQL的信息。9 f' e) s# i; e
$server = "localhost"; //你的服务器$ R, @4 l; z- ?6 b* J: F. V
$db_user = "root"; //你的mysql的用户名6 Q, c8 [$ C& f. F
$db_pass = "password"; //你的mysql的密码
# O) K" j+ O% t; n$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 U; d2 F- Q, h" z$timeoutseconds = 300;取当前时间。! ~' w+ K' K$ d5 l9 l
$timestamp = time();上面的完整代码:
$ j4 h1 U# R1 b: ~<?php
6 F" _" M \' l* n$ y$server = "localhost"; //your server# s% ^3 w/ a# i' ~+ H8 W
$db_user = "root"; //your mysql database username
! {% j9 n+ l6 s5 k$db_pass = "password"; //your mysql database password if any
1 c4 q+ \# ?1 T/ s+ i$database = "users"; //the db name
+ V- V' U# Y+ o: T$timeoutseconds = 300;//timeoutseconds limit+ w, s9 E4 E6 S+ p
//get the current time
" [, q9 T' G& G, J. ^3 U$timestamp = time();9 g1 O$ w) g$ D5 M1 D8 T9 q$ a* [
//calculate the lowest timestamp allowed
7 r9 s& `+ ?* r: Y/ ]+ v! W0 T$timeout = $timestamp-$timeoutseconds;" X6 P% w' D! `( ?
?>连接mysql
! }4 N5 H: T* fmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
! L+ Y4 g! v W5 z) m5 v8 E# qmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ m0 S Q2 |( |; P0 ?- W% `# Vmysql_connect($server, $db_user);查询数据库的代码:9 U% P' Q! M- w
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. d. J; ^( F# `: O4 Q% ~# y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 d+ R3 L1 E2 l; y! A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ e. l% D% O$ r o( p/ O
如果用户用错误信息的话,这样处理。
6 n( h8 z j2 {if(!($insert)) {
7 Q- r7 L V& j# K' i& X$ @) Q- uprint "Useronline Insert Failed > ";2 o) J' [0 I" e0 T+ r
}然后实现当超过设置的时间就删除该用户记录。# e2 H& S( a! |+ E& W
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 b [! J! @3 g* `( H
if(!($delete)) {
- b9 ?- R0 c7 Y/ V3 }9 K; |print "Useronline Delete Failed > ";
" U. R9 u! z* p}下面我们解决数据库中不同IP的问题8 x; p5 [6 D5 n9 z6 R' q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; k1 r% I+ U8 b+ kmysql_num_rows(query);来统计用户,代码如下。) n8 J; [2 ?8 R, h4 d
$user = mysql_num_rows($result);最后关闭数据库。( U% H& [7 @9 U1 D) L; W' Q7 S
mysql_close();显示在线的人数。$ O8 b+ O: z. C) U5 ^
if($user == 1) {
: e+ Q' ?6 P# y" A6 T5 _print("1 user online\n");4 \/ A' Z* e: [" o
} else {/ \# e) q! v& ]9 ~" {0 X( w
print("$user users online\n");$ C3 ?* N) q3 e( E6 q
}最终把上面代码写成一个PHP文件如下。
+ ~1 M& A1 M5 w<?php
$ W1 |8 ~' \* z5 L- Q/ @//Put your basic server info here0 ~% f. J$ L# @9 n: F; J G
$server = "localhost"; //normally localhost" {, `& M: Q2 O8 E( X0 b; J9 i
$db_user = "root"; //your MySQL database username
6 U; t8 t; G& N" L$db_pass = "password"; //your MySQL database password) M0 ~1 p4 N7 ~$ K
$database = "users";
L- n! ], m o1 O7 Y4 A5 ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are2 w {# w/ t6 M$ h# _( t
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
# c4 @. ~, B, _" p" Q. F. @// $timeoutseconds seconds)
0 }1 X& u, [3 I# p//this is where PHP gets the time
7 l$ v& F7 y7 H* {2 s& g$timestamp = time();
1 s1 i9 J+ |1 n7 i; Z# Y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed2 I* @: c j' r4 v: k
$timeout = $timestamp-$timeoutseconds;
/ e6 R' @$ T2 B( P% `//connect to database/ j* ?* D+ E# x- r# K
mysql_connect($server, $db_user);
, b$ U: G ?+ Y0 j" D# P$ L//add the timestamp from the user to the online list
. w, r+ f( t! ]: \# `0 e5 ^$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. L% K! q1 G1 m7 f h('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 I7 ^6 V5 H/ a9 N1 H/ sif(!($insert)) {
' u5 x5 u# s& n7 Lprint "Useronline Insert Failed > ";' R* E# k; _7 _: o
}6 B2 r% N. p4 E' l6 _; L; X, M( E
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ E, p- R4 c. n4 P9 Z/ u
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");9 k( m+ r1 W, V' E! q3 F
if(!($delete)) {
( z' @0 H8 }7 r6 p/ @4 aprint "Useronline Delete Failed > ";
! }/ j- q. `+ h9 x}1 ~7 I: [' ^ k+ |: b- d
//select the amount of people online, all uniques, which are online on THIS page
' R. ?! u& ?4 ^: N6 x$ t) f$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");& a: ~3 M! Z ]. H
if(!($result)) {
/ i' z @0 `' }: H1 wprint "Useronline Select Error > ";
% g6 i2 S% o3 Z5 D9 P1 J& V}+ l0 o, q6 L: e8 z
//Count the number of rows = the number of people online
% c/ g3 D9 s9 w. D% T$user = mysql_num_rows($result);
1 ~7 `: V3 I% x8 x6 v//spit out the results
/ T6 J7 f/ H2 k" H0 G# pmysql_close();- q& @4 G3 ] f Q
if($user == 1) {
+ H% R2 P4 A: N' Iprint("1 user online\n");
/ G, `" }$ V# H8 V& x0 {9 k3 j} else {
3 u% {$ ?: B( F7 pprint("$user users online\n");& t% p& a8 G7 @
}* v! n e; c7 b5 f' Z+ Y9 J$ t0 \
?>$ q9 W& ^' }5 |4 K2 P% |. ?' J
% U2 P' _# f% }* }3 _2 z j
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) u! y: b& p7 Y) g3 }( g0 H+ T0 g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。' A! ?# f8 y. l! x: q5 a1 |
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3 ?# ?5 P1 f ~% h
当然啦,这两款主机也是相当不错的。
2 i% P3 K: V# f i+ P智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
3 R) f/ W$ @: A8 a6 v标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
9 D9 J( @) k. J7 `提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ( ?% y2 z$ _3 r8 @# }
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55, s! ]" W& U+ _9 f
自己加QQ去问吧。 |
|