|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 o$ G$ s4 N$ G! F1 G8 G0 G
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
0 `4 q [ V' B) y首先我创建MYSQL数据库表。
B5 p( ?$ F; ?1 U) {CREATE TABLE tablename (7 ^' J, c. q1 a1 w2 A Z" E
field type(max_length) DEFAULT 'default_value' (NOT) NULL
1 Y6 y4 x* G7 i) O' F2 [}可以使用的SQL语句。
! M9 s1 z8 c6 T5 B1 ECREATE TABLE useronline (# z+ ?4 S& F- |. m" o, S' N
timestamp int(15) DEFAULT '0' NOT NULL,; o" i2 i) y& E3 D' R, b
ip varchar(40) NOT NULL, x, t, \ E) M3 w2 c3 t
file varchar(100) NOT NULL,
$ p% d% Y! e( B! \3 SPRIMARY KEY (timestamp),
" k O- B1 v! K B- z9 L- `: JKEY ip (ip),
1 ?& P! x8 i$ r5 g5 d. A/ U+ A" yKEY file (file)
0 N6 M) V: s# U);下面我们是PHP脚本,首先我定义MYSQL的信息。- P3 u7 A { C, v4 ^( j; W: i$ V
$server = "localhost"; //你的服务器- K: e8 U; Y# v: @
$db_user = "root"; //你的mysql的用户名
) i! ~, Q5 T6 s$db_pass = "password"; //你的mysql的密码
* [1 K+ B. f& k$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" ^0 E' [- U% u) x$timeoutseconds = 300;取当前时间。, l S- [- [, u8 ?6 X1 { x! K
$timestamp = time();上面的完整代码:7 l3 |4 s; F. [+ q+ @4 W
<?php
" L( P6 y5 j. c& X6 M3 H8 L) A: V$server = "localhost"; //your server
' u) Z5 w: x8 J' d, _$db_user = "root"; //your mysql database username v5 s( |0 G( N
$db_pass = "password"; //your mysql database password if any
1 `5 ^. P5 d6 h% A$database = "users"; //the db name( f* ]; G# P: t5 G" [8 V$ S
$timeoutseconds = 300;//timeoutseconds limit; O+ a6 l5 z3 B3 ~0 H
//get the current time
) {5 z f. Y: r' X$timestamp = time();/ s; z0 e- e' q/ c
//calculate the lowest timestamp allowed$ |7 I4 l" O# k+ `& }3 J
$timeout = $timestamp-$timeoutseconds;
6 g; B1 V, v1 o?>连接mysql# E7 r1 C! l/ q k
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。% c) Y5 h9 {" o/ P8 y+ Y4 S
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. K, t5 P% h* i% O0 }# Emysql_connect($server, $db_user);查询数据库的代码:
- t5 I j A) P6 T* r4 O& V, ~: }mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 k- z) a5 }. s1 P/ G; ^/ r$insert = mysql_db_query($database, "INSERT INTO useronline VALUES Y. o2 ^ _$ t% z8 I, I
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; R1 S3 A/ g2 |- E2 ]* r: V& P如果用户用错误信息的话,这样处理。
7 p2 X8 e" k6 v* c0 K! qif(!($insert)) {
* X+ Y+ L" F1 f' J' f" q* |9 \/ Sprint "Useronline Insert Failed > ";( I2 J% q& Y# C" x) z- q4 z m
}然后实现当超过设置的时间就删除该用户记录。6 G. p! v' O/ n; P; B, H4 n: c
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 O4 Y8 \. ^; _( ]% k$ O) v
if(!($delete)) {
4 T2 t- s& Z; L/ Oprint "Useronline Delete Failed > ";2 x5 I7 O! q% @, c4 c; a1 Q
}下面我们解决数据库中不同IP的问题
5 V) Y- t* u/ ?0 O% m6 [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用- f9 M! J4 X2 V& w
mysql_num_rows(query);来统计用户,代码如下。
9 Y$ w% v# c; Z6 \! }0 ]$user = mysql_num_rows($result);最后关闭数据库。 U( c# C& a# o+ ^. Q; x/ k Q
mysql_close();显示在线的人数。
+ n I6 O( i' A2 }if($user == 1) {, p* R) e) L$ N6 d9 [3 [+ p
print("1 user online\n");% ^* C# N! W0 ]
} else {
' z+ p7 w- }: b# l$ Z; O- Uprint("$user users online\n");6 N1 K+ G3 q1 p. Q* r% k5 L0 B7 d
}最终把上面代码写成一个PHP文件如下。. j k0 K: M2 R$ N/ f# L9 \
<?php
- x% G, ]$ f/ m5 H( d$ F; q" w+ h# t//Put your basic server info here
_( U% G( g) Q6 G* B( i- K1 `$server = "localhost"; //normally localhost3 h1 ^0 ~4 N/ N O0 r" ?
$db_user = "root"; //your MySQL database username; O- k7 F; O4 k+ g1 [3 F$ D
$db_pass = "password"; //your MySQL database password
9 f6 \: L+ S# `' n: d( z- v4 J$database = "users";
6 f. |( w4 C D& U5 v6 p$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- J" e, p1 w+ n- K// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; W4 J+ q6 E& ~6 k1 U p! T// $timeoutseconds seconds)
. m0 {! o& b/ ~( b//this is where PHP gets the time" \. M1 A. c C# Q. P( p# v
$timestamp = time();
- A0 k; U. A+ [- t. E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* T6 s" k( L! J, [* f1 x9 T" \" j
$timeout = $timestamp-$timeoutseconds;
; m; {# J& k/ _/ o$ I. _//connect to database
7 d4 u5 n' G/ s( v b* Fmysql_connect($server, $db_user);
; F# }9 a4 s1 X7 M9 h+ w/ R//add the timestamp from the user to the online list
. E- P% d7 u( P0 N, d1 I. _6 m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 w3 f; w- s! H1 k& Q5 q) o& v# w
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 z/ E# a \0 O4 i& W! l- x/ T+ aif(!($insert)) {: A, h2 a) j% n6 h* Y9 K0 c8 j
print "Useronline Insert Failed > ";" s3 k( J$ j4 I- H# J
}
/ E5 \+ {1 ~4 I, E' z0 I//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
. [6 { y- i6 p# m: S+ Q& u( ]- A$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% |7 S+ t, `3 {) i+ Y2 B
if(!($delete)) {
! ^4 s) p* H" q( P5 X: F1 l. F) e6 X: g1 xprint "Useronline Delete Failed > ";
* q: A) K( Z( R}
. U& j8 K: r( O$ ]//select the amount of people online, all uniques, which are online on THIS page1 u& \2 x1 [& Z' d8 x: R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- o, ]+ l/ K5 J( I! k! bif(!($result)) {0 y8 I6 z p& E# {
print "Useronline Select Error > ";$ r0 ^5 j$ D# ?8 T- p4 {
}( R2 Y$ D4 v& ?) Z
//Count the number of rows = the number of people online
: a# [5 U( X' R! {" q$user = mysql_num_rows($result);* q6 T& A; M9 d) V# y
//spit out the results4 J- c( m# I2 z5 c( b
mysql_close(); ^. g% n2 z$ o. x& E
if($user == 1) {
* T! R% `$ J2 Y$ b& @8 \% Xprint("1 user online\n");/ g4 \$ v% }! {* A
} else {
& f5 d* [) H6 g) ~5 T! iprint("$user users online\n");+ D2 O. v, t$ w: d2 \
}
P: D) \* B* s9 H3 t5 a" d8 O?>
* D* A: Q! M% Y& _- [% \
# k8 S4 `: Q1 s5 G& W' S以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 \" M0 X0 @- G; a6 D" V时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) \0 }- m- k9 H; T1 c0 R. N; \
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
5 ?& r( B1 X v6 s9 r+ {3 \6 x当然啦,这两款主机也是相当不错的。
3 s5 T7 o$ ^. \ n7 G/ M智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年" R3 s2 l- s7 I* p2 A' e& {2 U' E) Z1 q
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
+ m- v8 L" [( [. \% [提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " ]: S- z, |/ {" J9 |
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" l$ U1 D' r; o自己加QQ去问吧。 |
|