|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
5 e6 Y7 y( i- H$ ]我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
8 `7 R) u8 S; B4 a( Q首先我创建MYSQL数据库表。 T1 L- E- X6 n. X0 b( f' x9 @0 S
CREATE TABLE tablename (
. [* i6 i% L5 Q7 bfield type(max_length) DEFAULT 'default_value' (NOT) NULL% B# A3 |$ k T# S! b O
}可以使用的SQL语句。( M: U8 a0 \6 y9 R. ^. E6 V! q
CREATE TABLE useronline (
4 T/ Q& d% ~. g8 }% k: Ntimestamp int(15) DEFAULT '0' NOT NULL,
4 Y$ t3 m% t% g7 tip varchar(40) NOT NULL,+ S+ e1 c5 x5 Q7 B
file varchar(100) NOT NULL," p4 A9 T; I# } `4 t; C
PRIMARY KEY (timestamp),
$ s# r% `0 O0 |KEY ip (ip),; c3 P) D+ ^! z7 _5 s5 y4 L+ G
KEY file (file)
% P/ z! G0 b1 D' `9 m3 B k);下面我们是PHP脚本,首先我定义MYSQL的信息。. Y6 O# h, B# E# H- w6 a+ I* N7 c7 h
$server = "localhost"; //你的服务器
, `) {) @$ |! ^; u1 Y2 ~0 V$db_user = "root"; //你的mysql的用户名
4 |: N8 {3 R9 @0 i D7 Q* S$db_pass = "password"; //你的mysql的密码
; P0 V8 T9 f B4 F$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, X5 }9 T* y' _ T/ v7 Z i9 e$timeoutseconds = 300;取当前时间。' P2 w& y5 Z. O& p
$timestamp = time();上面的完整代码:
. |! H5 s4 y" S+ m5 B<?php: C# V q7 M. X8 p: R8 Y4 k; L1 z
$server = "localhost"; //your server
( G* V; m$ B. E$db_user = "root"; //your mysql database username
% o& C- H( H+ Z* B0 h$db_pass = "password"; //your mysql database password if any
! a O7 G8 K( H3 k$database = "users"; //the db name% N4 W) N9 ], V3 D. S
$timeoutseconds = 300;//timeoutseconds limit
* n( O. z4 [* V! v& Q1 Z//get the current time
8 W5 j3 P3 v& G1 r* B5 {$timestamp = time();
+ R; B7 N) a3 r8 L2 c6 J4 F+ n! Z//calculate the lowest timestamp allowed% q5 p& X1 Q; H+ U d
$timeout = $timestamp-$timeoutseconds;8 @/ n& E& X. H# ?: q" S* h. Q. h
?>连接mysql$ E, L7 y) ]1 f u( k6 {
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。' n8 ~ y% d4 B4 a- d
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 N4 u" V. b' {+ Qmysql_connect($server, $db_user);查询数据库的代码:
- j: a& C u( \6 C. s* x8 ^6 omysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
6 O0 ~# F5 a/ c, N$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& _) g# y, p4 {) d3 [* ]* Z4 ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");/ P9 }; K, J0 O: y- N$ H( B5 {& _9 K# |
如果用户用错误信息的话,这样处理。( J; |. J; V6 p: q7 n
if(!($insert)) {
" R( |5 p& G. _ ~- Lprint "Useronline Insert Failed > ";; v2 a8 ]4 t! l5 o
}然后实现当超过设置的时间就删除该用户记录。
2 @ }+ D) a$ L J& P6 }# V, `$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% f4 N. I! t; t
if(!($delete)) {3 M0 ^( _3 ?, ^( o4 E" p
print "Useronline Delete Failed > ";
4 q4 o* v' E# }* ?0 h! H}下面我们解决数据库中不同IP的问题/ `0 u0 g4 ~# g# p8 V; D
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; |) C, X- U, n& p) Vmysql_num_rows(query);来统计用户,代码如下。
, \' j9 l* L2 ?3 n6 x& W1 H) }; e6 v$user = mysql_num_rows($result);最后关闭数据库。
O# c7 u4 K+ D( [# Q+ t* W3 j+ T" Lmysql_close();显示在线的人数。
3 ?0 o+ _# ~) e% H! q, V; w4 ^/ Qif($user == 1) {
) _/ ?0 a, a! X, Uprint("1 user online\n");& }, W+ w. {5 {$ K' k
} else {2 E* P. ^/ T- D, z
print("$user users online\n"); k8 a) }, B- A0 A
}最终把上面代码写成一个PHP文件如下。 s! j3 o9 X; \
<?php
) M8 w; a( Q9 U5 e/ E" V% t% ]! e$ h//Put your basic server info here) K% s. c, J7 e9 X: ^+ ^
$server = "localhost"; //normally localhost
9 s2 e/ `4 x+ I$db_user = "root"; //your MySQL database username
* ^: |2 b: [3 l9 M* G$db_pass = "password"; //your MySQL database password
7 v( Z. v4 c: E4 ]7 N6 b$database = "users";7 D3 Z$ K/ x. T0 p" E. {& @
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are2 p* F/ ?7 }" F J
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* I: I) b3 p# `0 a0 b2 a. W// $timeoutseconds seconds)$ J2 R: \5 _. Z" X
//this is where PHP gets the time
* y G: z& T( j& L8 L$timestamp = time();
3 K; I+ Q4 x/ z8 e# P* X. J6 P//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 X; y! }/ e# |9 O6 r
$timeout = $timestamp-$timeoutseconds;+ H! @' R) _, q0 F$ Z
//connect to database
- B/ Q! \& [7 Z; [mysql_connect($server, $db_user);5 \0 p" b* T: [, V2 x/ @+ K
//add the timestamp from the user to the online list
: X+ \* d, n8 h: S, h& b n4 g6 Q- `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; S8 N; [3 `# J4 z/ e4 g('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; l2 H" p" q+ w' u
if(!($insert)) {- t) X7 p8 G$ G% x
print "Useronline Insert Failed > ";3 u( N/ s2 O5 D
}
* H" t$ r8 v7 C* [5 X! v//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! W, L4 s8 l7 m9 J3 E9 j
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 |9 E2 ~* C, ?3 G( n# ]7 K
if(!($delete)) {
4 J+ U6 G+ {- c( j8 j5 ?. D2 I; ^$ mprint "Useronline Delete Failed > ";3 k* v% U0 z2 a, B! J
}1 ^: y7 y3 P* f+ G' M& D& s' V
//select the amount of people online, all uniques, which are online on THIS page# R- O0 N8 X: p5 e0 F# T' c" m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");+ D ]5 j+ u2 B0 u
if(!($result)) {
3 } @0 x2 Q: h8 [! t5 i2 @print "Useronline Select Error > ";# Q7 I& _4 {- K7 Q2 J5 ^0 E. {
}0 o5 E; N+ L2 }
//Count the number of rows = the number of people online
- [6 H$ I3 w9 o6 t$ Z+ l$user = mysql_num_rows($result);
$ s! d( `! x; S//spit out the results
1 M( _3 Z) b1 I; p1 S2 Qmysql_close();
/ Q s5 _6 s. M! Tif($user == 1) {1 }( a3 M* F4 ^
print("1 user online\n");
* A: d7 u+ M ~8 U U1 E} else {
! y/ Z& k5 a8 W- L7 U5 r. _7 e0 Eprint("$user users online\n");0 z) e8 r; o2 |2 V0 q" S7 l
}
' e" W* o7 {7 e) \# [?>& D8 Z8 ~ m9 e$ d4 l
! z5 a* X; ^7 I" p
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 ] j2 m# U9 `( [; [! l$ n时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
' z* _& ^ C, C/ R# a T7 W1 N" j我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% _/ \2 g- |+ S/ n; x. b. \当然啦,这两款主机也是相当不错的。
) I# _5 i/ A; D Z8 A智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年- \# h( o; _6 {8 Q: n. ?$ P
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
( o( ^- k5 N5 Z! a A" t& P2 y' j提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& N# W$ u7 s1 N8 r: e6 C空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 C r; s7 d6 t, H% X
自己加QQ去问吧。 |
|