标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
) n6 W% _. y d+ o" D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
' M- ^, H( ]: X5 @ g: J
首先我创建MYSQL数据库表。
/ L6 f" t' T- j% v2 E
CREATE TABLE tablename (
: P# h$ N, ?% W+ x- {4 Q
field type(max_length) DEFAULT 'default_value' (NOT) NULL
7 Q5 x3 o& `6 D* e3 L- H
}可以使用的SQL语句。
+ w7 v5 A; y+ g! @ k* Y
CREATE TABLE useronline (
4 i. S0 F' A4 k0 `. a3 W6 Y4 G+ t
timestamp int(15) DEFAULT '0' NOT NULL,
3 d9 K9 X2 ^2 k' P2 X& j; c
ip varchar(40) NOT NULL,
8 Z( s& l) t1 Y/ n
file varchar(100) NOT NULL,
3 r! v# v8 W9 |% l# L" E! d
PRIMARY KEY (timestamp),
* z8 B/ c$ o Q
KEY ip (ip),
: L# ^ G. `) n6 c" Y v0 b
KEY file (file)
$ G* i! ^% D" e
);下面我们是PHP脚本,首先我定义MYSQL的信息。
" V: ~; Z6 m8 W {- m
$server = "localhost"; //你的服务器
( |7 `' a8 c0 A0 q* j) u0 U' b, ^
$db_user = "root"; //你的mysql的用户名
2 F$ h$ M- V% b, H) ^
$db_pass = "password"; //你的mysql的密码
; ^$ f) O' ?" J* U7 r% s1 B- T5 Z6 Z2 M
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
8 }3 U4 q* Z; g( a4 ^, k! s; j! Q
$timeoutseconds = 300;取当前时间。
. J5 {& U% K: B4 z% u; r
$timestamp = time();上面的完整代码:
6 }; m' v# t, s: g
<?php
: I6 K9 D: ^4 T2 Y) \* r
$server = "localhost"; //your server
8 j! [2 J$ N/ g. w) s2 u
$db_user = "root"; //your mysql database username
! f) v r3 n9 J
$db_pass = "password"; //your mysql database password if any
, |" J4 z o, ]
$database = "users"; //the db name
. v& V6 D/ E5 a, G5 {
$timeoutseconds = 300;//timeoutseconds limit
. O$ ~; y: {5 U$ U6 ]
//get the current time
0 E; j/ f- V3 T5 T
$timestamp = time();
5 S5 {& G5 I+ Y. E
//calculate the lowest timestamp allowed
. O5 l \7 e, G0 {+ i
$timeout = $timestamp-$timeoutseconds;
/ p; S8 j2 [% U9 g) @0 X) F
?>连接mysql
A1 {( @0 f U
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
8 k, T$ T% C: H' N0 H) b0 t
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: ~0 _: H- g9 [7 m% z
mysql_connect($server, $db_user);查询数据库的代码:
) @! c6 `+ u% h z5 Y6 A
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
1 @7 ^2 K1 m+ Z7 x1 R2 U7 p
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
s K3 P5 {' a. h; { c; ]
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' H$ w: M/ z' E- Y3 L( b: X
如果用户用错误信息的话,这样处理。
) O3 @' n' ]. [) h; q
if(!($insert)) {
; B; K3 C1 ^4 _( k4 K
print "Useronline Insert Failed > ";
3 H8 n H) X$ a" E/ \9 V
}然后实现当超过设置的时间就删除该用户记录。
4 P# O; v2 a) y
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
# [0 L2 t5 v# T( \9 s; o9 h
if(!($delete)) {
1 m p, J" n1 u: n1 l7 ?" y; b( y
print "Useronline Delete Failed > ";
7 t, f* `. d; I( D( a. s
}下面我们解决数据库中不同IP的问题
& D; v' X g( E/ E4 A3 m+ m1 A
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 _- l% G, M0 A& ]
mysql_num_rows(query);来统计用户,代码如下。
6 ^. f% @+ q5 `. d* T2 z
$user = mysql_num_rows($result);最后关闭数据库。
2 H+ o. p& p, ^1 \
mysql_close();显示在线的人数。
* ?0 A7 \2 d& b; T/ P u+ O
if($user == 1) {
, J" A: Z; x9 A, |% k9 b! x: H
print("1 user online\n");
& L7 x1 T: q( P
} else {
+ u N# x" H: @( q! |* k
print("$user users online\n");
, ^. I# Q9 _( U V& Z) R+ a# m
}最终把上面代码写成一个PHP文件如下。
; E3 D5 J, }0 [
<?php
0 }0 Y+ O) j+ y5 Q
//Put your basic server info here
/ k- d6 ?0 o$ ]% O
$server = "localhost"; //normally localhost
7 `- p/ w: l/ r4 h/ O
$db_user = "root"; //your MySQL database username
) p A3 u' A' g7 C d
$db_pass = "password"; //your MySQL database password
) e4 m7 ?$ R1 }% n
$database = "users";
% z c3 o4 i8 K c& i1 b, f, D
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
2 h' S4 p9 Z, W+ G
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
2 @: H, a6 i/ u9 x* ~& d; j
// $timeoutseconds seconds)
1 k$ o$ ^- x" D. k
//this is where PHP gets the time
/ L3 N+ L" @1 k( O
$timestamp = time();
" m+ G+ [8 `) f5 A! C1 l
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
' t: \* O- z+ n( b
$timeout = $timestamp-$timeoutseconds;
% O% t2 C! b8 x
//connect to database
( @$ v; _6 k8 C4 ^% J
mysql_connect($server, $db_user);
. @# R: T/ \% D- [2 o# C6 ^
//add the timestamp from the user to the online list
, P& c+ K" _8 @ ?5 c2 u9 b! h
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" ? L$ \3 B1 x. ?" x
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 ?5 |& G0 Q0 T( }
if(!($insert)) {
( j! v s) x, v/ o' h
print "Useronline Insert Failed > ";
) p& r' l' u! ~4 K
}
6 Q- a% f( m% X- f2 p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$ r( Z( Z/ v3 R9 }0 G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ d5 x, ~+ R; c) g! Y C: I) n# T
if(!($delete)) {
& i+ a$ H& w; g
print "Useronline Delete Failed > ";
6 Q9 [0 d1 c& I# X4 R
}
( t' d7 _! o7 G- q# X5 g2 b
//select the amount of people online, all uniques, which are online on THIS page
% }& x7 I4 V5 W- u0 x& F+ h
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& D8 |% s" P6 o. P
if(!($result)) {
8 e2 ]# v, ]2 g; z* d4 a6 t9 B/ J
print "Useronline Select Error > ";
& m! p1 r* C& O9 O# `' l7 M6 J
}
, {4 ?& t6 J2 d; X' h
//Count the number of rows = the number of people online
6 E$ b2 K# h! V, r K4 S* a# V
$user = mysql_num_rows($result);
1 @' ~2 e8 ^2 f$ U% }% G
//spit out the results
( o: a) E/ m1 q8 u& Y9 M
mysql_close();
: E3 j, g5 v2 C5 D( J# }5 M
if($user == 1) {
C; B" Q" j8 w5 k5 v+ h7 }
print("1 user online\n");
' |$ {% `& ?: k' T% r- O& j. v& Y9 c
} else {
+ t8 M+ D4 E. l. `" `
print("$user users online\n");
' s& K2 L+ v, y2 U3 X
}
9 r s) V9 ]+ |, `: g
?>
- l2 z2 K! P$ M. A" [
& y% G% k$ C5 S4 ^3 ~
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 {7 s+ C7 t% c9 D& F. ^ C" G4 W
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 h; T. q1 R9 v& N2 c- z
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
: S6 p4 ~4 N1 f8 Z
当然啦,这两款主机也是相当不错的。
, ?+ P9 @% `7 U6 N: t8 q
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
. M) q1 r; M) M* g4 i+ l. s1 O
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
* m0 i) Q$ H/ ?! p% l+ w
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
+ _' e: _0 l* ^2 w. E2 X
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
% n$ }$ ~3 ^# M, L* w' m
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2