
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ d6 q4 Q2 w% s2 _# o% ?$ E. |我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
5 W$ u7 Z$ n7 I: k首先我创建MYSQL数据库表。2 E; f( w; t. Y' Y' L! }
CREATE TABLE tablename (
Y T! E% y$ z- n. R' Nfield type(max_length) DEFAULT 'default_value' (NOT) NULL. G8 O2 {# K; y( e, @3 E
}可以使用的SQL语句。
% O2 H* {+ _2 Y. q2 \CREATE TABLE useronline (
& }3 n8 k6 a+ j1 {: xtimestamp int(15) DEFAULT '0' NOT NULL,% ^: a2 j: i* j$ a1 Q( f X
ip varchar(40) NOT NULL,
" L" D4 W9 Q# f# ~; yfile varchar(100) NOT NULL,: z0 Y* i" }% z( R6 P9 [
PRIMARY KEY (timestamp),
3 Q: x( `; j- g3 J1 M' vKEY ip (ip),
; D! x& O; v9 s" I8 B8 RKEY file (file)5 O: O0 [/ X9 L v; S5 w+ a
);下面我们是PHP脚本,首先我定义MYSQL的信息。
' Q, l. W) T& G5 z+ J0 }; R; T$server = "localhost"; //你的服务器
8 N" `) u! E5 V7 x$db_user = "root"; //你的mysql的用户名' T+ O$ f# Q3 E
$db_pass = "password"; //你的mysql的密码% m; y5 T$ p7 U0 w6 V: B( |& n' z3 Z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)' m) Y: K( a; b: X% }
$timeoutseconds = 300;取当前时间。
: e) a9 G. j& X4 v7 {$timestamp = time();上面的完整代码:0 k( @$ c; s4 I Y0 s9 w- O. l
<?php
: l z6 p5 I! d v1 P# [$server = "localhost"; //your server' V0 n# F" r& H+ G% ~ ]' L" p
$db_user = "root"; //your mysql database username: h: h' a p1 M5 i& v
$db_pass = "password"; //your mysql database password if any1 X% K1 q! k! T$ x# r
$database = "users"; //the db name
% J1 w4 V& T7 o1 i1 C: z$timeoutseconds = 300;//timeoutseconds limit
$ G; @& n1 b7 n; x//get the current time
6 O) P9 B3 a7 h( s) ^' @6 k$timestamp = time();; w- L+ m# S' Z5 G. i5 h; y
//calculate the lowest timestamp allowed! G3 {0 `1 j* j6 c
$timeout = $timestamp-$timeoutseconds;
2 W7 o x( h J# m+ m: L7 f! `?>连接mysql
) Q% B8 g( E3 V; [8 [7 M1 ?mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
2 {; L4 {# X( E4 I, |3 E4 mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
: A& r* W+ |5 Qmysql_connect($server, $db_user);查询数据库的代码:
- ?: f4 l6 f/ g; F' A' {mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* ^! K) J* e& X1 B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ x; |5 P( H" S O$ l& ~7 ]/ x7 c
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
" ~2 T+ G: U' y a, v如果用户用错误信息的话,这样处理。
6 L/ I- H. _1 z e- d' i3 z. iif(!($insert)) {; r& \5 V8 H" W* r7 p! b
print "Useronline Insert Failed > ";
( q5 a2 V# \ b2 e' d}然后实现当超过设置的时间就删除该用户记录。
$ k$ k1 e0 v5 c$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。1 B/ P3 B( k, m; \& ^
if(!($delete)) {
8 _; [. o' C. |( k0 l4 {6 g7 N pprint "Useronline Delete Failed > ";. y$ c' H" S7 _+ s
}下面我们解决数据库中不同IP的问题9 x% L& g: D6 u# |7 I* O
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
8 o( q: @ G* a( N$ L9 t _+ |4 Bmysql_num_rows(query);来统计用户,代码如下。2 \& l. L. N9 J z: Y/ m
$user = mysql_num_rows($result);最后关闭数据库。. Z$ _4 x2 v# ]2 R
mysql_close();显示在线的人数。
. I2 P6 I/ K& R( {8 D+ m- fif($user == 1) {
2 A- z$ J! _& U" Lprint("1 user online\n");# ?, u% c1 K p: f: s- {! J" H
} else {+ H; S" n! `9 b) I
print("$user users online\n");
5 v0 m5 J7 y, ^3 T& T6 B9 f}最终把上面代码写成一个PHP文件如下。
& l+ f# M H0 ]) {<?php d9 \2 A1 \1 R5 n
//Put your basic server info here
+ H* s5 H5 P0 b. o1 l! j$server = "localhost"; //normally localhost
( q' V/ i. C* p* v7 V$db_user = "root"; //your MySQL database username" \; ?; m1 t4 [2 k o7 u3 S( z' I
$db_pass = "password"; //your MySQL database password) W; ]1 Q5 Y9 {' X' s, T) C
$database = "users";' y7 K4 X. o4 @, \6 }7 J* @0 S
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
: p' y: q! e. `" X4 U: p// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
2 a4 p, J, C1 N2 _8 [// $timeoutseconds seconds)& \- Q6 _& `( r
//this is where PHP gets the time
+ j+ l. U7 D1 S9 W+ W! l6 G$timestamp = time();. a/ |3 w6 ?! p- M {0 u2 o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
! H& N1 Z8 s3 K9 P2 S# ~1 O7 b* ]$timeout = $timestamp-$timeoutseconds;
1 W8 h# v8 N1 `7 y, V# M//connect to database
- z" E: E q% U% Cmysql_connect($server, $db_user);5 R* ]8 w6 ?$ `; J$ P, ~
//add the timestamp from the user to the online list
& c! U1 K x+ U5 z' J: [' t1 R$insert = mysql_db_query($database, "INSERT INTO useronline VALUES) H% p H# w$ B2 i, e, Y: q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; |: C; h, d4 s. x+ N( O' b, Zif(!($insert)) {
' A0 c _- t/ H3 J4 g; S- \print "Useronline Insert Failed > ";
& E) s8 r; h; Y- L) U}
7 `- e9 n5 `& t9 E1 S3 _$ m8 a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
7 c' j: r2 ^/ f( E& O$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");" s& X2 _6 j- Q& f
if(!($delete)) {
6 u: ]. C! i% x) i, b) u- v2 t. d9 Tprint "Useronline Delete Failed > ";
+ _6 }! H! o1 B- i}
( e, }# m# j7 p: p5 o. u//select the amount of people online, all uniques, which are online on THIS page
; f; K9 _: e/ p9 |. x& b; e$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
/ _6 H* Z/ J( d' g. D; C& tif(!($result)) { s- t/ I! ]! }$ y4 j' D
print "Useronline Select Error > ";$ |% U; U' z4 _8 O1 v' q5 @
}
& z" ^* E# Z8 D- }4 W' X//Count the number of rows = the number of people online0 b( ]2 O( W' \3 v) J- O
$user = mysql_num_rows($result);2 j% ]$ k7 [$ U0 |" r2 ~
//spit out the results; I- h! P* t K6 c
mysql_close();
; f5 s- I x* g4 Aif($user == 1) {
9 n3 B4 {% q9 Z. v) }+ rprint("1 user online\n");
% x( ^, H' X- r7 Y} else { S$ i, `2 i9 G6 R, u5 a$ y( ?4 F
print("$user users online\n");
8 D/ j# H( T( Q}3 V, Q* n6 P0 w/ |5 G! m* v
?>
5 G7 |; }0 e! x) q4 C # G, d' z) }# N. M3 G4 K( B
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' n2 V9 y# r2 E% t8 ^/ v时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。9 [" s! N7 J f4 P
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。" J/ ]- ^9 ]5 ~' v
当然啦,这两款主机也是相当不错的。
$ i1 Y2 p% ~* |+ F& q, t& O6 v智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& O/ V. O0 m l/ s4 W ^标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
6 V' v7 |) U4 T5 `% D7 O' }9 V1 I2 p, g提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
: f9 J1 F. f: ^( S: v空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55- ~* A2 K; {, T: W: `7 q, N
自己加QQ去问吧。 |
|