|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!% L& k3 ?* ^2 K; z; V0 ~
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 |. k; \1 c. g e; U
首先我创建MYSQL数据库表。
! H, c' k+ v [5 k7 T" xCREATE TABLE tablename (
) y. E2 ?# M: v5 V* y: ofield type(max_length) DEFAULT 'default_value' (NOT) NULL( l1 x0 A- M6 {, S2 G- S
}可以使用的SQL语句。
8 I9 }5 S5 Q+ P8 g- ]CREATE TABLE useronline (
6 i, G6 E# J, g& m& L' K: D2 |* _timestamp int(15) DEFAULT '0' NOT NULL,
6 q1 |; S0 \* i% sip varchar(40) NOT NULL,$ c$ E/ e/ r. f5 I$ ]
file varchar(100) NOT NULL,
& w$ x" r9 W" \6 l( OPRIMARY KEY (timestamp),4 Q: V6 c4 p! N
KEY ip (ip),7 S% d, Y( v- ?$ }" H9 E- g
KEY file (file)9 o0 j) U; F. P% b
);下面我们是PHP脚本,首先我定义MYSQL的信息。
, G2 x! E3 Q8 c1 F5 l$server = "localhost"; //你的服务器/ R8 Q1 Q2 X0 W" v
$db_user = "root"; //你的mysql的用户名* B# G) {- g# F3 ]' |. y
$db_pass = "password"; //你的mysql的密码7 Y' f4 S5 }& H
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" b3 F# z" Q( \+ H" c" W* |$timeoutseconds = 300;取当前时间。
$ d9 c1 C X& \8 `$timestamp = time();上面的完整代码:. ^/ v0 }5 W8 O8 h; ~# }9 T
<?php
' _5 o, r5 y! `4 o' n$server = "localhost"; //your server, X* D& @2 ? O \2 F
$db_user = "root"; //your mysql database username; P0 M# ^5 P1 { f9 K0 h9 q7 k3 K" T q
$db_pass = "password"; //your mysql database password if any, \' t% V' X+ I' h1 T; H+ {; Y0 i
$database = "users"; //the db name
3 ]+ z& H6 _! o k; j8 j. L5 V$timeoutseconds = 300;//timeoutseconds limit) H; ^! b( s& X1 @& g2 w
//get the current time
8 w7 [, f* G9 _3 o+ y$timestamp = time();
G/ T0 c: S/ v; F( x//calculate the lowest timestamp allowed
, ]7 A. v2 n- L* b: h7 C- W$timeout = $timestamp-$timeoutseconds;
8 l- N# n6 e. }# A$ \# b# p/ ]- @?>连接mysql$ H# x+ n0 ^3 X% F+ N
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。' H+ h1 a5 }" H' W
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, I) c/ c7 l" \0 Q; f" P0 p/ Qmysql_connect($server, $db_user);查询数据库的代码:9 S; Q0 f( V# k" C% K% G [
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
0 n9 X q, ^6 w+ s& k7 {$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ a7 ?$ R/ K6 A k('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 E0 z# a7 a6 f7 g% G0 m4 I' x! O如果用户用错误信息的话,这样处理。8 l0 g$ n2 h5 a
if(!($insert)) {
+ A3 u5 X. R' z2 _- `' tprint "Useronline Insert Failed > ";# X/ F- C" @- A* o% g: e
}然后实现当超过设置的时间就删除该用户记录。
' H; x8 O# F% ~0 x- Y+ P$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, K. N+ d$ M2 v, x3 h
if(!($delete)) {
; T% \9 W( A* Y- ]8 @( xprint "Useronline Delete Failed > ";( T" ~ Q& g2 K7 u, I
}下面我们解决数据库中不同IP的问题/ b( K) v: f2 x+ m/ _* ^. \
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; z3 ^/ H. R' N6 U) Jmysql_num_rows(query);来统计用户,代码如下。
9 B9 Z/ h" x A2 D$user = mysql_num_rows($result);最后关闭数据库。
' J/ L0 t/ W. s( Rmysql_close();显示在线的人数。
8 G) r5 v! ?0 _+ O- Y* l: }& Aif($user == 1) {* M/ _ z. T9 D8 h/ w! o
print("1 user online\n");# b- z; i% |" `- z! H
} else {- d- n) i, P# s% R0 `+ l, |7 `
print("$user users online\n");
8 q+ |2 q1 Q% I; t& ~}最终把上面代码写成一个PHP文件如下。) F ^, ~5 e% D% O& W) s+ A/ |
<?php. s) ^5 U+ ^8 S$ e6 W9 ^$ @! k
//Put your basic server info here% L, ?/ z! I7 z5 v) y1 [ j( w
$server = "localhost"; //normally localhost
% c9 v- w9 ^$ w1 F K t$db_user = "root"; //your MySQL database username
- k. x( C! o* e) B" Q9 _$db_pass = "password"; //your MySQL database password$ l: u5 d* f+ o' ]# O! e
$database = "users";9 Z/ U& s6 h' {5 i* x* G% s- U
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. W; @ g6 s/ G1 S% w8 C& X// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 u1 b# V+ v: R' _
// $timeoutseconds seconds)
6 O$ z: M9 s# F4 t4 T# N//this is where PHP gets the time
3 X, X- s X2 q7 T% }# P3 l6 P: X$timestamp = time();4 `) Z4 k* f% g
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed7 \/ v9 P0 e/ E, u1 j$ k/ }
$timeout = $timestamp-$timeoutseconds;
U& p2 X8 _1 D2 `//connect to database
) G' B! b- h; a; Zmysql_connect($server, $db_user);
* J! a" \+ c# }* Y2 l//add the timestamp from the user to the online list% Q. `& j Z$ v! ^0 u5 m
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( M* N8 Q* ?; M3 _6 F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ V+ @ d0 @' h& g$ }# |if(!($insert)) {) i0 q9 Q4 a* }0 V$ |- T8 B5 r
print "Useronline Insert Failed > ";
3 @% F/ S$ M% n% z( c+ @}* v! g) S. V( t# J: y- H1 Q7 i
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 H" `9 \4 J- Z1 @6 }2 H8 Z) G$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");7 v# [+ `6 u0 s! h) k: h
if(!($delete)) {
; }$ [' P- i' s- o8 Z& Kprint "Useronline Delete Failed > ";! k; p' k# i# _: E8 @
}
3 W* `( j# t# e: x, h9 R//select the amount of people online, all uniques, which are online on THIS page
( z( Q8 }/ M2 n4 n$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ L( V3 \- H+ F
if(!($result)) {
% i! b3 ^, \. kprint "Useronline Select Error > ";
9 x! c- B8 Y* y) ]5 d% [% z}
4 ?4 v& L$ f! J, _- V3 }4 R//Count the number of rows = the number of people online
6 n" C& E$ R5 S2 i" D! W$user = mysql_num_rows($result);
0 {: Q0 A0 l4 p) c7 j+ d- j//spit out the results
6 g# L! a: @% q: s _; i% {mysql_close();# ^/ y7 M4 V" D' m7 T
if($user == 1) {
: V2 W% a. t$ F3 i; }print("1 user online\n");
6 h& a( z: l# G2 w% B+ J$ b} else {
; `! h2 ]5 I- I' Nprint("$user users online\n");
4 H+ J) s) [+ P" F% e. j}
% q. c7 X* u, e f?>2 [7 ?7 v! x# o# u3 h1 U: e3 r
6 T$ t1 x7 p, g; ]3 l% G1 [
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。# P$ t2 [' [3 S( J) M$ \$ W
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
. V( }( L h* S$ I& g& p% k我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; u$ g8 y* u2 T3 d
当然啦,这两款主机也是相当不错的。9 l0 }' g: t: Y5 s) T q
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年/ P. {- I9 m) a! U$ g9 o
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年! ], s* B& ~' W5 f) o
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
* `- N% ~% y0 G$ R, Q, v C空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
5 Y0 ]# v: w) ~' Y* Z! y* l6 q1 s! ~自己加QQ去问吧。 |
|