
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
8 ?% |; a- X" ^: ?. [* n; b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 p9 n2 T B; @$ Z4 B( F! o
首先我创建MYSQL数据库表。
. ]! x0 g+ X a1 Z CCREATE TABLE tablename (- Q' d P/ X, o; H6 |
field type(max_length) DEFAULT 'default_value' (NOT) NULL# D, I" `7 k8 d$ Q5 d. E0 r1 I8 N" ]
}可以使用的SQL语句。
/ G3 y& _' {# z- \2 tCREATE TABLE useronline (( k( N* D6 r @! U9 s. n
timestamp int(15) DEFAULT '0' NOT NULL,
! [" r, Q0 \* x) b$ Gip varchar(40) NOT NULL,
" z& `9 q u0 {file varchar(100) NOT NULL,
. L) ]2 C" N: A: b# P- E5 I- RPRIMARY KEY (timestamp),
5 i0 D, [ d( E/ sKEY ip (ip),
9 l9 `4 g4 q4 y8 ?2 \KEY file (file). D! _8 }6 L2 z9 N& i' K) t8 j. M
);下面我们是PHP脚本,首先我定义MYSQL的信息。- k. o/ @7 U; B9 s; p% [; S
$server = "localhost"; //你的服务器1 L) `) B! |+ R: x
$db_user = "root"; //你的mysql的用户名* l2 a. ~' Y# a' Y4 y8 V
$db_pass = "password"; //你的mysql的密码
' ]6 ~ [0 e3 o) ^$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
2 p7 a1 V, L! u C$timeoutseconds = 300;取当前时间。
' I- r8 S6 Z u3 ]; q- ?$timestamp = time();上面的完整代码:
* s2 W8 R2 x1 R! }$ i2 y; ~. b8 ?7 n<?php
! B; \2 @9 Y. ~$server = "localhost"; //your server
6 i# e8 H% d7 Q# E' ~; ~$db_user = "root"; //your mysql database username
( m/ B) b0 C: r8 I3 M$db_pass = "password"; //your mysql database password if any
1 Y6 t7 l& c) F( E$database = "users"; //the db name8 J* M( m0 L1 y/ J9 g. G5 f* E+ u
$timeoutseconds = 300;//timeoutseconds limit \( e/ y" o$ ?1 o8 O. J9 V+ A! b, s& d% m
//get the current time. W' h( d; e7 C
$timestamp = time();
/ v: Q. E" |/ R. \5 Q//calculate the lowest timestamp allowed0 p7 g2 p8 |" e( e) g
$timeout = $timestamp-$timeoutseconds;
5 A* z) g1 S7 C3 b# h?>连接mysql0 Z" V" F, n/ E: A. N U3 R& R
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 j" b1 Y9 ~0 t; I* @2 emysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
7 y+ g2 _1 [- M3 I0 ^0 y" ?5 Xmysql_connect($server, $db_user);查询数据库的代码:1 U5 `& K7 R/ @% |
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 G: L) f% r/ y4 u$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 `( o; r8 c) ^$ u* `. l: W
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! f1 r% g S; h o0 y如果用户用错误信息的话,这样处理。
# p! V0 }; m4 s0 i6 p3 Rif(!($insert)) {* f$ Z7 @; J1 B D5 C
print "Useronline Insert Failed > ";, q2 m! ?* K' J+ U0 u' ^
}然后实现当超过设置的时间就删除该用户记录。
( E1 d! G- b1 z3 `$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
" y6 Y9 n, N/ l/ I, l: J" [if(!($delete)) {
9 I) q3 J7 z) x9 Z# E) m# C" jprint "Useronline Delete Failed > ";# I4 ?7 f! a* \4 c# W* S; Y
}下面我们解决数据库中不同IP的问题1 y! L" b+ d4 f) u5 W
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用. y$ B$ x/ x* L' O* E2 [7 N& E, |6 q, g+ H
mysql_num_rows(query);来统计用户,代码如下。+ L; |$ O2 M4 T: O* ~) V2 V5 e
$user = mysql_num_rows($result);最后关闭数据库。
9 d" i2 _5 o9 F" tmysql_close();显示在线的人数。* V" u) M; n! J4 H
if($user == 1) {
3 i/ V) N- y- U! W; l. a, C5 @print("1 user online\n");! n, t6 ]- _8 _- G! Z5 Z
} else {0 r' U" W6 A* c0 q
print("$user users online\n");
G* D3 ` O y}最终把上面代码写成一个PHP文件如下。
$ d0 `4 A5 K5 j5 a" v<?php
; N/ ~0 e2 W& d* X6 n//Put your basic server info here
3 X0 B* r- S9 t9 B3 @$server = "localhost"; //normally localhost8 f/ T6 v0 P9 v0 c( e M$ ~% E
$db_user = "root"; //your MySQL database username
% g, U6 ~8 w/ n+ P$ E& A: s+ s1 j$db_pass = "password"; //your MySQL database password2 x3 w: h: }+ I1 L
$database = "users";
0 G/ U/ b' f) U+ x: N" K$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are' K; X3 u r$ e4 R
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
$ S. h7 G1 W4 E! t7 p' n// $timeoutseconds seconds). w$ H% R! k) z" I: {, {, }* i
//this is where PHP gets the time- u+ }. \( @; N
$timestamp = time();: g+ Y* C% g$ {: U7 f$ p+ P
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* x; [/ s b2 J. l; o5 i* ~9 Q+ ?7 t
$timeout = $timestamp-$timeoutseconds;
4 U8 Z9 C* M: M# f% H( v" t( j4 d$ N//connect to database
y& d% C1 U8 {1 P' c% omysql_connect($server, $db_user);
! p) h# R1 H1 W# x) ^//add the timestamp from the user to the online list
: [4 ]( ~( d6 m$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 ^4 P& S/ _- D& f9 E2 ?1 L+ J$ s m
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% H$ z- F$ E) J/ g0 K1 aif(!($insert)) {3 c/ N* i; n! y. U! o8 _8 w' w
print "Useronline Insert Failed > ";8 \$ `9 G" d5 u8 B& b) O- H8 R+ r _3 y
}
! c& K* {* W; t" Y$ d I% L* t//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 }1 q1 `, d. I4 M2 p; e
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 I6 g+ W: r7 l4 J1 Iif(!($delete)) {/ B1 {: j4 f3 x4 S" w7 i
print "Useronline Delete Failed > ";
0 t G/ c- Y* e% \- s}
, Y0 I' j3 k$ x/ l" Z8 _/ ^//select the amount of people online, all uniques, which are online on THIS page3 \6 `8 E: V" h/ }6 _+ C! G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# p6 \$ _" F( M2 D# bif(!($result)) {
}. X" O- R# z4 nprint "Useronline Select Error > ";
s' M% L" Y2 t( x* F}
. R. d$ U8 h3 w+ i6 b ?! x0 h+ a8 W//Count the number of rows = the number of people online4 {3 K3 [2 O% ?
$user = mysql_num_rows($result);
" [# z& d5 O' H. x0 e V( L//spit out the results* |- |0 B3 S6 Y; O
mysql_close();% ^' v1 P( K2 h9 T# l7 u* U& t& K1 M. s
if($user == 1) {+ p! o5 I! k+ }7 b
print("1 user online\n");
6 U) |, y4 | V4 @' t1 J} else {
6 W& G' F# Z+ A# E% A8 @" n1 D8 ]print("$user users online\n");
- B& r' `; h, w! U}
% U7 k6 ], b6 x8 C6 k?>8 g- d4 y `/ S& b9 A

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