返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!0 F( H" r" ^- x1 _) z5 q, a+ @
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
- [3 I: M6 ~7 }7 T! j; f/ l首先我创建MYSQL数据库表。
4 n( @- o- Q8 g9 tCREATE TABLE tablename (
3 p# f' A4 k8 ofield type(max_length) DEFAULT 'default_value' (NOT) NULL2 n' F! D* h2 j7 K1 C7 Y; o
}可以使用的SQL语句。' J' h2 j3 ~( w) ?! m
CREATE TABLE useronline (
7 D' I" S+ k- D. \; p/ L1 Rtimestamp int(15) DEFAULT '0' NOT NULL,
9 c" N/ L6 _! Tip varchar(40) NOT NULL,/ S# ^2 _# ]1 z+ u
file varchar(100) NOT NULL,
1 M  y$ J% R8 Z6 _3 N* L/ l8 KPRIMARY KEY (timestamp),# e5 w  l4 ~2 N5 X
KEY ip (ip),
# p/ d* M' M, o; [5 Q& l2 [" GKEY file (file)+ k* E7 d3 Q, H1 ?, h  Q, x' E! W
);下面我们是PHP脚本,首先我定义MYSQL的信息。
* |' ?7 f8 _& p/ u$server = "localhost"; //你的服务器
  W( d1 I/ u4 F( L. _% t$db_user = "root"; //你的mysql的用户名
; t: j+ G7 S- x$ ~4 `# Z$db_pass = "password"; //你的mysql的密码
! j9 x4 I" W0 n. F$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
" o" l8 p) J4 t- j$timeoutseconds = 300;取当前时间。
5 Y9 z7 H& a; {2 _( R' ]' W: t$timestamp = time();上面的完整代码:  M- @0 z7 Q4 X8 j3 n
<?php9 S& e9 a8 p6 O1 N
$server = "localhost"; //your server  ^& D, k7 R% t# b
$db_user = "root"; //your mysql database username
5 V, U- m0 @. N9 Q8 Z- v$db_pass = "password"; //your mysql database password if any7 V; Z# y1 f5 P1 {! I: E* Q0 k
$database = "users"; //the db name
4 @, W. a9 L, M$timeoutseconds = 300;//timeoutseconds limit
6 S% V/ k% B$ {" i8 I7 \: X//get the current time* b3 x; d( f: I$ `2 l
$timestamp = time();
% q1 Z8 g6 b6 J; L6 u7 _//calculate the lowest timestamp allowed
/ S# w0 ~- n" j  j! d$timeout = $timestamp-$timeoutseconds;
  Y' Q5 Q3 |  q5 [% l! @% l3 D* D?>连接mysql
3 W# _# |9 M; }- j2 a, kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 @' q4 f. q  d7 z) A: R: }
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
  \" k  P" a. F5 l# ]: imysql_connect($server, $db_user);查询数据库的代码:
! m: |0 f: x2 P( {% {6 T  gmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。; e2 [1 V& f+ j! {. u
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- G$ E# v9 R. ]9 _3 ^('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");" J+ @- \' s0 C+ |* r% V0 u
如果用户用错误信息的话,这样处理。
# O; Q5 m; s. q, N, v; m* vif(!($insert)) {
; i: x1 R( S' Iprint "Useronline Insert Failed > ";1 y- W" [3 x9 X6 ?- I% w
}然后实现当超过设置的时间就删除该用户记录。4 c3 p" t* _8 I6 M, e) I
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 ?& W/ A! `$ p4 R- U3 f
if(!($delete)) {/ M" L( r% T" ]% |
print "Useronline Delete Failed > ";1 k7 F+ W5 C7 h2 v, A. U
}下面我们解决数据库中不同IP的问题
' {; j5 }% p& E, H2 C$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 b# R  ~0 D" m/ z' C: F
mysql_num_rows(query);来统计用户,代码如下。  H8 i; Q' h- `( c
$user = mysql_num_rows($result);最后关闭数据库。
6 E8 E/ g7 p" p  u1 Kmysql_close();显示在线的人数。
) p  z# C) ?6 M+ j6 N$ ^% Y1 aif($user == 1) {" e) j* @' o: W8 H! w
print("1 user online\n");
2 D7 ?9 `# s( b" }8 D+ H5 x; e, T} else {2 `3 q) P4 g! [9 ^8 b8 E
print("$user users online\n");1 n! P( S7 ?3 g( s
}最终把上面代码写成一个PHP文件如下。$ w* L- d" r" j: b
<?php
9 Z  f* S- {* B  e, T//Put your basic server info here
1 a& |; \4 _+ g9 s: v$server = "localhost"; //normally localhost
( @8 s& u4 v7 L' }& c0 E$db_user = "root"; //your MySQL database username
2 c& z* g/ k9 j$db_pass = "password"; //your MySQL database password
; `$ l2 m- }' R/ g  H* O* A$database = "users";' M" \* n; J% |( S0 S, l: X( Y0 a1 y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 _; I+ T8 n6 [9 |7 k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 h4 i% s4 O7 H// $timeoutseconds seconds)
: J* }5 ?# f/ f1 y" R4 w; R0 ~//this is where PHP gets the time* z" r8 b; q; q: H# q8 t
$timestamp = time();9 L. x+ `5 q% J- M
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
% a! |  W' D/ k- p4 f9 u$timeout = $timestamp-$timeoutseconds;0 X+ S4 |, O4 _( {- a- L
//connect to database
) |1 t' V" E2 L# a- smysql_connect($server, $db_user);7 d, X. ]1 C  ~
//add the timestamp from the user to the online list: G" _( y# c: o; L5 P; X( b
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. E* Q7 V( {6 ^('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* `) Y% y' {6 y9 c& o0 aif(!($insert)) {" [. q2 l( m5 B) H  Y0 c$ o4 n
print "Useronline Insert Failed > ";
/ m8 z- a9 R5 h1 R}4 x. q. [0 ^6 I0 C2 j) b
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. |1 J/ u$ m; ?* }0 g  n( J
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 H6 r* Y: H( s. V7 Kif(!($delete)) {4 p! e6 T! F; c- V' Q- Y
print "Useronline Delete Failed > ";
% P$ h6 `6 R! u/ ]/ L6 U/ k}
7 n* U- W* i6 ^7 K  r: C& n//select the amount of people online, all uniques, which are online on THIS page# E: l# d# @* E. |( T
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
: Z2 u- ?( W) t8 c& d  P/ A3 Nif(!($result)) {
( X' T! q1 ^2 I: R9 Qprint "Useronline Select Error > ";, H* f' t- ~& A( k; F* w+ W9 ~7 T8 F
}
9 ^, p% H/ s3 F& V# M//Count the number of rows = the number of people online
* s: G2 z. v9 D7 I/ z& F$user = mysql_num_rows($result);# I. ?3 y1 S7 W# ~% a$ Z7 b( ^$ ~
//spit out the results& D" E- s. x  F9 U/ z
mysql_close();: B2 U' _- N4 U, O/ H6 W: _
if($user == 1) {8 R1 \8 s% l. k1 r4 ]( C+ q
print("1 user online\n");+ I, E, \9 |( q9 I* S, r9 }
} else {- l/ s& b6 i3 n( U1 _/ l
print("$user users online\n");
4 {" [4 ?( R9 W- n8 v/ Z}( i; w/ T# ~0 t) J9 W5 Y: {) ]4 I
?>, h1 `; O% S" E) ^

+ M# n; @- \. t( A) k/ H8 w! u以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
1 @$ ], o" M' V% f+ y! ^时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( a% a; L; Q* n1 u: ^, U我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* `7 }2 T7 \3 }- K$ `7 w7 l0 ?当然啦,这两款主机也是相当不错的。- J3 g  Z, i& I! q9 ~
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
5 O9 l5 a2 [6 u8 u3 L/ U; O& H标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
3 W! B2 r. V% B提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
$ F2 U" ]# g3 t; Q3 c' i空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# u% b( y/ X. z9 V) S" R
自己加QQ去问吧。

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