返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! E* f5 Z; W  w1 T* @9 k
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 k* ?3 Q9 G: f( C/ \
首先我创建MYSQL数据库表。) v6 k" e# G4 u! `  A) ^8 K
CREATE TABLE tablename (; M3 Z) p1 s) a8 q3 T
field type(max_length) DEFAULT 'default_value' (NOT) NULL& {3 g9 c6 c- L. |) O2 P7 u2 M
}可以使用的SQL语句。8 y& A% B: E5 _; D% c% ]* c& v
CREATE TABLE useronline (; [5 z( b- _& I( ]. Y8 g! {' e
timestamp int(15) DEFAULT '0' NOT NULL,
) c  V( q% h0 ^% `$ n* Oip varchar(40) NOT NULL,
& g- W( ], h3 T% q+ ?1 \# D3 Bfile varchar(100) NOT NULL,4 Y1 P& N+ O, R6 h- @! ?. P- ?/ e5 y
PRIMARY KEY (timestamp)," P' ~6 T8 {5 R: f* I
KEY ip (ip),+ v6 T" E- z& X' {
KEY file (file)) x8 e! I5 w7 s
);下面我们是PHP脚本,首先我定义MYSQL的信息。
( ~0 H6 M- h& S( }  U1 n$ l$server = "localhost"; //你的服务器6 f0 L# G2 A, W$ L
$db_user = "root"; //你的mysql的用户名2 R1 T: l) M& c' |' n
$db_pass = "password"; //你的mysql的密码' y% i! @- u2 ?3 r. I; P% ]/ a' s5 K
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
4 b0 }7 y9 `* ^. z+ w$timeoutseconds = 300;取当前时间。
" i1 R4 a/ B; \' W# ]" ~8 D$timestamp = time();上面的完整代码:
% ]$ k! F2 c5 q* |7 J<?php1 b! k% ?2 ?" [
$server = "localhost"; //your server
& {* S5 ?& w) n  u$db_user = "root"; //your mysql database username5 n2 \* s$ H4 }4 A: p* \( x
$db_pass = "password"; //your mysql database password if any
0 Z! u! t! O1 u$database = "users"; //the db name1 W' s% |; o; Y) ]1 o
$timeoutseconds = 300;//timeoutseconds limit' ^& n+ [: y9 }- E4 L* k
//get the current time
- P# \6 q6 y, T( c5 g8 e9 m$timestamp = time();* R, E5 ^2 s' X$ m
//calculate the lowest timestamp allowed# w9 I) |' {" B- {1 [0 V: r( I* e
$timeout = $timestamp-$timeoutseconds;
: P. H" t( `& E) n. b?>连接mysql+ w4 Q# N) g) D0 H( L' M$ L. V
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 A; O9 f. R" @7 h) lmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
+ b/ ~4 b( ?3 d5 m+ Q$ L/ [" y8 I5 cmysql_connect($server, $db_user);查询数据库的代码:5 V, I: N+ l% I( [
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。) [( b( C  r& A6 d' s' C/ J- U
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
9 _0 L; }6 Z0 Y5 d1 g( B! Y* a9 s('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% Q3 R' J: K( |7 ]# r如果用户用错误信息的话,这样处理。
6 B3 T  `- l6 b  }+ u# [% Vif(!($insert)) {
1 c% O9 T" l% c. I- m- q) rprint "Useronline Insert Failed > ";0 z9 R8 S) k) q/ o
}然后实现当超过设置的时间就删除该用户记录。
( j" F/ a( F$ r2 q5 T$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。2 M- N9 ~( A4 p
if(!($delete)) {) z! U' w7 p8 N
print "Useronline Delete Failed > ";
/ x6 J' _6 i' @, A}下面我们解决数据库中不同IP的问题
  o8 m, D. X9 a% ?8 ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 p! @  M6 q# I! |# w5 }1 smysql_num_rows(query);来统计用户,代码如下。
! b% X) O* D5 w* l% L$user = mysql_num_rows($result);最后关闭数据库。: @" E" ~8 s+ q  l
mysql_close();显示在线的人数。( J6 }: d! u1 e# r; ~7 y
if($user == 1) {+ I- w4 g6 j/ c' x2 W; s
print("1 user online\n");
5 x$ t4 ~! F; V2 K  U1 A; e+ f4 }} else {
1 J4 e- k! u8 E  c4 V- C+ Uprint("$user users online\n");
8 n4 R! S" G% Z" j, w! B}最终把上面代码写成一个PHP文件如下。
: X( U9 F! W' K8 O: j2 {<?php
( }, P4 Q0 d6 X- r- p! B//Put your basic server info here
8 A, X1 F( P! p6 g) J" F$server = "localhost"; //normally localhost
6 P, Q- i! y# e% g$ {2 p. |* G$db_user = "root"; //your MySQL database username& H5 b, E, M+ X3 V
$db_pass = "password"; //your MySQL database password$ B5 ?& D: ?4 z$ y8 t& }
$database = "users";
2 G) [" j5 j. m, v1 o$ j; D. G$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; J8 b! A' L- c+ W& T$ P  n
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* ^& d# e  n0 h& |
// $timeoutseconds seconds)7 N5 T& |5 F6 y- Q: k& i
//this is where PHP gets the time
  j* n" Q/ g/ k8 F$timestamp = time();7 l$ ~. H2 `; ?; o' [
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 T) }6 U2 z1 p3 M$timeout = $timestamp-$timeoutseconds;
/ Y4 {- i4 _7 e//connect to database# f% B  [: W- p
mysql_connect($server, $db_user);
# ]: g; G* M$ O% b//add the timestamp from the user to the online list
0 M! S4 V& t% L* [: P$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ {. M( W* B' v' M2 i('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");- W! D8 M( x% f/ w
if(!($insert)) {' E1 S. z0 L) d1 K2 k, f7 v' n
print "Useronline Insert Failed > ";
- i/ h) c4 p! r% j( `7 ^- W}
8 V* b; K( L( z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 W1 t% ^7 J! J# n. o# j2 D
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 w- q# Q: c2 ?5 D7 n  s1 C1 M2 d( _
if(!($delete)) {6 I3 `( |5 `5 Z* j3 O
print "Useronline Delete Failed > ";
1 A5 Z% D- d  R6 `5 k}
; q4 S' T; {# |( a: P# y. r//select the amount of people online, all uniques, which are online on THIS page
  E2 e% R+ j7 m7 |# v" I$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");& v2 l: ]7 S6 l4 \# t
if(!($result)) {" _7 u; Z6 }4 u5 U
print "Useronline Select Error > ";
1 U$ Y  u+ n' l# {}
$ t) b: h4 J' i  Q//Count the number of rows = the number of people online) s. `7 l/ e3 ~$ h& m; Q# u
$user = mysql_num_rows($result);) n: o+ j7 s; A& e: Q
//spit out the results
, d; |: ]! p7 n9 p% d5 J( [mysql_close();
/ D9 |7 n: r: _: Sif($user == 1) {% J- p6 m# p/ Q! Z
print("1 user online\n");- R* A& D) g. d+ w5 a
} else {* m4 t) Z% h8 C( L& |- v9 V
print("$user users online\n");; W" H  R% G5 ^, {& f, S6 i  c
}
! m+ K4 w8 Z/ v: p9 t. ]) D+ F?>& s/ L3 h: y, a" y" S, d2 }

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

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