|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
7 [8 Q$ v. _! X: d我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
, _, K6 `0 N/ `1 D首先我创建MYSQL数据库表。: J0 I! {4 X/ o" M* ?
CREATE TABLE tablename (
( d$ V W% F# pfield type(max_length) DEFAULT 'default_value' (NOT) NULL1 t' z. B) Y+ a8 e! M; ~ P
}可以使用的SQL语句。1 D# w) }# ~2 ~6 e
CREATE TABLE useronline (
3 M% E, m! t. \. s7 ftimestamp int(15) DEFAULT '0' NOT NULL,
- k9 }$ S# j' L) M( }5 y( iip varchar(40) NOT NULL,
9 |8 h n* K* b% f' C V, zfile varchar(100) NOT NULL,2 ?, o. X2 j# S; g$ b
PRIMARY KEY (timestamp),
$ j& Y* A: ?- M4 W9 {KEY ip (ip),
7 r* q( q8 ^8 w& _ ^. ~KEY file (file)$ V4 m) t, m% j+ c
);下面我们是PHP脚本,首先我定义MYSQL的信息。; A& w9 w8 M# s! G: l9 n
$server = "localhost"; //你的服务器, x! s# S8 m( R4 p
$db_user = "root"; //你的mysql的用户名/ B; c0 K3 r f6 v+ Q
$db_pass = "password"; //你的mysql的密码
9 ^9 ]" K$ @4 W: }7 A$database = "users"; //表的名字设置统计的时间(多少秒内在线人数). ]9 H/ f3 i0 c! Y/ I) `
$timeoutseconds = 300;取当前时间。/ E6 `* ?7 k2 F5 _* \+ ^
$timestamp = time();上面的完整代码:' S0 E+ g q z+ k# O g
<?php
5 ?7 x, k E3 H( g7 i, {% O4 Z$server = "localhost"; //your server
1 Z; A) i$ ]+ W9 r, O$db_user = "root"; //your mysql database username
! {% G e- F) z5 [& p5 ]2 S, P; u* ?$db_pass = "password"; //your mysql database password if any
9 l* K; I2 b8 B8 z- P8 M$ i/ j$database = "users"; //the db name
' U* w% X: b# l! y7 B; b, K$ q3 ~$timeoutseconds = 300;//timeoutseconds limit% L; [/ |4 V7 m B" [1 T
//get the current time% J+ O% ~& u# j! G
$timestamp = time();% a% O5 s& \7 O3 p" k W9 _0 c" ^
//calculate the lowest timestamp allowed2 o0 M( t; K( n* {/ Z
$timeout = $timestamp-$timeoutseconds;
' I- }& }7 m4 C+ ??>连接mysql3 J% A1 b& S% t
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 o' n, S% R9 l) A& b# fmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接2 Z/ [) \0 J9 Z% y9 d Y
mysql_connect($server, $db_user);查询数据库的代码:
$ Z1 W1 z: U* o9 L" _mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
' D. }. G, R, h# c* @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& P7 P* J# i1 q# q7 T('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% D; B e) ]$ g) I; o' B如果用户用错误信息的话,这样处理。
* q( W; ]7 N% o- \/ N: Qif(!($insert)) {; m, u1 r7 b- `
print "Useronline Insert Failed > ";
7 M& H: |% x% u6 O}然后实现当超过设置的时间就删除该用户记录。
6 s6 K. S% [0 z: m$ `; H' V$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, I. I% S8 \1 W. A/ W* e% T9 i* Xif(!($delete)) {
+ y* ~: l: C' C! s. I! ` Mprint "Useronline Delete Failed > ";6 U+ c3 T+ z9 b. P) a! \. l
}下面我们解决数据库中不同IP的问题
+ D4 l8 ]. h C' G) B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& ^8 B1 _) e# E" u
mysql_num_rows(query);来统计用户,代码如下。# q" s$ m3 J3 M2 J q" x+ L8 ?
$user = mysql_num_rows($result);最后关闭数据库。
' ?/ k, L3 u& U4 F. l+ Y+ X6 X. [mysql_close();显示在线的人数。 A: q6 X3 j1 |: S- y: N0 l
if($user == 1) {$ [+ _, i S7 S0 Z# j K; N8 R4 i
print("1 user online\n");
1 {9 G9 ?, O# j} else {
2 m# C0 H& L$ mprint("$user users online\n");
# e G" H8 A3 B, H6 J1 _7 E" g}最终把上面代码写成一个PHP文件如下。! b( n: q$ G4 Q# y6 l6 I5 E
<?php, J7 s8 B9 r: H4 I5 a- I) q
//Put your basic server info here
2 T2 |- s# O$ B: J/ [9 t$server = "localhost"; //normally localhost" l/ I0 O V0 M/ d! r7 N' `) v
$db_user = "root"; //your MySQL database username
" o U6 R) M* s0 _8 @) k. v/ Q$db_pass = "password"; //your MySQL database password
/ Y9 u8 |9 n k; W/ G$database = "users";6 Y/ C8 Z, A+ F& r5 g' ]
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
( m6 B4 A* W* z5 i; b0 a* H// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) P( x0 f& q8 Q! Y// $timeoutseconds seconds)
1 t+ {, ^* b6 s# Z: S' C( I//this is where PHP gets the time- V q' S2 f0 m! r4 d" {
$timestamp = time();
2 j4 ~9 j8 g9 a//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) W3 d, ?& x, t5 c& P
$timeout = $timestamp-$timeoutseconds;
\# G# {3 H, s4 P! F% _) y& B//connect to database
& ~" z5 e& M$ W5 d0 u; ]mysql_connect($server, $db_user);) Q2 t, K9 p( G: b% J! ]3 J! n7 f
//add the timestamp from the user to the online list
; G/ J, [1 I* _$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! V7 u! v' X4 C* v5 g
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 `8 m9 x4 N% O( } _% `if(!($insert)) {' z* x% w. A5 h/ R* [( G* W! i. x
print "Useronline Insert Failed > ";. r$ g2 h8 w- K1 v9 @% F1 O- q6 U$ L
}% a6 A' H+ k @7 L) H6 y3 ?% n
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 D9 Y( }, A: y) E, ~+ i( l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");" B H% s8 ]) r) Z% E- G
if(!($delete)) {
, l, E4 ~) B" Z4 {4 cprint "Useronline Delete Failed > ";9 s8 U. y8 q( B/ [, v# `$ l" N- l3 M
}3 [* M+ X# z3 z) a! U! c+ C
//select the amount of people online, all uniques, which are online on THIS page* l( |9 f0 x7 q) e+ K
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 g b, J0 D1 X
if(!($result)) {
) k0 D& B) ~+ P' `5 Hprint "Useronline Select Error > ";* o" K, U- O( C3 n |9 O
}0 T) h6 f# A e, m
//Count the number of rows = the number of people online
# w5 G a8 W+ ?8 | p! `. B! u$user = mysql_num_rows($result);6 G) E. i9 P/ ]9 W# @8 Y9 {
//spit out the results1 x. }; c& V" e6 Z0 h5 G( R, Y- ]* q
mysql_close();
5 O7 i, z0 s; C( ~! |if($user == 1) {; h3 J, @- h; @
print("1 user online\n");' J- J$ Y4 U) G# d: H6 Y) h! {* Q
} else {# P0 D- }, [* Q o
print("$user users online\n");
" A5 l& v5 ~3 z: P( s) a7 C x}8 Q; B) E0 J7 b m2 A) p+ I* ^
?>
" }# ^! l- j' j% E9 c& k ( m( v% F* q9 S4 o+ t
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
% c/ _1 k9 s7 K8 b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
! n h3 t, @3 J8 R: J, L我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
' c4 `6 l$ O1 T( W5 G! ?当然啦,这两款主机也是相当不错的。
7 b+ @$ p* Z7 ~2 r智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
" g6 m5 ~3 f& e4 X+ z( e1 D6 [ r2 o标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# g1 G! e* ~- S/ [# a' h提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " v! g! K7 V, a8 E6 y
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=559 A! }. N4 L+ Z) m8 }* s4 J) f
自己加QQ去问吧。 |
|