返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!, [5 t. A2 w, j- ?7 E3 f
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
2 {/ \9 S/ ~/ @( i% C首先我创建MYSQL数据库表。6 X. ^$ D+ S% p. O( K. D) X
CREATE TABLE tablename (+ [/ l. ]! ?$ I* ^) {: ?% P  k
field type(max_length) DEFAULT 'default_value' (NOT) NULL
6 b9 u$ H+ ?; F}可以使用的SQL语句。
: j& L! j/ f" \+ v, e$ B; {CREATE TABLE useronline (
% w! c' ^4 m7 j/ Ptimestamp int(15) DEFAULT '0' NOT NULL,
& ~8 d. J# s, y3 K7 c# hip varchar(40) NOT NULL,
! H0 Y/ V7 [% ]9 k; ufile varchar(100) NOT NULL,+ J/ w; y& I8 R( _& u
PRIMARY KEY (timestamp),
- z5 v: C+ Z3 x, w4 a" s  MKEY ip (ip),! k  [# i& ]1 ^+ q, _# ~
KEY file (file)8 J1 ^1 q7 V1 v1 W. Y! k, m/ u0 W3 l
);下面我们是PHP脚本,首先我定义MYSQL的信息。3 w$ I" H3 F- T' q
$server = "localhost"; //你的服务器
" Y6 Y: A$ L; K% y$db_user = "root"; //你的mysql的用户名
! p6 _1 i6 y8 s9 f$db_pass = "password"; //你的mysql的密码
  n# |+ C8 `- ]9 _: J. n7 d$database = "users"; //表的名字设置统计的时间(多少秒内在线人数). U3 ~$ `; N: C4 g) [- A
$timeoutseconds = 300;取当前时间。
8 c0 H1 o1 ~- @6 p8 _$timestamp = time();上面的完整代码:/ Q1 O' _3 i, S4 b" U9 T; t  w
<?php$ i9 B. q0 }9 q6 z* F) T+ ~
$server = "localhost"; //your server
$ K! Q4 E' T# U# P: U( }4 ]  ~$db_user = "root"; //your mysql database username
9 P6 l3 M3 d3 s: |& i$db_pass = "password"; //your mysql database password if any5 G) I# x, R; K& G% K. T! k
$database = "users"; //the db name
+ V! q: y, P/ q$timeoutseconds = 300;//timeoutseconds limit
6 S0 b9 V" i$ c4 N4 z2 V//get the current time
9 C1 c! t1 _% {* \3 g; L$timestamp = time();/ r. |. `8 B5 |' v/ M( F
//calculate the lowest timestamp allowed
6 y! g+ J6 K  k* o* j$timeout = $timestamp-$timeoutseconds;
+ {$ X" `# t# p0 h* m- J?>连接mysql3 W+ |4 s+ J% O, h1 |( ?& h
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 U3 b: \, W3 }% Omysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
- a! L6 L( M- ]2 V8 D) k+ Emysql_connect($server, $db_user);查询数据库的代码:
4 W: Y# h: z& D, A- e: [mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
& O; \7 H  X% L2 L) n7 t$insert = mysql_db_query($database, "INSERT INTO useronline VALUES: v) x8 w+ u. y  B8 Z
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 e, ?* N1 r* o% x; Y) f9 E如果用户用错误信息的话,这样处理。
7 W9 L) i1 u9 w  A  ?: uif(!($insert)) {; K3 H  p% a2 U. d2 O  R8 T( B( S0 [
print "Useronline Insert Failed > ";, j; L7 C" n& N; u* y8 L3 x
}然后实现当超过设置的时间就删除该用户记录。) |2 Y! o8 d6 n7 |7 e- o
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
: y$ ?4 u% }9 F: t0 \8 K; Aif(!($delete)) {
" c- x, W# C) v+ yprint "Useronline Delete Failed > ";8 `" [# w5 n0 _3 G
}下面我们解决数据库中不同IP的问题
& u5 R0 o' c* R2 q8 O$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. i9 U5 i, S. |4 }2 C* f+ Jmysql_num_rows(query);来统计用户,代码如下。
+ f+ I! w( [% j2 U8 w! `2 S$user = mysql_num_rows($result);最后关闭数据库。/ }% x* S8 Z, e' h3 q
mysql_close();显示在线的人数。3 J/ m% B8 M; {( H$ X) C( P1 d% J
if($user == 1) {
$ X7 K' e& Z/ p/ x$ c" D4 d$ zprint("1 user online\n");
0 ^' x& Q- }1 x8 X4 v/ r. [) W8 _} else {% j; ]: e4 Z4 H5 u
print("$user users online\n");$ T: q7 v( ]3 c8 \- U' {
}最终把上面代码写成一个PHP文件如下。) x# i/ t! c  }$ n8 P; D2 }
<?php4 w/ c; D+ f% l1 A" l0 \/ a% N
//Put your basic server info here
* ]+ g) l5 ?7 q. @4 ~8 F# l$server = "localhost"; //normally localhost
3 d5 i. u0 A) e3 j3 E- P$db_user = "root"; //your MySQL database username
" _! k* D" v& n7 z% h% t+ z$db_pass = "password"; //your MySQL database password5 |& p9 @9 D3 N8 f1 [
$database = "users";" O- H8 _% S$ [4 \, f) \
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
( }5 F$ T: A9 G( Y% t// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 C2 c0 P9 K/ L4 ]// $timeoutseconds seconds)% g3 A" w( m& x& ]$ Z
//this is where PHP gets the time6 m; M4 G, b4 [# R
$timestamp = time();! c1 _! \2 M, O6 P" x
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- i. r4 [0 f7 R0 x
$timeout = $timestamp-$timeoutseconds;
/ C) i$ `9 O6 Y; Q' l//connect to database$ F1 P: s& y, k$ q4 n/ k! ]
mysql_connect($server, $db_user);- z# S4 D8 Z0 J/ l8 z+ {2 x* e; p
//add the timestamp from the user to the online list
! @5 Q1 }  ]% Z+ @$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 @6 w4 ^; q  ]; X5 F% f  `1 |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 V/ o- v) P- R: _! _) N' _if(!($insert)) {
! J6 A$ D. I, {6 |: Oprint "Useronline Insert Failed > ";& a6 \0 ^8 o) x
}" ], `+ D/ \. I: j1 F1 r
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
/ Z. ?" O+ D" l% _$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 N7 g8 g- v$ P/ m" z$ Aif(!($delete)) {
7 d5 T$ ]/ _8 t; ~& Tprint "Useronline Delete Failed > ";6 h" b7 b$ H0 M
}1 s, Q/ V: t4 E
//select the amount of people online, all uniques, which are online on THIS page5 X  t& n  T  Z( x; y+ p/ T* ]9 R! H8 U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 L9 c& b; O9 e5 N2 L
if(!($result)) {
$ K8 Z" f" W( E/ Y6 Yprint "Useronline Select Error > ";
/ g! G& h. m& H' x}
+ v& O/ r" l" c7 E//Count the number of rows = the number of people online
, k" z' H5 a7 R0 ?$user = mysql_num_rows($result);
- X: q, r8 }" ^8 \% n0 M//spit out the results3 t' F; H% |( B4 Y( ]7 j
mysql_close();# i9 ^* o( ^) K9 ~* y, `" T
if($user == 1) {+ |; s: X* X, F( V, D- ^3 w
print("1 user online\n");
8 v2 p7 p5 Q6 o: V2 s} else {/ k6 \1 I% `& H4 n, G' G4 p' Z2 s
print("$user users online\n");
% C4 {7 {! E/ R- I}
8 ~4 e3 |0 `1 [7 H; ~?>
7 |1 d, R  V) I$ K* u8 V  l9 m& V# `0 o* d: V$ O/ N( m
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
7 u3 A2 w6 |1 T时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。7 c2 D" _  j: T8 M4 D# h4 I7 |/ a
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
9 T/ u8 n  @" f$ ~( U5 u当然啦,这两款主机也是相当不错的。
; o5 V$ ^  u  {  S7 [/ v  @4 i" M7 v智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ E6 x+ E9 ~. @! T1 Y标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
$ d* q2 d; U% S5 p1 b! Q提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
& O. [1 `2 c4 t; s空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
* A; X3 U: z! {9 K; F3 [) J; y自己加QQ去问吧。

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