|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& ~9 w, f1 [; ^: [) J2 B9 Q$ u我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。 S, g, Y/ P8 s: [: P* B( l
首先我创建MYSQL数据库表。
) \: f2 M+ C. jCREATE TABLE tablename () ]2 \6 B1 |3 h9 Y7 J
field type(max_length) DEFAULT 'default_value' (NOT) NULL# `" D1 P; x' Y# |
}可以使用的SQL语句。
, m4 d+ Q* g8 K" bCREATE TABLE useronline (
+ I/ K4 O l8 V2 D" Z2 Wtimestamp int(15) DEFAULT '0' NOT NULL,6 U' D" }, Y3 p1 H
ip varchar(40) NOT NULL,
4 g2 d* Z6 v$ y( [4 w0 @file varchar(100) NOT NULL,2 h2 g; |. f' q. V6 n4 K, ~0 | B- j
PRIMARY KEY (timestamp),6 D7 O4 M5 c# E4 Z4 N |
KEY ip (ip),4 O. w+ V H* N6 k
KEY file (file)+ v1 K9 d# a. R
);下面我们是PHP脚本,首先我定义MYSQL的信息。; s6 s/ h4 C7 o+ R4 ]
$server = "localhost"; //你的服务器
8 R1 d+ T. t1 w9 D: U$db_user = "root"; //你的mysql的用户名+ ]0 e$ Q8 ^3 f8 Z% ]4 r& F8 J
$db_pass = "password"; //你的mysql的密码
0 R( t0 p% l3 p% K5 ]5 w$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
4 K$ y9 p4 t& s ]$timeoutseconds = 300;取当前时间。% B' g. d0 F4 i, ?( ?# v
$timestamp = time();上面的完整代码:
2 `4 _+ s& {1 [9 I' N& r<?php' p% U g2 V2 K' Q: r( i
$server = "localhost"; //your server
7 L1 H0 D% l8 W/ @) i$db_user = "root"; //your mysql database username
" q0 k; x' }! p$ s$ o0 W# D$db_pass = "password"; //your mysql database password if any
2 M7 C. p3 G) y0 N$database = "users"; //the db name8 f2 k) e+ H. Q& V: V. b
$timeoutseconds = 300;//timeoutseconds limit2 N' m8 f. d$ ^- V7 n+ T' ?8 T
//get the current time# k! h6 w* z/ G
$timestamp = time();
- \' s, M8 d+ T) P/ r/ o4 }//calculate the lowest timestamp allowed
9 k! B( f v/ p+ V0 a& f$timeout = $timestamp-$timeoutseconds;
3 B7 j' P2 i% f?>连接mysql
' N9 g$ f ]5 w! T8 D1 f! dmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
; P9 k6 b$ C# ?; _2 n' ?mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
! c# B; ~/ ?. f) R' Wmysql_connect($server, $db_user);查询数据库的代码:" v: [, y- T1 N2 }+ L
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。& h, b- \6 T; u# G! j, K' ~
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: }& `( w/ {3 G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ N5 A. t& o N; X5 }- M如果用户用错误信息的话,这样处理。
$ ~9 A! `* n/ X. Rif(!($insert)) {. ~' {, t4 U$ \) j' k; B- @ Q
print "Useronline Insert Failed > ";
; b6 w2 N1 |: C* `}然后实现当超过设置的时间就删除该用户记录。* o) p. ~. l- X% G, [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ h1 F# y5 r' j1 u% _2 P+ D K' O! A
if(!($delete)) {
3 c- G; u5 s! O3 K! D ~print "Useronline Delete Failed > ";
' V: Y5 R0 \( T}下面我们解决数据库中不同IP的问题' p9 j% a0 s+ B: F, N- H" @+ Q
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ k! E! J$ C( q% v9 e5 f" @
mysql_num_rows(query);来统计用户,代码如下。# b) r o6 w) M$ H4 I
$user = mysql_num_rows($result);最后关闭数据库。
' ^ O# S/ {. O! B3 Dmysql_close();显示在线的人数。
' @% w+ l% ~3 S |* Zif($user == 1) {
# p) r/ E! ^8 Oprint("1 user online\n");7 `" m3 B$ t0 |# q. v
} else { Z) A, I7 k8 k/ H& b' R
print("$user users online\n");
. z8 K. Y% s; R- U2 z7 s4 Y}最终把上面代码写成一个PHP文件如下。! g" a4 _; H, n# w4 K
<?php
1 Q; C6 L& [% s" A3 t- Z$ H, P//Put your basic server info here" N1 i) u; z3 @2 |
$server = "localhost"; //normally localhost
O( F' n7 Q- N$db_user = "root"; //your MySQL database username# U7 `$ p0 N9 G% {6 ~/ e0 Y
$db_pass = "password"; //your MySQL database password. |3 u1 U. ]8 l9 J
$database = "users";
1 J/ B9 V% X/ F8 `0 v4 p3 ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
a6 Q8 q4 R% j( m x5 G, p% Z// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* Q% x4 R- z' N- _9 g& S N9 Z: R
// $timeoutseconds seconds)
% ]# I r8 u% {; m- d1 t& E2 D, H$ ~//this is where PHP gets the time6 T4 p% F3 i# j2 @2 R/ t* v
$timestamp = time();
) C3 o' W$ Z! m& t% s5 r//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 [1 v6 A3 E" y! h. M5 {$timeout = $timestamp-$timeoutseconds;* S5 K" p8 C$ T' e* S; E
//connect to database6 {6 g7 k3 A, h3 p5 d, t9 K' z* @
mysql_connect($server, $db_user);* `+ S/ y5 P, X: u4 W
//add the timestamp from the user to the online list
9 y, `' s/ D5 E+ {3 f1 Y7 s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES% X( `$ X+ v* Y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( D% W* V! }, Zif(!($insert)) {
, q$ f- [9 ]& S; w% t1 V4 Tprint "Useronline Insert Failed > ";( ^* {6 Q* l" ~6 x" _8 Y3 ?; M3 f* H
}
K- n+ R8 }2 Z2 A4 {& r//delete the peoples which haven't been online/active in the last $timeoutseconds seconds./ T Y8 }' }: m
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");! M) G: K6 Y2 U% [3 R/ [ X
if(!($delete)) {: b- }/ j. d8 [
print "Useronline Delete Failed > ";
s0 h3 K, G4 {6 u: }}% ?( X; D) U# `3 A8 G- q
//select the amount of people online, all uniques, which are online on THIS page
7 @* X1 t1 b F$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
0 q+ z- i8 O' ^4 Eif(!($result)) {5 }' ~1 P$ D) g% C( P
print "Useronline Select Error > ";
2 X- Y, d5 _( k1 j6 V. u" q5 {}
F/ L% X; K( n9 w; i//Count the number of rows = the number of people online
! d( T# F3 a7 M. |# U6 [$user = mysql_num_rows($result);
. ?/ {/ T* ~( r* e1 L; x//spit out the results
6 i# x- e" C- O( d4 M r9 _mysql_close();
; v' ~- w j+ c0 \1 K3 f* Sif($user == 1) { U$ C& p5 w$ B; v7 M0 S- J! Y. @
print("1 user online\n");0 J$ I, P+ r7 Q( J
} else {
( H; ?# i8 p/ a$ Z* j+ h9 [# {print("$user users online\n");
( g9 ]7 Q' P. C& M$ m) R* S) h W}
) G( R7 N' S: I2 A?>4 ]; o3 Y* Z9 K! R, h

! ?- B K8 v W, ]以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
& J7 I) q$ [1 N" g& ~% W时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。0 \7 q( ]1 Y# p
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 Q. b4 Q3 N8 h当然啦,这两款主机也是相当不错的。1 g# o2 { X% \+ v- s
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 F, q ?. P$ c F/ R3 U标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年- s( w% p! w+ a* ^) ^8 \% y- \( K1 T
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ f8 v6 P$ v# R% G& I# d
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
/ ]; @- h6 [, m! S/ r自己加QQ去问吧。 |
|