
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
/ P, l: `" O+ |% Y5 N我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 U* n/ J9 ]& B首先我创建MYSQL数据库表。5 g4 J8 ?* z- [/ |$ E, F% {* H' b
CREATE TABLE tablename (
% @0 a4 @5 o: r+ e# W9 {( lfield type(max_length) DEFAULT 'default_value' (NOT) NULL8 r5 S" o x3 T! ^ }
}可以使用的SQL语句。
; s( x5 L: `- F: m9 r. Z! uCREATE TABLE useronline (% R" {7 [+ m7 G7 D h
timestamp int(15) DEFAULT '0' NOT NULL,: h' a9 N/ e7 j7 ~' N5 M* G
ip varchar(40) NOT NULL,
; s. V3 z# k2 o5 w9 H; efile varchar(100) NOT NULL,# @% i7 }: o0 j
PRIMARY KEY (timestamp)," Q8 J' B0 I7 I2 ~: ^# I& [8 H# k: L9 D
KEY ip (ip),
' K9 T' D+ ^7 \7 J# zKEY file (file)2 k. i' k8 b$ f$ Z* G* H; B
);下面我们是PHP脚本,首先我定义MYSQL的信息。
8 B% n) R2 l! S0 l$server = "localhost"; //你的服务器
8 V) I' h1 }8 N5 e: ~1 T% v$db_user = "root"; //你的mysql的用户名
* h% [' z6 n, R5 ^$db_pass = "password"; //你的mysql的密码& H% f# ?7 J$ @/ n9 t5 `* }
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
: ]# o+ Y/ }- k: W3 v$timeoutseconds = 300;取当前时间。
" i1 E" `! L2 z$timestamp = time();上面的完整代码:
# f, L7 z$ j. P1 r2 j1 G<?php! z* F2 J3 | b3 k( b
$server = "localhost"; //your server
9 q `& k, K! M0 v$db_user = "root"; //your mysql database username
+ Q4 V' V+ m* ^$ h$db_pass = "password"; //your mysql database password if any5 Y0 X' d% c- F/ ~
$database = "users"; //the db name
8 n/ X# \( _+ O" g$ M& Z$timeoutseconds = 300;//timeoutseconds limit5 M! i I& v8 {9 w: z
//get the current time
. `! {2 V# @8 v. _; p5 f$timestamp = time();/ ^6 W4 V5 k+ {7 t) Z/ E2 D5 p
//calculate the lowest timestamp allowed$ u! ]! L' ~6 q- }9 F
$timeout = $timestamp-$timeoutseconds;* Y6 m. {& M0 a$ C: ~4 G! R, g) X9 G9 E6 v
?>连接mysql1 z% @( ~) _1 `4 `& s
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 `3 e! V7 B" ?, p5 I# u3 B! q4 ]mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ j! m, x2 w: J0 e" m0 A
mysql_connect($server, $db_user);查询数据库的代码:
# _& p1 T( ^' C! _7 V- }mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。 z4 i2 r0 l* N) m+ v2 _
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( U8 j& s- w- d, ^/ D7 O6 k' k' J0 K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 C- X' Y; w9 ~' R如果用户用错误信息的话,这样处理。
4 e5 I; ^3 L$ A f+ v6 {" J: Uif(!($insert)) {* P" }* A5 r3 d7 P
print "Useronline Insert Failed > ";& C3 |" p' z) u2 ~3 s c: h! M( J7 I
}然后实现当超过设置的时间就删除该用户记录。/ j& D* g' L% H v2 _ h) P$ `$ a
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。' V$ B$ Y q* R+ J( k
if(!($delete)) {4 a! v) F, g1 p$ ? [
print "Useronline Delete Failed > ";
% A0 c4 ]2 }! L, y* E}下面我们解决数据库中不同IP的问题
2 L4 G& d% I! n2 `$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ I1 g/ W2 Q! z8 f2 d: j" c
mysql_num_rows(query);来统计用户,代码如下。
9 @ K) z7 M+ Z; X$user = mysql_num_rows($result);最后关闭数据库。6 h1 C* a' i2 ?; o- m6 u' ^* j e
mysql_close();显示在线的人数。% m/ j3 v2 u" S- x
if($user == 1) {$ D& u2 d& @0 g. [
print("1 user online\n");/ ?& n w! I! s
} else {
1 t. @) c0 w; H8 U$ |print("$user users online\n");
0 \: A' P3 d9 Y# ?4 Y4 L' o}最终把上面代码写成一个PHP文件如下。6 M3 U' G7 {+ V; A" N, o
<?php* }5 B+ Q+ z4 z4 }/ \5 R8 y& C
//Put your basic server info here
$ f5 e1 D' s& z7 H5 a$server = "localhost"; //normally localhost( A9 T6 W: H. N$ J3 z: b7 N- ^
$db_user = "root"; //your MySQL database username6 ]8 F' H9 V: P# K7 G4 B; x6 {0 @
$db_pass = "password"; //your MySQL database password
& W& k' a3 B4 B* P* I$database = "users";
, P% Y& |9 h* Q1 h) s0 E5 o. V/ @" k$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: ~0 f* H# A: g p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
* J. c: f+ t1 E0 x X6 Q// $timeoutseconds seconds)0 z% D2 d- o0 e# `: o: u6 X
//this is where PHP gets the time! O& [: ~- r6 z% I' k/ ?0 Z
$timestamp = time();7 y j" A1 f% v: X2 `5 T, l q& f9 E
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 M5 C" c% ?6 u( t, b$timeout = $timestamp-$timeoutseconds;
# y: t( B, U, y" ]/ J3 z+ a4 e//connect to database* Y6 r' C1 J t4 ~+ e
mysql_connect($server, $db_user);* T+ Z! Z, E7 D1 @6 j
//add the timestamp from the user to the online list- @' R1 b4 g% W& g
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& h. g% M/ o+ R1 [) s/ ?/ L+ ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 }7 _! R2 a6 p1 Oif(!($insert)) {
& W G% V- V$ w9 wprint "Useronline Insert Failed > ";
( S' p. s5 h) K4 V* O6 N- U}
: C( l$ n# n; _( B4 z+ s M1 X//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 y7 A' d& u7 K
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 ^, y) [4 a7 s) t6 D4 }if(!($delete)) {( _/ h; j! L& Z% m3 A1 ?
print "Useronline Delete Failed > ";9 T( p2 C: }0 Y
}. H" U( n: P! n2 S" h8 g
//select the amount of people online, all uniques, which are online on THIS page
" t M2 _4 O4 H0 L h8 B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");4 |4 S5 A$ n( c5 y: ~/ H
if(!($result)) {
% a" ^; l |4 r1 }) [9 |print "Useronline Select Error > ";
M$ Y8 o, ?( s4 J5 j/ }}
8 b5 m1 i* m' Z$ U( R0 C! w+ H//Count the number of rows = the number of people online }- x4 L! a6 D* l1 `" L3 D
$user = mysql_num_rows($result);0 V& P1 h( a% p, e% c
//spit out the results. W! R0 d- _9 G
mysql_close();
( X! w, ~' H. p3 l$ k) yif($user == 1) {
& j6 a9 q. @5 E5 y2 |print("1 user online\n");' F3 V' s, a7 D
} else {
- }8 c) Z2 r+ `: f" Vprint("$user users online\n");
0 a- }7 k; h5 \- v7 S# B0 i3 J; ?}# B+ I! G9 l$ Y0 {' g! g/ H
?>
# a4 L$ T7 T/ S9 L& O- k4 S % s+ q% X+ k0 x
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ g3 d8 r6 w7 P* P, Y
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 P* |6 _+ G5 J, \我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
/ ]8 g# z1 [5 r* D# [当然啦,这两款主机也是相当不错的。
" ^6 C9 w* ?/ G1 k4 C/ g智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ Z6 k% v; R+ c: {* N! c标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 w, L) Q( S/ i1 i
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ' Y% P4 b4 Y \& F- M) a9 ~$ n; D
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
' ^ Y" F' r9 N0 t A自己加QQ去问吧。 |
|