获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
& e- e) m2 Q* U) J/ b我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' R% G" y4 R) X& a1 b
首先我创建MYSQL数据库表。
9 L  @9 X% J$ {3 I; vCREATE TABLE tablename (/ j( @. {3 w' n0 a
field type(max_length) DEFAULT 'default_value' (NOT) NULL: q3 S0 S0 D& B" s3 S/ @
}可以使用的SQL语句。& N" Q( ~* ^5 S' k
CREATE TABLE useronline (
" i; c/ W" b3 j+ F& {! p* ntimestamp int(15) DEFAULT '0' NOT NULL,( O4 R8 k3 p. u0 w3 M5 i0 `
ip varchar(40) NOT NULL,
( r6 q9 C5 @4 h$ q4 Ifile varchar(100) NOT NULL,$ s( n5 @$ H4 G" {# J8 k+ K
PRIMARY KEY (timestamp),
2 d# m* k- F2 z. r* ]  V; CKEY ip (ip),+ d8 `* u9 o, V* M$ u: t! ~( F4 M
KEY file (file)% i0 n0 K' n8 _: _4 j) \+ \; J' p! x
);下面我们是PHP脚本,首先我定义MYSQL的信息。- x! E1 Z2 p# E, }
$server = "localhost"; //你的服务器
% ?$ \6 u: d- {: S/ P+ G1 L4 k$db_user = "root"; //你的mysql的用户名% s+ R  y8 T. @. N9 P
$db_pass = "password"; //你的mysql的密码
: n3 I+ b9 Y7 K* B. Z: R$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
: P: U4 {7 p& g' \' l3 Q$ c$timeoutseconds = 300;取当前时间。
6 e" u' y8 X- K( S. S$timestamp = time();上面的完整代码:& h9 j, H5 L3 z+ }# N
<?php6 ]1 c# Q  @! Y5 N" ^- C3 {9 N
$server = "localhost"; //your server3 Z7 B/ M, @$ ~: Q  K) [
$db_user = "root"; //your mysql database username4 ~' A: H: e' h  \" B
$db_pass = "password"; //your mysql database password if any
4 z5 O$ ^6 k0 G6 B1 A, Z$database = "users"; //the db name" C2 L) f7 Q& N  h+ R
$timeoutseconds = 300;//timeoutseconds limit: e' x9 |6 `: c0 F% h
//get the current time* _9 L+ s& m' o3 Y  z! N( K
$timestamp = time();6 S6 @% z6 Z* i+ B, h) @: l
//calculate the lowest timestamp allowed# }! {# t+ ^* p/ D. [6 q
$timeout = $timestamp-$timeoutseconds;
3 |4 M$ E0 Q" e! `+ e1 o?>连接mysql
6 Q; _" y: A2 N7 Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。" Y& S: x  R# ]* e( h7 u* L" x. R
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- s3 |4 N, j0 S+ w7 t) [9 Emysql_connect($server, $db_user);查询数据库的代码:
1 n" G' f. q2 d( S; lmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 y& [+ k9 u8 t! B; P. ~4 n+ Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 H" e- A) w& H# u' O  r5 @/ }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: }% a1 G$ l3 P9 B& z
如果用户用错误信息的话,这样处理。( X4 W, [% E. ?( F( P
if(!($insert)) {/ L* ^* H) t0 I! N0 }/ W
print "Useronline Insert Failed > ";
. C8 `1 ]) s4 L  x% w3 V}然后实现当超过设置的时间就删除该用户记录。6 \7 l% w9 X3 f9 B& S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
0 t9 k/ Y/ w( K1 vif(!($delete)) {; r4 b& M% k+ f0 g- b9 t
print "Useronline Delete Failed > ";% e# l  q$ K( |6 t; y/ `; ^0 C
}下面我们解决数据库中不同IP的问题0 g# w' k. T  x& R$ q+ u% l* _
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
( E) R- M5 r: Z/ imysql_num_rows(query);来统计用户,代码如下。
& @6 p; l4 r' W$user = mysql_num_rows($result);最后关闭数据库。7 a0 }. ^/ I# Q  S; _* n5 c1 p
mysql_close();显示在线的人数。! {5 A. l# x" r1 ?! D9 b  `
if($user == 1) {, }9 e1 F* _; y/ G
print("1 user online\n");3 s" G1 d$ ]% ^  A& a* w- L- n4 N2 x
} else {# k; A. t6 S6 I3 @/ W: @# ?2 b
print("$user users online\n");; ?, W& x# ?3 L6 I0 _
}最终把上面代码写成一个PHP文件如下。
" k  W8 E1 U: M( R9 {; Q! m* t<?php
5 ^8 \1 u% o/ F9 w: B- ]//Put your basic server info here
) W" C* I" W  H, G$server = "localhost"; //normally localhost$ ~1 L* \% b% r7 {0 `
$db_user = "root"; //your MySQL database username  Q" r% V! g1 d! Z
$db_pass = "password"; //your MySQL database password1 v7 a7 y: U* c0 r$ P* Y
$database = "users";
- O9 b/ u; y. _( V' D$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ J. S! u: ^+ D' }/ K// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last! r! x6 p- C9 N6 O( ~9 V5 Y
// $timeoutseconds seconds)3 `3 o% r5 Y$ \5 |' N, H, ?
//this is where PHP gets the time
/ e& N; Q" F1 j  g: j7 I' e  j$timestamp = time();3 O" I8 h3 o* `( u2 a6 m3 k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed1 y% ^5 S" B0 ~8 p1 {
$timeout = $timestamp-$timeoutseconds;
9 K8 Z- f0 ~* d" x* Y//connect to database
* F0 ]  R# Q: M  Dmysql_connect($server, $db_user);9 s& _$ f6 Q$ j
//add the timestamp from the user to the online list
; Z2 x6 `# i7 Z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. f# w& V) B; I7 B('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");' R) V9 I, y+ @- H  a
if(!($insert)) {* t3 s( Z3 A7 C' c# L9 R6 q, b- A
print "Useronline Insert Failed > ";& k9 y! \1 W; D
}" v: J* i& u& S$ `
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
# V" u# M, s% p& w' d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");/ Q1 G! D6 u9 ~* E  h% v# J
if(!($delete)) {
3 Q' T! Z9 ~# v4 T5 J* S0 k* jprint "Useronline Delete Failed > ";9 W8 @) i/ m) p9 E" u: S2 z
}' W8 L( V' ^! t- C
//select the amount of people online, all uniques, which are online on THIS page
( e8 J. y/ M# j: m# Y$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
! v- O) d& H8 w$ M5 L" N; b! B# ?$ xif(!($result)) {
6 u# z- ^; n* F2 {/ ]print "Useronline Select Error > ";4 A! \0 c6 g* v& ~+ D6 O3 B" T
}" J5 [" G: l/ c
//Count the number of rows = the number of people online. a% A7 v5 y  [& z% j
$user = mysql_num_rows($result);; ?0 ^2 ]$ _4 \1 P2 l
//spit out the results
  n: {! o, N/ |mysql_close();
6 \1 G& C4 C8 b7 \3 a+ g' Lif($user == 1) {8 Q9 H, _, e  c" n; D( e
print("1 user online\n");, X: p0 P% [7 i$ l7 ^5 c' \* x
} else {& G. C+ \9 Y+ X0 {0 I
print("$user users online\n");
# J0 o7 b- k: J( M}' ?( @4 m7 x+ y
?>
8 x& W5 r3 ?- l; Z' O. ?: {% R8 G& ]5 c" A, k1 w% {$ W
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) @! E* h8 p8 b% t# Y3 g. v+ w时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ H9 S2 c( X) [/ }& x* O
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。& [( y! b% ]6 ~
当然啦,这两款主机也是相当不错的。
% L! s0 L5 ?/ J9 Q: q3 m智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
3 s! X8 v9 n+ \标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年0 _9 K9 i4 r* e+ _& t" K( c
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
5 |! ^, |# |# V; k: i; |空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55, t  V# x& F& {' d# s
自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: