返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; N( o4 T$ J+ @8 D7 Z% i6 [我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
' g# M' Q/ I( O. v' i; P首先我创建MYSQL数据库表。
; D6 G  E4 ?. q) m6 S$ d2 PCREATE TABLE tablename (
  ]! e2 S3 q, a/ u( Ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
# ^% k; n; r" I# N/ L! x5 O3 `8 X* F}可以使用的SQL语句。! E7 e" A6 T; y$ v1 T6 `2 o# o
CREATE TABLE useronline (" g5 H9 U, t, F! l1 i
timestamp int(15) DEFAULT '0' NOT NULL,
- D  W6 O  r( G/ f& E' d/ gip varchar(40) NOT NULL,
* p1 d+ B; l% A% q8 N$ Ufile varchar(100) NOT NULL,: q. i& ]" _# @$ Z; R- V, n
PRIMARY KEY (timestamp),1 Q6 B" J4 y$ s' u
KEY ip (ip),1 J& A" u2 ~- W6 b) M5 U9 h
KEY file (file)
; R  _5 \8 f! ~6 f/ O! D! m! Q);下面我们是PHP脚本,首先我定义MYSQL的信息。1 G  o4 }6 K9 `$ d7 I
$server = "localhost"; //你的服务器/ B8 u) j1 F0 \3 }* H( @) E0 z
$db_user = "root"; //你的mysql的用户名3 @8 c. a- p4 l( R5 h: S  k
$db_pass = "password"; //你的mysql的密码$ D: G7 v9 @% B. d8 e! B
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
4 L- W; |9 f3 p; z; n$timeoutseconds = 300;取当前时间。
' n& G8 F! D; |! z/ h: C# ^- g$timestamp = time();上面的完整代码:. G' v* z# [; c" o% f9 ^
<?php
4 E3 q/ q7 e# ~( F+ U/ V- ~3 A$server = "localhost"; //your server4 ^; \& q  [9 G- ]7 B; o
$db_user = "root"; //your mysql database username' y! ?" O4 j! c3 W
$db_pass = "password"; //your mysql database password if any
6 v5 G/ Q. V  p, A3 N$database = "users"; //the db name
5 E5 Z# s# E& o3 k7 S/ s$timeoutseconds = 300;//timeoutseconds limit! Z/ c* J; n9 \
//get the current time' ]; _2 c: h- N* g6 b. \: Q
$timestamp = time();
  |- g& Q  @/ W+ T! o) K//calculate the lowest timestamp allowed" n# y6 I8 n# ?& _! s
$timeout = $timestamp-$timeoutseconds;
: L% o  t8 S0 Z2 l+ k?>连接mysql1 ?. W8 D# A1 u
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。6 N% m2 Y7 p( X. J
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, ~7 F* Y- n& R& w5 O% Gmysql_connect($server, $db_user);查询数据库的代码:! C! f% k0 B' H; ~& l; X" m# `" @
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
2 i: k/ g# Y& D; V4 ]% D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 J2 Q" |6 [4 _2 P! B3 p3 T
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! P; ^4 Q6 h9 S2 g4 ^
如果用户用错误信息的话,这样处理。
0 N# i" V- t1 s0 T/ ^. [# Qif(!($insert)) {0 Y, a! D* w0 P
print "Useronline Insert Failed > ";5 w6 d+ V* h; q4 r+ Q
}然后实现当超过设置的时间就删除该用户记录。
( e3 i( o. I; A) q1 F$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ g) H6 C( v, I& R0 K+ h+ W+ }
if(!($delete)) {; v7 @$ u! l, g: [3 I" }
print "Useronline Delete Failed > ";1 b" a  w5 a4 ~: B! v$ s/ d
}下面我们解决数据库中不同IP的问题. A1 f7 v, z9 @- t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
5 D% i/ z' `1 h1 B0 M2 u: f; e5 Nmysql_num_rows(query);来统计用户,代码如下。
; j. X6 H+ y: f5 b# y$user = mysql_num_rows($result);最后关闭数据库。( \/ @( g9 Y2 C& o
mysql_close();显示在线的人数。8 N1 }& c: n; j, x, h7 C- @) j
if($user == 1) {
7 L* f& Z3 K; b2 _/ p% s. jprint("1 user online\n");: {. f- w1 K4 j4 g
} else {
0 E" \. U' i) B1 |print("$user users online\n");" q0 W, L+ t5 e3 h; z9 G
}最终把上面代码写成一个PHP文件如下。) A7 C# x& Z% }  E2 ^$ b4 U
<?php
& }8 U  a. `% e3 t! c# B3 ~( @% U//Put your basic server info here/ M7 ^% l+ y) M+ \8 T1 l) ?
$server = "localhost"; //normally localhost; H" y8 L) X2 G/ q& y
$db_user = "root"; //your MySQL database username3 P2 ]+ d. Z9 m4 M8 }1 k8 I
$db_pass = "password"; //your MySQL database password/ I& \. D+ A2 a7 J7 h
$database = "users";
  B: l4 `( b# A9 c$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! B+ @. N, M* E5 p+ d7 Q) Q
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last: Q! f* b( j+ P" V/ s  r( A/ D
// $timeoutseconds seconds)& w8 B/ k' }) e" k; o4 o) ^9 {
//this is where PHP gets the time
7 w) W/ K' G0 [/ a4 b& e$timestamp = time();: C; p# z: a; Z" k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% l% a, a# r. G. ^* R, R$ S
$timeout = $timestamp-$timeoutseconds;
) i; g3 d2 @1 R& @! f2 o; f# x//connect to database
6 q' j+ P8 j7 {mysql_connect($server, $db_user);
7 H/ Y( g( W: Q/ P* q9 s//add the timestamp from the user to the online list
! G* I% k# x+ x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& p* f, }( n$ ^; K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");# Q2 f) r: o4 \" ?' t& Y% v
if(!($insert)) {
  k( I! B2 Q' ^. k; Q. U, Gprint "Useronline Insert Failed > ";5 v9 `' d4 n: r  n" F
}, c& z' w6 n6 z  e( T1 _
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.' |. V( I6 Z6 E& q$ T
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");% }: u5 g9 U3 S2 i3 E* f
if(!($delete)) {
: e0 f) c* u1 A  y0 h) f; rprint "Useronline Delete Failed > ";) V( L" R/ O* o4 C( [9 B8 G& \
}
/ t: S3 z& a# G) \; h7 N# T//select the amount of people online, all uniques, which are online on THIS page, V/ S4 q. p2 E2 j1 j
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");# k' T  l' a5 D7 X$ Z' j# Z$ g
if(!($result)) {; w* Y. Y- P3 [, t" I2 Z2 `6 h
print "Useronline Select Error > ";; w. D2 x* W' v5 ~: M1 g
}4 k6 G% b! ^( ?$ j  f1 U$ s+ c- N
//Count the number of rows = the number of people online
8 o# f8 W; h3 y, @8 x2 j$user = mysql_num_rows($result);2 U8 r( F7 a& [2 J0 [
//spit out the results
5 l* S5 m# }, u1 g- l# |mysql_close();
2 }$ F& A1 b1 B+ ?: uif($user == 1) {7 s1 X" g2 e' l7 m+ e
print("1 user online\n");
( ?3 g2 v9 a5 V' L( Z$ m- q} else {+ B3 H0 W: i) D4 T# b8 v; p' U
print("$user users online\n");7 Z& m# i( u; n: q, d( L+ ]2 @
}* k- w. p# O' R5 L% T
?>+ @/ G. L' h: }, Q

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

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