标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! B3 Z* K" E2 f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 {) r' C+ B1 y4 w& Q3 v
首先我创建MYSQL数据库表。
# I* M- w2 B2 W( A, P8 z
CREATE TABLE tablename (
& j$ R$ K4 A4 c6 e' o6 F& M
field type(max_length) DEFAULT 'default_value' (NOT) NULL
; A# ^; L" Y3 _! \3 F- X: w6 }
}可以使用的SQL语句。
, B, d3 f1 g3 R$ z5 f2 b) o7 Q
CREATE TABLE useronline (
1 Z9 V& \: x5 k
timestamp int(15) DEFAULT '0' NOT NULL,
4 M* F! v/ Q N2 {' C W
ip varchar(40) NOT NULL,
, Q! `) _: V8 c0 c* ~
file varchar(100) NOT NULL,
|6 c2 j$ ?$ M) ~/ H7 Z$ r7 O
PRIMARY KEY (timestamp),
& A$ s5 m* |2 ~( Z3 {
KEY ip (ip),
& \% H5 {0 P9 L, M
KEY file (file)
9 f1 \# g: ?( j) G/ o& d9 ^- y' _
);下面我们是PHP脚本,首先我定义MYSQL的信息。
. g, A' Y/ u9 J) @* M
$server = "localhost"; //你的服务器
; E* ]2 g" d$ X5 F0 K
$db_user = "root"; //你的mysql的用户名
! w. r! F; l! Q* ?- H
$db_pass = "password"; //你的mysql的密码
2 ~0 t0 S# l1 t G% e J, `* _
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
& {: H* z6 i/ M% g3 n! p
$timeoutseconds = 300;取当前时间。
2 W4 f% u9 V- A( e7 i
$timestamp = time();上面的完整代码:
8 B1 {! M& s$ h0 q1 O8 E
<?php
6 D& u' c+ s$ V
$server = "localhost"; //your server
) B& d& Q. o) w9 z. |
$db_user = "root"; //your mysql database username
* I- y7 W) F8 @
$db_pass = "password"; //your mysql database password if any
' r' J% s! V4 W3 d R$ s9 z0 e3 d
$database = "users"; //the db name
* r! O+ A% `* F' L
$timeoutseconds = 300;//timeoutseconds limit
5 H5 u- x7 S3 m3 E6 U' c
//get the current time
4 a7 L6 l1 j) \5 B- X" k& C% R$ g$ C
$timestamp = time();
0 y1 W/ T y: Z. E4 F Z. ~
//calculate the lowest timestamp allowed
# j9 r! E8 d3 d5 ^: k
$timeout = $timestamp-$timeoutseconds;
/ j$ J+ }4 W& I+ R- {0 p& U4 A
?>连接mysql
7 c) b& p! h1 k! S& x5 V; S8 y7 R
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
. A: H9 w# J% p5 f; ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& ]) Q8 Q; {$ P7 {
mysql_connect($server, $db_user);查询数据库的代码:
$ X6 v4 j5 ]% y% V9 v* K
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
q3 t5 E' X# T# p6 T1 t" @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# A2 l1 y+ V O# ?# z X
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ o: P, s$ a! [ w* O8 s
如果用户用错误信息的话,这样处理。
7 D2 P* l# X/ h( E; c" j
if(!($insert)) {
! A0 O9 C; Z2 t% c7 v, f
print "Useronline Insert Failed > ";
; B, G0 a- M- i; _
}然后实现当超过设置的时间就删除该用户记录。
7 d* {( \- k( R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& ?# H: |8 p" f$ p" L2 Z+ k
if(!($delete)) {
4 S h9 ^$ [# V
print "Useronline Delete Failed > ";
4 E9 ^% o5 S( ^
}下面我们解决数据库中不同IP的问题
u& x6 s+ J- s0 s$ D8 K/ T4 W5 R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
X% l" ?; L4 s9 y/ R( C2 E
mysql_num_rows(query);来统计用户,代码如下。
5 R8 j% j+ b. x# s E
$user = mysql_num_rows($result);最后关闭数据库。
/ U9 G* E2 o+ [5 U. x" f0 h' p
mysql_close();显示在线的人数。
\+ @% O; V& P
if($user == 1) {
7 s2 G S! l' l: C5 k( ^9 G) ]
print("1 user online\n");
6 S' u( w8 k# K4 M( M: x
} else {
. E; A$ P- q+ r7 V
print("$user users online\n");
& |) i7 `, `2 T9 j4 q8 Q4 T
}最终把上面代码写成一个PHP文件如下。
' B! a) H( B: W2 @$ M }0 h! ^
<?php
; G1 w% R( s7 T
//Put your basic server info here
$ ~) e" M8 l% k
$server = "localhost"; //normally localhost
. s/ M1 S8 |, a' p2 j
$db_user = "root"; //your MySQL database username
% V% F8 H4 S* j% B8 m* }6 K
$db_pass = "password"; //your MySQL database password
1 e0 k3 j! }* L( h
$database = "users";
, P" A7 t$ }1 n
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
5 W4 L" k7 A! ~6 Y |: N
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
& [. b0 O1 T2 c5 v3 E2 d
// $timeoutseconds seconds)
+ V" O# V" l5 @* h& b
//this is where PHP gets the time
) x& S- V+ ~. |# G
$timestamp = time();
; g% J0 t( R, n# r7 J
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
# C6 Q: w8 J+ L* a) z2 x
$timeout = $timestamp-$timeoutseconds;
3 {" ~5 p; M, I1 x" ~( S2 B% J
//connect to database
& d* }- s$ D- t9 `+ d; a4 u
mysql_connect($server, $db_user);
" Q$ J; T) ~ Y# x: a9 W: U: `& [
//add the timestamp from the user to the online list
0 S9 T( x9 B# _
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. b9 x% y1 {8 X4 r
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
, X, L6 |' f8 [
if(!($insert)) {
# p$ |' B1 \+ e2 @/ w# |
print "Useronline Insert Failed > ";
, t k3 E( h3 a
}
3 X5 q* i: Y0 u2 O8 n
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' ~& T$ l4 v0 W! t5 T' v
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" e6 k# k* g! I T7 t1 a
if(!($delete)) {
" _+ ? W( d! r+ o0 S) `5 n( Q% ^
print "Useronline Delete Failed > ";
2 V; x. e1 q* w. p2 O6 v( T
}
8 H! \, N) s2 M/ w2 r
//select the amount of people online, all uniques, which are online on THIS page
0 _ y: r+ s: z R: K7 D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
" g8 Y8 L" k* E6 q: p
if(!($result)) {
7 S, D# J- c5 k) l; W2 Y
print "Useronline Select Error > ";
8 ~# u3 C( E% L- q
}
. _( e! a' F' \ U/ l# s. t
//Count the number of rows = the number of people online
# X% s) G' o9 c( c5 h' T
$user = mysql_num_rows($result);
$ j5 `% \* y5 W0 J% l8 g
//spit out the results
, W1 L" L$ q( K) e) q: N
mysql_close();
/ u% A' K7 j* z3 V* z# l& N
if($user == 1) {
* a: [; ]) p, u, U3 I* k' q% v0 r, h/ |
print("1 user online\n");
1 d3 W* X5 P P4 k2 ^+ i3 b
} else {
' k' w$ e( d- A+ E
print("$user users online\n");
) P S8 ~4 } J/ Q# T
}
' H1 T7 b/ g p2 T; N% F
?>
! k; k0 x6 I4 ^) v/ ?! C8 ^& Y/ w
2 I/ z4 R, v& [3 B. R5 ]3 y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& g7 a8 ^% i9 D8 K4 i
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
1 Y3 f8 e& K. A! Y0 w
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 \/ X: v7 y. ~+ K
当然啦,这两款主机也是相当不错的。
: P% l& E" I2 \# O7 A; t- n) h
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; n) y* o7 b5 }6 B
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 d4 X# C% [: n8 Z P7 Z9 t" s
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
H4 O- E7 F6 w! v6 J" n
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
9 r6 i) { ^ H) |
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2