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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!  {+ h  q; f# }+ r. n( D- W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。0 \5 |5 Z# ^- ^* Q( S  P1 @
首先我创建MYSQL数据库表。' G( r# g0 z; J# m$ ?8 M, [% V3 J
CREATE TABLE tablename (
. p  U9 Y6 k' X( mfield type(max_length) DEFAULT 'default_value' (NOT) NULL
* C/ B8 {! F: v2 j: g$ z}可以使用的SQL语句。9 p$ }4 L1 g0 K+ j
CREATE TABLE useronline (
% {9 [( ~6 w$ _( y+ Gtimestamp int(15) DEFAULT '0' NOT NULL,
  |3 F& N2 m7 ?! c  Cip varchar(40) NOT NULL,
  }# w( ^, ^% q) G; Mfile varchar(100) NOT NULL,
6 E4 f& ^/ O, E1 ]# v# E. a  tPRIMARY KEY (timestamp),* _2 |: T. D4 ]
KEY ip (ip),; E" p1 b1 `" H" V
KEY file (file)# [# q& @* ~) v5 v' a# L
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ m* j' i$ r, L# p% l
$server = "localhost"; //你的服务器( j; L# |! r0 a. `, ^& B
$db_user = "root"; //你的mysql的用户名
! y9 y3 T7 b+ K0 ^% ~$db_pass = "password"; //你的mysql的密码9 E4 n# R- o% a, L2 v& B
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)  r% e! h2 a! b1 i4 H
$timeoutseconds = 300;取当前时间。( m+ |; y0 T0 l( n0 a) m& g
$timestamp = time();上面的完整代码:
' W/ b( T+ N2 ~- ]- g<?php4 `1 m, g, x  `8 k: {; ~" h
$server = "localhost"; //your server4 u  j9 }5 U+ E+ [) ?
$db_user = "root"; //your mysql database username
% F. w7 [. h7 n  l$db_pass = "password"; //your mysql database password if any
4 [' r( @/ A0 K. }, h9 y$database = "users"; //the db name1 R6 A! q4 k* r& ^: h9 V
$timeoutseconds = 300;//timeoutseconds limit/ s# O/ S: L! v3 w
//get the current time
6 o( o8 V) W3 x* ]0 R$timestamp = time();& ~7 ~3 Q' l6 Q( I5 X3 s
//calculate the lowest timestamp allowed& x# \+ i5 l* s' b- C
$timeout = $timestamp-$timeoutseconds;
! ^3 O/ g$ R9 ?( N. a3 g  v?>连接mysql
; u/ h5 x5 \$ Umysql_connect('localhost', 'username', 'password');也允许使用变量形式。& ~8 T+ ~3 l: [' W7 L  Q0 Y8 C
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
* \5 |8 b$ \* [& Pmysql_connect($server, $db_user);查询数据库的代码:- L$ [) ]% \& B2 b% k
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。3 S. D, H* L! e" \% t
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; ^, [" b% _. N3 a+ @('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 J! e5 r' G2 [, l; q$ c+ D/ p如果用户用错误信息的话,这样处理。
. e* W& U* u* ~* e7 b# r8 O2 w. o0 sif(!($insert)) {
/ G2 C6 M1 K# U/ n$ `1 Y" [! yprint "Useronline Insert Failed > ";  R, x- h# p. k9 A2 u. g+ t, @
}然后实现当超过设置的时间就删除该用户记录。
& X0 `* a- }1 W7 H9 G& C$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 x% m. R, x/ t! Y# [; x( W
if(!($delete)) {9 X4 i; u8 ]5 E0 o8 A0 A
print "Useronline Delete Failed > ";0 B0 o7 ^5 S: S- }
}下面我们解决数据库中不同IP的问题
7 e0 g+ Z: l% }6 O8 D$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 \; c0 a3 p; ~, R" g2 n7 I! k$ rmysql_num_rows(query);来统计用户,代码如下。
+ Q3 h; F' b  f4 o# t% [9 n( _0 [$user = mysql_num_rows($result);最后关闭数据库。
/ ^* L* a1 X0 O  r$ u! @+ Vmysql_close();显示在线的人数。
5 K+ ^9 u8 X( {5 _' h$ r: T( Jif($user == 1) {% z% O) ~1 e. T0 O
print("1 user online\n");
. A9 P" Y3 |! f) r# f} else {' f( m5 Q( k8 B. g3 i$ s
print("$user users online\n");4 u6 T! X9 n  ^2 K
}最终把上面代码写成一个PHP文件如下。9 V( o: y7 d  _) l9 h
<?php
3 e8 l  D$ r4 @+ e4 `$ S( |4 [" `//Put your basic server info here
4 t1 i( u, w7 T) Z$ g* D% q$server = "localhost"; //normally localhost
( ~& I3 h7 g" _+ T+ w$db_user = "root"; //your MySQL database username
( l/ x9 @9 ~' F: i. {& \$db_pass = "password"; //your MySQL database password
: f. v3 p8 T7 ]5 r$database = "users";
* R) E. q. c8 I3 M0 l) J) H$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are8 c: y% r& x) I8 }
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
" [1 O. n) X: {7 x// $timeoutseconds seconds)
. R( _/ p# V  @//this is where PHP gets the time. W" i: a$ O+ ~4 |0 b
$timestamp = time();
' i( f+ q; O' ?+ B//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
2 B7 _' y. h% N- Q' O$timeout = $timestamp-$timeoutseconds;
4 N! p. [% R; [5 K$ v//connect to database
7 J  i1 A# Z8 M! I& a' }* |" Y) Jmysql_connect($server, $db_user);8 q4 |% P' I9 B' V8 _1 H  w  u+ f
//add the timestamp from the user to the online list
0 b" G4 p) h, [4 i$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 ]5 ~( c- d8 n6 Q5 m% m3 L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 q$ b- q7 @, L! s7 \if(!($insert)) {
) |1 [) r6 q7 c2 t# ^' G* |! _print "Useronline Insert Failed > ";( B3 \+ u3 f" O4 p0 ^0 x0 x
}
( }3 j% N4 N" _  D5 n( Z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.9 @( u0 Y, w) {
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 G4 y- G3 B- U/ q" g- q3 V
if(!($delete)) {; w# w6 E: {/ N" T9 I4 r
print "Useronline Delete Failed > ";
: d% D! i/ U$ h7 {& q) d# Q}
  a: }" w5 L. H0 H7 i//select the amount of people online, all uniques, which are online on THIS page
& n' ]! ^- X+ v/ X4 g$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");" B3 H* _. o1 L* g6 {! h# ^0 H
if(!($result)) {* Z  i) J0 R1 J. {
print "Useronline Select Error > ";- l& o: m( j" o, N4 Q
}1 W, V8 p7 Q3 Q) v* G
//Count the number of rows = the number of people online! K5 j0 _2 y3 B$ G& g. p
$user = mysql_num_rows($result);0 x( T8 p9 |- `. ^7 H- N
//spit out the results! {8 D! e5 X) D2 t2 t9 a' v5 I
mysql_close();
! ^' D5 F  t6 y+ U# lif($user == 1) {: Q# O1 |: d" j, U( [6 a6 G
print("1 user online\n");
% x* g4 ?3 w% E) ?+ h  ?2 Z6 _} else {
- H; e$ X3 I6 b3 D/ s8 eprint("$user users online\n");- r$ P  Z# |% `. [) U1 D
}
$ A7 G: l- Y8 Z/ y4 I?>
% p+ m4 J9 g8 }% Z7 L
+ p/ s0 n3 A# ?5 Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。& X+ G: O! y7 y' i6 \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
; H8 B' O% B& {# y我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
' ^$ ^% @# M4 ]3 C1 P3 ~当然啦,这两款主机也是相当不错的。, P4 e9 f3 _' S0 F7 o
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年/ k+ n* L9 z* o
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年( c7 \/ m0 x& {
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 D* j8 ^% [8 w; Q
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
9 g* ^( C3 q4 @( d  ?. F* |自己加QQ去问吧。

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