|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 V5 ?2 ^$ j) ]; S2 h) i7 q& Q
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ V9 r8 b- R; |* p P- y' O3 B6 X首先我创建MYSQL数据库表。
0 _: g# m5 g6 M) G# j, Z3 hCREATE TABLE tablename (
1 d9 ]* D& |* Y+ A0 N2 {field type(max_length) DEFAULT 'default_value' (NOT) NULL5 \- `. O: ~ z6 E, @% e
}可以使用的SQL语句。
8 m8 ~: E# D Q0 n% p/ A9 _CREATE TABLE useronline (1 [7 s, H r$ z" w/ w4 j# D
timestamp int(15) DEFAULT '0' NOT NULL,$ G4 j7 W& E% F5 H
ip varchar(40) NOT NULL,/ w& L# w4 n: ~ M
file varchar(100) NOT NULL,
2 N) M. A; U$ S$ K5 h' B( EPRIMARY KEY (timestamp),
; x" a2 R2 ]2 N% T3 j tKEY ip (ip),9 K6 C+ D7 i* M l5 ?
KEY file (file)
8 m- t% C1 U2 g' [% K);下面我们是PHP脚本,首先我定义MYSQL的信息。
; j8 L( B" _# b: d$server = "localhost"; //你的服务器, L, H; o5 j# ?( ~1 k4 R
$db_user = "root"; //你的mysql的用户名
( A" t' g8 u2 |5 ?3 g$db_pass = "password"; //你的mysql的密码4 T4 h" |0 z& }. W; N* R
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)9 o5 a: \+ t- T
$timeoutseconds = 300;取当前时间。
. g0 x8 @$ q. _$timestamp = time();上面的完整代码:% r8 r. a* E9 H2 s$ a' O& f8 X4 `) F2 n
<?php
4 @7 c, P, d7 \$server = "localhost"; //your server9 r4 v Y/ N' i5 K
$db_user = "root"; //your mysql database username
2 ^; K6 g s! H2 q+ J$db_pass = "password"; //your mysql database password if any
f) {+ p; i% j+ |* ^( J$database = "users"; //the db name
- z& D6 \- p, [( R4 Z$timeoutseconds = 300;//timeoutseconds limit9 J3 |! |5 K. b
//get the current time
# C- s. s: ^6 [$timestamp = time();
- @& a& X7 i' R, h$ K//calculate the lowest timestamp allowed
L% Z7 V! s2 @* i4 [% e$timeout = $timestamp-$timeoutseconds;. T& o9 L9 P! @- e
?>连接mysql: h2 m: o/ N$ b
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
u% U, ?$ W) i! M$ n' [) h/ d7 Jmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 d0 X! Y F: D: A: f3 K- |5 P+ p. gmysql_connect($server, $db_user);查询数据库的代码:! V2 b @/ s4 j7 a6 p& ~2 D( v
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 M) o/ n. ^7 _4 D3 \
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 u7 n! l0 M2 T' w
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 ?6 w* Q; l7 ]% _# {如果用户用错误信息的话,这样处理。; t) z( i& G3 Y& O* v, z6 f- v, G
if(!($insert)) {/ I/ x3 c' L. ?4 m- m
print "Useronline Insert Failed > ";! d- J/ i) ]2 N1 o& T( ?! e2 R
}然后实现当超过设置的时间就删除该用户记录。2 ^" T7 z- g4 x$ w
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 m' r; t! b) `2 `- X- k" C
if(!($delete)) {( P7 @" O8 a! a$ d/ A
print "Useronline Delete Failed > ";9 D" D& d, ~+ [% a3 n; K! D
}下面我们解决数据库中不同IP的问题
& @ R$ |9 c1 M7 n0 U) U! p$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" p6 n" \& P7 V5 f. M- K
mysql_num_rows(query);来统计用户,代码如下。- L0 |( B; D' v* P6 [! D
$user = mysql_num_rows($result);最后关闭数据库。) K. F2 n# }' U/ v2 @
mysql_close();显示在线的人数。
. e$ ?# ~6 T2 k: wif($user == 1) {
' d+ t6 H6 `$ z; mprint("1 user online\n"); ?8 C' \$ _0 r; x8 ~+ q6 ]* H
} else {
8 Z* ?: i$ i& }; u% {, uprint("$user users online\n");
! i* E: I5 {! l/ O/ t( l}最终把上面代码写成一个PHP文件如下。
3 l) Z+ ]0 |$ i/ {6 f) [: M4 @6 ~/ a<?php& M( s8 s+ H5 q C% T K
//Put your basic server info here9 ?+ b6 W: F. z# ~; E0 z
$server = "localhost"; //normally localhost9 v# g- V3 ^! w$ I' Z! M# k7 p
$db_user = "root"; //your MySQL database username8 @% M* F# }' P2 E d
$db_pass = "password"; //your MySQL database password
2 ^: Q& m, ^( _2 q$database = "users";
2 O5 B/ @$ L, w$ i2 B! K$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! }, z$ ~2 R8 k" l. \// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 |& M8 p' @3 ~* r. k// $timeoutseconds seconds)) W$ o% j0 d+ \: ~8 u$ p
//this is where PHP gets the time
6 y7 j% L! w1 O- x' C! n8 _$timestamp = time();: @# `$ w5 E2 A$ f+ C/ _4 I
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! _& ^$ V# _) x) U4 d) H% z) z1 Y
$timeout = $timestamp-$timeoutseconds;% P2 e( m E$ {& G& _* p. `; ]3 Z
//connect to database
0 S& s. m# [0 h: I7 m' u- y0 ]mysql_connect($server, $db_user);) O% B/ l# r9 w8 k+ w# Y
//add the timestamp from the user to the online list
" p+ o. V8 P/ H e6 a4 F, e$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- I* T Q* u: m0 T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* j2 ^; r* D- O( G" J
if(!($insert)) {
+ C2 a5 g+ k0 @. L; P7 h) E Y2 y' Eprint "Useronline Insert Failed > ";
2 z; G# o; u6 l, A6 N}/ ^ T- R8 E1 S
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds. N$ Q* X! [4 m7 l$ E/ Y7 t+ V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");' W- r. _0 {" @( N* _% |
if(!($delete)) {7 ^8 F5 |/ P# V
print "Useronline Delete Failed > ";
3 p+ B* K4 j0 G5 m" s, z}
* a9 z0 o* A# W/ L$ M; b//select the amount of people online, all uniques, which are online on THIS page
" k; m. A# S9 j& l a: _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" H v. L: x& a$ W4 J# _* Zif(!($result)) {7 `5 `0 j% _6 ]
print "Useronline Select Error > ";- x4 e% r1 X' v2 T+ G: \; w; U; G E
}* A* o& g& G, a/ B, j
//Count the number of rows = the number of people online! P) L# D+ r5 Y; [* a9 g" N E
$user = mysql_num_rows($result);5 h6 ]* Y$ y) Q- k. T" K0 n
//spit out the results, `, U! c# |1 r; o
mysql_close();+ R* s. D( j2 ?$ j
if($user == 1) {
7 V- d8 X( P, \3 I9 V8 fprint("1 user online\n");8 I& p& t. {9 N! F( X5 e( Z& k
} else {
1 w7 ^* o v/ p( B) _2 G2 p; bprint("$user users online\n");
/ @: E Z4 O% V4 W) ?}7 f1 F5 g$ l( J- G1 i$ }
?>4 `& Z+ C% `/ f
6 a, n4 K' R0 I2 l" h, F
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 k; F/ P- m4 M7 u; k$ a2 y时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( c# P% l) m L我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
+ U$ }8 b9 @$ P, }! M1 \当然啦,这两款主机也是相当不错的。
5 y. k2 g3 u! ?1 h# H智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年. a" m. T2 |( j. x' [
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ l, N& z8 Q. k. i' ~# t; D提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 k1 Q' h, u( Q2 t. e7 {* t
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" e* L% l2 q; r/ O5 |& \7 Q, O
自己加QQ去问吧。 |
|