返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
1 W  Q, I  I4 w+ p. U# }4 n我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
" y. _& ]. R( o7 k7 U首先我创建MYSQL数据库表。
1 h: k* ?- ?2 p* V, ~* M0 p, ACREATE TABLE tablename (
1 d* O! Z8 A9 v( u, I) l- wfield type(max_length) DEFAULT 'default_value' (NOT) NULL# `* o2 l! X7 a, a) n! _# }
}可以使用的SQL语句。( F; N3 y6 m4 z  L7 t
CREATE TABLE useronline (
0 [" t' X2 P+ b$ o& M( k" ]timestamp int(15) DEFAULT '0' NOT NULL,! c0 Q" D1 ^% H! Y
ip varchar(40) NOT NULL,4 Y0 w. c8 f* {' `
file varchar(100) NOT NULL,2 C+ T) u, W: `& u* g( i
PRIMARY KEY (timestamp),
" H2 C1 H1 C( C0 IKEY ip (ip),% Y; n3 f0 ^) U: @% e& e
KEY file (file)
4 e6 E* P" `% a$ F: s+ k8 S% n( L);下面我们是PHP脚本,首先我定义MYSQL的信息。" X0 {+ |( @4 x3 h6 v, H5 u" y4 B
$server = "localhost"; //你的服务器( s2 G8 f% Y$ t6 b: N. L
$db_user = "root"; //你的mysql的用户名
; N. h* X1 `9 a& d$db_pass = "password"; //你的mysql的密码# a3 P. e$ j- l5 U) s; ^
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
' V8 F2 v- z' K; H6 b/ q- Y$timeoutseconds = 300;取当前时间。
, o$ n, v) t' N3 u: F$timestamp = time();上面的完整代码:. [9 ?  }2 O8 X& R4 R5 {9 U
<?php& S& S$ z+ ?" c* f+ N4 x$ r1 ]
$server = "localhost"; //your server
6 X8 ?/ k' ]7 B5 {' F5 P' L$db_user = "root"; //your mysql database username
6 M7 [! J5 \) y% g) R$db_pass = "password"; //your mysql database password if any9 {* G( s" A0 o4 ~' \" D  \
$database = "users"; //the db name- G$ V9 G8 ?0 x$ I9 V4 J# |
$timeoutseconds = 300;//timeoutseconds limit
% ]7 q' p, P9 v5 |//get the current time2 f$ l1 f3 U8 L( G# z
$timestamp = time();
  J  K2 z. h. }//calculate the lowest timestamp allowed
% _# Q  K9 n- q* W) r9 j( `+ B$timeout = $timestamp-$timeoutseconds;  Q, J5 |5 a; k0 Q
?>连接mysql
( ?; H" d. A" W, z* Pmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 Z6 G8 O; T" e* r2 w7 Q0 }mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
& m! L1 @5 x; T  umysql_connect($server, $db_user);查询数据库的代码:
+ Q0 w+ l' B) n" U6 s  i% u: h$ l  Dmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. f) y* z* U+ e+ i3 d) N* J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
, w+ P) ^. @5 J* g$ J5 ~('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
; w% V8 \- e5 H6 e5 d, }如果用户用错误信息的话,这样处理。
- i* O9 E, j/ q: b9 qif(!($insert)) {
3 Z1 I: y5 Q& ?- I( m. g) Yprint "Useronline Insert Failed > ";" E& z4 l: c+ l, J5 q
}然后实现当超过设置的时间就删除该用户记录。
* p/ Y' |& ^7 K$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
% k  i2 b' }2 L" h. Iif(!($delete)) {
) Q6 f: F1 L9 d, C  U/ q$ f7 zprint "Useronline Delete Failed > ";
' Z+ E9 u: l0 t) G' r; Z; J}下面我们解决数据库中不同IP的问题
# e: h/ A, T$ z! a/ K1 R/ _. g$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 n* I* w9 }7 h3 \0 W1 Tmysql_num_rows(query);来统计用户,代码如下。" q. P* U3 d4 `6 L! j% L( B9 _* a
$user = mysql_num_rows($result);最后关闭数据库。* F8 O0 j; }* x/ o* i7 a8 n
mysql_close();显示在线的人数。0 W  ^+ ~# q( m; C6 a  R; e( h
if($user == 1) {
& R/ Y1 ^+ x3 jprint("1 user online\n");
$ E- g. |0 i  D} else {6 C* g+ a# |% I7 N3 ^( t
print("$user users online\n");2 [+ m$ v; q, t/ T. v& g
}最终把上面代码写成一个PHP文件如下。
$ d0 Q1 p) A3 Y% O' q<?php
7 C$ r% ^' N+ F$ I1 o8 [# V7 e//Put your basic server info here
1 q! m9 e; J2 Z$server = "localhost"; //normally localhost
( _( y( V& I# L  ?% `  V; ^$db_user = "root"; //your MySQL database username) K. o! g! n# F3 S9 W- |. [
$db_pass = "password"; //your MySQL database password
1 Z/ [# p  g  F) N$database = "users";* d  Z* y2 k1 R# S7 D% v: h* r
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are( T4 p6 R# U7 ^# b' k
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
8 X8 ?# d4 m1 Q// $timeoutseconds seconds)
6 A+ z7 M% F8 x9 C//this is where PHP gets the time
2 J* |5 a1 l' m$ p6 `7 f$ {$timestamp = time();
8 w2 g8 q5 Q4 D3 ^- s1 f% h//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 v* }' v) d6 D! Y
$timeout = $timestamp-$timeoutseconds;
4 U1 W: _  ?/ f$ c3 y//connect to database6 w. v% k$ B9 ?. ^7 A6 L; h
mysql_connect($server, $db_user);' |' M" }% x/ H) M# |
//add the timestamp from the user to the online list
+ r" H0 b7 m7 j$ Q. f4 \- Z* D' S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 }4 |: f) I0 F, ^% {& |('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- R- C6 U( Q/ ?( \, M5 P6 U* Hif(!($insert)) {
8 A- k) k. B, T& r* [# _% Xprint "Useronline Insert Failed > ";& T1 [% I; Y* ?/ E) t( Z; d, n! Q: n
}
5 ?6 a* \# {) ?' f/ h//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
* l! C) C9 X1 e( m1 z% [0 V$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# M! D+ U# ]  z* J& Y1 `6 v, }if(!($delete)) {
& H% a' a6 h9 ?" ^/ mprint "Useronline Delete Failed > ";6 J' B: B# C0 i  D- ^/ s+ k
}0 |9 h8 g; A+ }5 G: Z4 d
//select the amount of people online, all uniques, which are online on THIS page: c( l$ v7 j) |; d
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 l  h: a. b( s. o* k: K
if(!($result)) {3 I& U$ T9 F8 L& b$ h. l* j' d; i
print "Useronline Select Error > ";( V% h+ b) V0 F$ a* H5 G7 F+ {
}
- o* G$ X: g7 }9 z/ D4 M3 X//Count the number of rows = the number of people online; l9 X. T/ ?. _3 U1 Z
$user = mysql_num_rows($result);8 ~6 m8 ?! P* v" k9 E; Q* R% C4 D
//spit out the results
% K5 J6 E3 @; `4 l; A3 n5 e. jmysql_close();# Z2 \2 [3 h6 ]; ^! \- {& t& N6 N3 ^
if($user == 1) {
8 X6 w+ L* t1 I! V6 n+ m/ iprint("1 user online\n");8 |* e$ t5 o, Q" l5 B/ u8 M, L% w
} else {
9 Q+ b% k  C" `  L( q, ~print("$user users online\n");
; z: E& O+ ^$ n' |$ R# X}
' e7 g; A# T1 A- C6 p/ d?>/ f1 \8 e' ?) `" T7 ]6 S# s

7 k) K( s3 W9 ^9 h$ k0 W以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
9 y/ |7 e3 R0 P% `6 C4 F* W. x: W时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。8 C9 \" L3 U# g* ^  M) F
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
0 [+ C, p4 t6 s: D当然啦,这两款主机也是相当不错的。
$ ]5 Y; O# U4 K" i+ ?1 T智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 K* D# z. C2 A/ z4 `$ V
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) h* _  A/ f% Z. v提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ D8 Y& P& i3 P/ B4 z. t$ C$ u( c. l) a空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
! t5 Z/ e4 N- e  @: x自己加QQ去问吧。

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