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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 E8 J4 R/ B! v" c4 }  C7 H- a
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。5 t: V/ g# j3 Y' p- o  h+ O6 x
首先我创建MYSQL数据库表。
0 r+ k) |4 y8 l' J; D2 ?& DCREATE TABLE tablename (
6 R. d! L5 F! J! Efield type(max_length) DEFAULT 'default_value' (NOT) NULL2 O4 ?0 D7 r/ Y; N8 e' W8 e8 n
}可以使用的SQL语句。
# B5 L9 ^; i  g( Z) J8 pCREATE TABLE useronline (
* k; W7 o& I& otimestamp int(15) DEFAULT '0' NOT NULL,+ u0 I( j3 z1 W& u1 Q, S0 k
ip varchar(40) NOT NULL,2 ?  }5 \! b$ @- [3 r7 S
file varchar(100) NOT NULL,
& [, i9 w9 [0 F: {PRIMARY KEY (timestamp),! o  D3 }0 ]5 S& N0 u  l, ^5 N$ z1 G
KEY ip (ip),
) z6 W4 b  \+ ?5 r( X# \KEY file (file)
% z& v0 H2 X" x* e; m2 d4 T);下面我们是PHP脚本,首先我定义MYSQL的信息。' K' v, Q1 }! a3 u& r
$server = "localhost"; //你的服务器
* H; C' d# U" b$ j/ n$ K# w3 w  R$db_user = "root"; //你的mysql的用户名
  y1 p5 `5 }8 U/ {0 \$db_pass = "password"; //你的mysql的密码: I8 G; s+ D, I1 N: I
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
9 f! |7 k' C. m1 b$timeoutseconds = 300;取当前时间。5 O  Q: H6 s/ i
$timestamp = time();上面的完整代码:
. p' }3 @, S0 a& X<?php
$ X3 k9 B7 W+ m. @) V2 @: ~$server = "localhost"; //your server
& T# r- b- v8 W0 g0 @( I: `$db_user = "root"; //your mysql database username
) J) |9 I' W) z& ^7 G$db_pass = "password"; //your mysql database password if any
* e/ ]/ T$ Q  a5 B( F* K; a$ c5 ~$database = "users"; //the db name" K+ ~# X" h0 j- D$ q; R1 c1 X5 m
$timeoutseconds = 300;//timeoutseconds limit
  v5 _6 ~$ w, Y8 h* f6 w6 m//get the current time
- A6 a7 w. n+ O$timestamp = time();" B! a! B. K( q& `; S* y+ t8 f
//calculate the lowest timestamp allowed2 D$ `3 ^/ Q" A
$timeout = $timestamp-$timeoutseconds;% w. ?- J* x8 O, x
?>连接mysql. x; e9 E- H% T1 ^. l- j0 a" |
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。7 b8 C- I' I5 @3 G5 \2 e6 D. P
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接! a5 s% J4 G9 X9 K* F7 l
mysql_connect($server, $db_user);查询数据库的代码:( `7 W. f( F6 Q) G' N8 {' e0 x
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。8 Q1 i5 r2 y  s8 R2 o
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. e' p# {! U8 a; a('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
: m, L  h4 r4 U如果用户用错误信息的话,这样处理。, q. \$ |: u% B9 q) E
if(!($insert)) {5 g2 U" q8 U4 ^8 m1 f( C
print "Useronline Insert Failed > ";# g) p1 r+ M$ {5 _+ B
}然后实现当超过设置的时间就删除该用户记录。
4 c  [4 _: ~( f9 j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 h* c* E/ S3 k$ Q  j8 ~, |if(!($delete)) {
7 k% k: H) \/ t* Pprint "Useronline Delete Failed > ";9 _4 O' r' A4 m4 x3 K2 o& R
}下面我们解决数据库中不同IP的问题
( ]/ }' B# v( t" o4 o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ R: U6 G8 P& y4 b6 C5 `/ lmysql_num_rows(query);来统计用户,代码如下。" Z" }2 _3 b; ^; w$ ]! R, U# s& o
$user = mysql_num_rows($result);最后关闭数据库。, Z9 @/ r( c2 @+ y4 a$ G; f3 a7 t0 z
mysql_close();显示在线的人数。% E% c3 F* F2 I2 @, `3 f
if($user == 1) {+ V: b% G$ N" w0 n/ m2 t/ L" M- b, V
print("1 user online\n");
3 {& U% d+ d: U& I9 N3 M} else {
* o4 r) B5 n( a$ o9 iprint("$user users online\n");
8 R% N( M7 s$ @2 f# n: c2 y}最终把上面代码写成一个PHP文件如下。
0 @/ W- W  c7 ?) [<?php& J& f* l8 _6 }% R4 M$ @" B
//Put your basic server info here2 T( `) \3 h; K' ?; q( o
$server = "localhost"; //normally localhost
9 v, g- U7 I: _; O8 u4 Y% ]5 ~$db_user = "root"; //your MySQL database username$ d* i4 Q0 a0 X7 r/ j: j7 q
$db_pass = "password"; //your MySQL database password7 M% L! `" i, z8 W3 ]" b
$database = "users";
/ I" v: M; k; l$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
/ g& o% i+ k- X7 N, j) ~! v// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last, c$ }) E& T' a8 b1 {0 w1 O* n
// $timeoutseconds seconds)
! |% o% v8 }6 [2 U. R* o3 `) I//this is where PHP gets the time
. J! I; `# E3 |( L; u  G$timestamp = time();
1 ?7 N! t) k, U* R//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 S- ?0 u1 D" S) L" g9 Y# n$timeout = $timestamp-$timeoutseconds;
' ]% Z' F! J- E5 e' ]9 e//connect to database4 ~! s# n, i+ D3 e* c  M6 P. [# }  [
mysql_connect($server, $db_user);
9 V7 d2 f, V2 c//add the timestamp from the user to the online list8 `$ x6 W4 `7 w& M8 s% Y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' [2 d4 T. ]* R. ^6 g
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 w! X' P) a% h' R0 p" N- J: Wif(!($insert)) {
4 H- `8 K# U* h1 J! [: Kprint "Useronline Insert Failed > ";3 [/ p: ]2 u7 i9 j5 @/ z
}' w0 m/ _) U% P; O
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: X# p/ J7 U4 J. j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
5 h! r( x% P* Vif(!($delete)) {
. i) v% j0 n0 }/ ]& Dprint "Useronline Delete Failed > ";7 |+ x# `  [2 {  K* @5 s+ P
}0 D( N! w; g- e2 r* }9 T7 z
//select the amount of people online, all uniques, which are online on THIS page
$ b9 _  v4 G; `$ S/ Z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");- b" x6 n; Z3 w1 P
if(!($result)) {  O$ b5 i! d/ N) E* J% q
print "Useronline Select Error > ";% T/ T2 E- @1 p
}
" a* i9 O  K" k//Count the number of rows = the number of people online
" o2 ?$ b6 z+ G8 V5 D0 P$user = mysql_num_rows($result);9 y1 l" U  l" \1 z; B( ^# w
//spit out the results$ s: x$ q$ \+ Z" I+ ], o
mysql_close();
6 c+ c: K! w7 y& A$ g: M  H8 Z- n3 Jif($user == 1) {
$ ?/ d& @- ^# y5 R' bprint("1 user online\n");
" a4 C* K, l6 O) M& `4 r8 l} else {1 t1 Q% |. Q' X7 Z( h
print("$user users online\n");
. G; o3 K% D. B* r- S}
0 l& q# N$ D5 G: w# e: r3 X& t! i?>4 \% x# M( \/ I# @
% ]% C6 G( b, g' T5 C
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。4 c3 S$ v+ T) K
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 Q1 l3 l. |/ _0 o8 s我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
3 i8 s5 I: d' ~9 F$ e当然啦,这两款主机也是相当不错的。* d6 D0 ?$ g4 U( {5 B2 _
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, N' y8 g  A- ?+ T' l- c! P标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年7 u' W! \7 L9 h( o9 o) P% w: k
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 8 ^( ?8 F5 o4 i9 Y$ N$ h  l
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
' e1 O( u7 [2 g% g6 r8 q; R( q& U+ u- b自己加QQ去问吧。

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