
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!: s( a* g! A Z# ?0 |+ |$ R2 c
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。- H6 r4 ^* u. F1 K5 w$ y
首先我创建MYSQL数据库表。" W! I- [' G6 y" j# ?2 g5 L5 j
CREATE TABLE tablename (3 g' v- N# J2 l7 x( R5 t
field type(max_length) DEFAULT 'default_value' (NOT) NULL$ Q' g' T h0 J! E+ q
}可以使用的SQL语句。
: c5 g2 T3 i6 z0 TCREATE TABLE useronline (
/ ?( t9 M7 V& m. k- T" w5 atimestamp int(15) DEFAULT '0' NOT NULL,1 [/ u+ b; Q9 C" }4 J7 g
ip varchar(40) NOT NULL,
% v9 N. v u+ Ifile varchar(100) NOT NULL,( ]: c8 B+ h3 b, c
PRIMARY KEY (timestamp),/ |, E) N- i- p0 s3 |
KEY ip (ip),; S+ h$ }1 K# i/ v+ t
KEY file (file)3 m4 q# Y J; ]/ }) e1 j
);下面我们是PHP脚本,首先我定义MYSQL的信息。7 R3 N# |' }% L6 q! C" s! u
$server = "localhost"; //你的服务器
5 f. z% v! J, v9 O' _$db_user = "root"; //你的mysql的用户名
; V$ u. F) l$ q) b# p$db_pass = "password"; //你的mysql的密码
: o- n2 L1 k2 u# J$ @, k! g( t" v$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 c9 ^7 e' L5 f O2 w& v
$timeoutseconds = 300;取当前时间。
/ X% B% p h" F9 P) L. y$timestamp = time();上面的完整代码:
6 ^1 S" n1 f( g$ q7 W<?php
8 Q7 e" k; k8 x$server = "localhost"; //your server, j; X1 n" O3 n2 j$ F8 f3 t5 ]/ b
$db_user = "root"; //your mysql database username7 H& u) J7 l \) K9 E
$db_pass = "password"; //your mysql database password if any' s& d+ s# _" N2 r
$database = "users"; //the db name
7 e4 n; @' F5 n) e; D: {( i$timeoutseconds = 300;//timeoutseconds limit
; Y( B, w1 d8 W, L5 k//get the current time
1 ]) J0 o4 p. [4 [: z$timestamp = time();1 }! h7 a& F, \4 k/ K- |& q
//calculate the lowest timestamp allowed
, b# r- H6 u$ H- _$timeout = $timestamp-$timeoutseconds;# v: q* V6 O2 X, [; q2 i# \3 d# ~9 z
?>连接mysql
5 U( \) s" f5 P# i& Nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
3 e; e, l: d7 A. m Zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% R, }) d: |; A, g$ }
mysql_connect($server, $db_user);查询数据库的代码:" h3 S5 s7 D6 A6 h/ L. _' A
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。0 v8 x+ W! `0 f5 W6 Y" c* f
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ c; q; ~ V/ e R- V9 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
$ l6 D7 X. H: F0 H, Q. o如果用户用错误信息的话,这样处理。, v4 e2 p) d" t7 c/ H
if(!($insert)) {# N' p+ y) @8 ]# U
print "Useronline Insert Failed > ";3 w: Y! _! l; v3 g
}然后实现当超过设置的时间就删除该用户记录。
, c8 X* l3 g0 s, n$ f6 v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。- q4 f. @/ j, A9 B& h6 ^
if(!($delete)) {
# x2 G! T5 T. }) d% X% Yprint "Useronline Delete Failed > ";- ?5 M# ?4 T% \3 J( ^
}下面我们解决数据库中不同IP的问题& K7 F. ]6 Y% d/ Q. W) U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& j( }6 n9 `/ O @2 p# Q4 w. H
mysql_num_rows(query);来统计用户,代码如下。
1 E2 {6 m& U( v3 Z$ C$user = mysql_num_rows($result);最后关闭数据库。# {; c: \, [; ?7 t1 Z7 d
mysql_close();显示在线的人数。
6 s1 Y6 K3 p# v5 x9 M hif($user == 1) {
8 s s! n. N3 yprint("1 user online\n");
# e: I" J% m& F& o' W" k} else {
! c, k. S+ |0 V" H& ]print("$user users online\n");3 O5 k. b6 O- H
}最终把上面代码写成一个PHP文件如下。
- @# z* q/ ^; r$ H; a6 v<?php/ M& k4 O2 l2 S V" `
//Put your basic server info here
4 P, N4 ^" Y, |8 @$server = "localhost"; //normally localhost: g9 ]4 f. d8 w, \3 n9 k
$db_user = "root"; //your MySQL database username8 [6 J9 |0 r/ E5 `+ d& ~ S
$db_pass = "password"; //your MySQL database password7 ?% ~, ?$ [. h7 c: l3 y
$database = "users";1 ~8 a) y* L1 o; a* _3 ~
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
' Q! ]3 S( I1 \/ Y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 o% _+ X( o, {
// $timeoutseconds seconds)) v- A9 N' g0 x
//this is where PHP gets the time
5 M2 t+ E% ?+ S, z3 y& E4 Z p$timestamp = time();
6 W% P) z# n( b6 ?* S9 j/ Y2 u+ @1 f//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 p/ {2 Q3 ]: j/ x2 Z6 V4 w$timeout = $timestamp-$timeoutseconds;
% F7 L5 F$ }6 a- y% z//connect to database/ |) ~& H- W) ^/ `
mysql_connect($server, $db_user);
" F8 `- h) x% r' @0 J//add the timestamp from the user to the online list
, B4 P- l8 F T5 x) c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 t# \3 f E6 H6 ^- J0 ^% g6 m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 m7 w7 E6 a8 ^ T
if(!($insert)) {8 L9 d0 q) t" ?$ {" J
print "Useronline Insert Failed > ";. ~& X- Q% B+ q# ?7 Q, y
}
4 @) a/ V/ b8 _( P) {3 a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ n7 Z$ [1 U( X3 d p$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
2 q: J& m6 @: Q& X! Bif(!($delete)) {1 \* m) a* R5 o/ `1 N% d) V1 x
print "Useronline Delete Failed > ";
: l( l% D: |- D" U$ Y. n/ t) [7 Q}
( |" c7 M5 Q; ?//select the amount of people online, all uniques, which are online on THIS page
! C0 l( P* f/ o% ~3 D- R$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, i& m& w1 j. [9 D+ ]- G
if(!($result)) {
/ I9 n! K3 G) {: @print "Useronline Select Error > "; k n: J4 L0 z+ H" o
}
4 C# V; v* }4 l* q4 T: [//Count the number of rows = the number of people online% T1 x1 P7 ]* Z# i: W s
$user = mysql_num_rows($result);
/ Y4 h/ o" P, }, z0 E5 C4 }" {3 _/ n//spit out the results
7 |7 s2 a4 Z& r7 E0 R: j1 r4 Pmysql_close();
+ s* a: V2 Q& a3 Jif($user == 1) {
' a5 \; T* a& h4 cprint("1 user online\n");
6 n" V1 c0 T% j+ |9 i} else {
; j* ~5 [6 y$ D9 kprint("$user users online\n");
& D4 ^* ]7 c! l, B6 s}: B9 D. r4 Z/ n( j: G; d
?>- T1 |* r, Z7 R" ]
) r. B) d( C; g W1 ]5 }
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: b9 Z& v( X' M p' _# B/ \, A时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
: f; ^, n5 u5 r8 \ p; c! M! e我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。; ]; N! K; R9 Y! H: o
当然啦,这两款主机也是相当不错的。
: ~/ ` X) J6 W/ C: |智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 a% C9 ?, j: [/ k
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
( F* p" o. b, W" Z! s提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, J) O: M* e3 K0 b8 {( l空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: P! v- l8 x7 \7 \* s- f& f( d" D自己加QQ去问吧。 |
|