|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
7 ^, w) {, H8 l+ r; B. d我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 B7 x7 F* a" q/ O首先我创建MYSQL数据库表。6 V2 Y4 K# P q7 c' v
CREATE TABLE tablename (
: @$ j+ \0 u1 k7 O. A% Q0 s* I$ V# a4 Pfield type(max_length) DEFAULT 'default_value' (NOT) NULL' q8 Y4 ~* S9 B9 b' l5 j
}可以使用的SQL语句。4 B$ G1 k6 I% X( `3 R0 L% X
CREATE TABLE useronline (; O" U6 Z3 J9 F4 l" b" y1 }
timestamp int(15) DEFAULT '0' NOT NULL,
. Y% T2 `3 R+ c" Q8 K1 Cip varchar(40) NOT NULL,% M% q; w8 k9 ^! c/ @- L+ P
file varchar(100) NOT NULL,2 ^; s5 H4 v) P5 e; t3 ?' j
PRIMARY KEY (timestamp),
3 t- f, w0 U& H, t" V) t$ J7 jKEY ip (ip),
( B8 U& w' `! q. @7 F! R' nKEY file (file)
+ s: C8 k% R2 \5 [/ r);下面我们是PHP脚本,首先我定义MYSQL的信息。
j9 u+ A% I4 d( C$server = "localhost"; //你的服务器
) p7 I0 S* V! H! F9 G$db_user = "root"; //你的mysql的用户名
$ B N4 E q9 a8 B0 h0 O$db_pass = "password"; //你的mysql的密码+ e5 ?" i5 [; D) y& c
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 H- H+ ]# M. ?
$timeoutseconds = 300;取当前时间。, \0 m; b' S% c5 `. x4 Y v/ a
$timestamp = time();上面的完整代码:5 A% h. U/ l5 u& S
<?php1 u7 `3 m! P. p
$server = "localhost"; //your server
2 y Q# p# M9 M: w/ z$db_user = "root"; //your mysql database username1 n/ C: s; \3 A9 U$ V9 s7 B. d" d
$db_pass = "password"; //your mysql database password if any( W3 J# [$ F4 p8 S0 `! {6 x! f9 T
$database = "users"; //the db name
- \% e' J9 a9 `; m/ A. o! E8 b5 x$timeoutseconds = 300;//timeoutseconds limit7 f& K3 Q7 R s: s
//get the current time5 T9 j2 T: W. Y" j W: _
$timestamp = time();) T. x: x# d' X" z5 z. c3 U; r+ K
//calculate the lowest timestamp allowed+ z! c: L$ z6 C$ k
$timeout = $timestamp-$timeoutseconds;
5 J$ u+ i5 U* T! k( A6 w3 X2 u?>连接mysql
0 y% `8 d" G7 ~0 U: }4 O: ~; Tmysql_connect('localhost', 'username', 'password');也允许使用变量形式。( a% z* q( G( K: m2 y
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
1 I1 D% B- ]) T) N$ |: {# Nmysql_connect($server, $db_user);查询数据库的代码:) Y9 k s) Y% s7 z* ^% ?. A- K/ ^
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. G, r; Q, T3 w5 x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
' {- v0 O3 W0 H; }4 v5 x4 F- R('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
) I+ }& b+ w0 i" T! x如果用户用错误信息的话,这样处理。0 B3 L: @: x1 Q) x% ~! |/ V
if(!($insert)) {1 i& X3 L3 K( e/ h9 _3 r
print "Useronline Insert Failed > ";
: E, h& ]: f$ ~' d4 S# H7 k9 J8 l& w}然后实现当超过设置的时间就删除该用户记录。
4 ~' p% N) r( ~2 r( x$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。, I1 r& q/ T& {1 ^& N k
if(!($delete)) {
/ B; ^; \, s+ d: `. y; g4 Wprint "Useronline Delete Failed > ";( ^: j- N/ d) ~+ f7 y
}下面我们解决数据库中不同IP的问题& Q+ ]$ H- v! y# {
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
- t, D; q& D: p# N; F) r9 }- lmysql_num_rows(query);来统计用户,代码如下。
9 q) s2 H6 D0 K/ d$user = mysql_num_rows($result);最后关闭数据库。+ _' U# z# ?% E8 y2 K9 C* o: t1 Q" A
mysql_close();显示在线的人数。
7 n* d# O& m X4 V5 Dif($user == 1) {
' ^2 s, v1 o6 k" V' g1 c9 Z/ h B; Lprint("1 user online\n");
8 K/ S" V3 n5 J V} else {
* t, T' O/ o3 S4 d# q3 Gprint("$user users online\n");5 y0 G9 G& q/ x- ?" k1 M. |) k
}最终把上面代码写成一个PHP文件如下。" {8 ~/ E4 K. r: M
<?php
) Y! k2 v6 w; I9 B" }* O//Put your basic server info here
3 O7 m1 F- u5 |2 }. }4 M* G$server = "localhost"; //normally localhost# R( J0 }- Y5 s
$db_user = "root"; //your MySQL database username5 y' ]* K" }" U# v0 [6 i# b7 k
$db_pass = "password"; //your MySQL database password
# k5 X5 q: Q; M# u: `$database = "users";( f0 G% u+ o \) D" u6 |
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are( m/ \6 g3 C6 N' O# f) I
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last; a1 ~2 f" W+ Q9 N
// $timeoutseconds seconds)0 S( \6 p9 q# P3 G9 C
//this is where PHP gets the time
; _) p! \9 `6 x$timestamp = time();
$ `) H* g) g; `, Y& B6 w/ s//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
T- z7 Q% D6 f5 d$timeout = $timestamp-$timeoutseconds;1 u2 h; b$ H! Y5 p
//connect to database
- ~, C7 X( l3 H$ S$ p1 Amysql_connect($server, $db_user);
! h5 Y+ {1 P+ t: e6 c, [//add the timestamp from the user to the online list* C9 [$ h$ h A4 t- I9 G5 v9 U
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 p# C/ j4 `7 `$ l) \- s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ O) u# E' P+ c# y" Y+ tif(!($insert)) {, g7 h6 f% y3 c1 e v, w% p
print "Useronline Insert Failed > ";9 y' n9 z0 H4 P+ g \3 D/ u
}5 l2 A' g% W7 K
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.& W/ V" F( H' o; J* {& C3 V4 e
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: [6 q1 [3 w& q* y+ ~& g& Lif(!($delete)) {
1 Y8 t Y/ g0 n4 k) p6 Y/ _print "Useronline Delete Failed > ";2 |/ h4 w3 {) I, |7 z% p
}- M: K$ Z* M# K$ N" C( C
//select the amount of people online, all uniques, which are online on THIS page9 |5 M) l" q- J% f( r1 u- s
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ G$ b1 Q8 {; o* A A2 L, Zif(!($result)) {. [3 ?4 b% w" d7 d
print "Useronline Select Error > ";( H3 N# D+ l: \/ b- p9 B' o
}4 A$ m6 T! u: T7 l0 _. K
//Count the number of rows = the number of people online
" v# Q! X7 g$ n" }$user = mysql_num_rows($result);. t- l# ?% b0 h0 ^
//spit out the results( h# R- O% G: U) d6 N2 x. r
mysql_close();: j0 L( O' T# s& u3 c' y
if($user == 1) {
9 d0 H' l3 X, G* aprint("1 user online\n");
6 _1 j8 Q, D1 u1 W6 w} else {: _6 O. d1 t1 c( e
print("$user users online\n");
( U4 F! {# {; n" d* X+ R, f: l}3 O) v9 P. ?9 b+ W7 d% o
?>! W) U7 a. n. C0 y
0 ^' L% {3 `. b
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
$ z: ?0 H, l4 B2 W- u时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。& a: |* Z1 W# N+ U. z$ i8 [& U! ?
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。+ A5 e" n* u/ O2 c7 z# W- D& d2 K- R! S
当然啦,这两款主机也是相当不错的。
( ?3 c' J$ }" B( v) {- Q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ k7 r; p G5 I) l, G- t, P
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年7 K. q1 Q3 U- a+ M
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ $ x( X. R+ @! H" N8 g( _/ N; h/ o
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: Y( P+ x5 t& R6 ~1 b自己加QQ去问吧。 |
|