返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 ^' I0 _4 I" |6 p我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& `% Y+ R2 Y7 Z  `
首先我创建MYSQL数据库表。2 T, j' N1 u! D6 ?# A! w/ R
CREATE TABLE tablename (
# |% S  x7 n4 o& ]0 gfield type(max_length) DEFAULT 'default_value' (NOT) NULL, I7 b# [0 z, V% S! F3 H
}可以使用的SQL语句。+ x3 B& r$ G, M5 L% u
CREATE TABLE useronline (
9 q! ?5 V" P; c  B) vtimestamp int(15) DEFAULT '0' NOT NULL,
2 J6 g% B: c9 U0 T: H/ mip varchar(40) NOT NULL,) I( g- [9 D3 e: z: V5 Q- V
file varchar(100) NOT NULL,
3 Q0 x* V7 P& C& ZPRIMARY KEY (timestamp),5 J8 {5 \* O  U. H0 m
KEY ip (ip),) U0 z9 m: b9 {
KEY file (file)
6 F- w% R  \1 N. s);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 l$ i: M. n, i/ I$server = "localhost"; //你的服务器
; D/ B# a; q  a$db_user = "root"; //你的mysql的用户名6 P1 g- G0 K, }
$db_pass = "password"; //你的mysql的密码  l/ Q+ Q! R" H4 J  E
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* h) Z1 c2 O, k3 f5 E* r9 c& X6 M$timeoutseconds = 300;取当前时间。" b; H, R8 N% R! U& G6 C  B
$timestamp = time();上面的完整代码:
3 p. W5 x, V6 s+ W" ]<?php
; D1 ?( Q% _3 @* `1 G$server = "localhost"; //your server0 }+ F" g2 ~0 S; o# p4 Z/ B! [3 D
$db_user = "root"; //your mysql database username# [  @: W. U6 D. B6 O
$db_pass = "password"; //your mysql database password if any- O2 M- A, ~  [8 C, q
$database = "users"; //the db name
5 u+ @3 U6 L, A* Y5 N$timeoutseconds = 300;//timeoutseconds limit
) V! t! W9 f: R4 X  Y//get the current time7 ^- @+ b' s" A9 }. |' O* J+ d2 \$ }
$timestamp = time();. c( U" K: k, |2 O$ A
//calculate the lowest timestamp allowed
0 N" S; m9 I) R9 L3 w' p$timeout = $timestamp-$timeoutseconds;
6 E7 |1 ]; j8 D* q& s7 b?>连接mysql: D- u9 _3 }8 y4 T4 I) H- b4 {
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ U6 o1 o* c% H7 X6 F* amysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
( g; L0 f  K! q4 kmysql_connect($server, $db_user);查询数据库的代码:
& S( |6 L6 _/ \9 r% ?mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
+ m( n. j6 G7 t, e5 U1 M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 k) V" c  K6 C& ^" e  H1 M- z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
! d  S! p! Z2 S. n# C4 c: D" |, v7 e+ T如果用户用错误信息的话,这样处理。
4 M, Q. U( U- H) {$ Hif(!($insert)) {4 M2 E1 O" d! N2 r  j0 C6 \5 d
print "Useronline Insert Failed > ";
! Y; a+ Z- t! J& q3 H# [# B}然后实现当超过设置的时间就删除该用户记录。
9 H9 Y7 o9 f: S% ^6 ?& Z: F$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。: \6 c6 ~+ x0 R* U! M* f
if(!($delete)) {$ O$ P& b4 w6 o. t6 E
print "Useronline Delete Failed > ";
, b' Z- g* J. g3 Y! T" F" E}下面我们解决数据库中不同IP的问题! J; `, `& V& e, k: ^9 D" p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
# F& g$ v! o% @6 Y5 g4 _% g$ Emysql_num_rows(query);来统计用户,代码如下。
0 v. a# e7 @- F- E$user = mysql_num_rows($result);最后关闭数据库。" b; |+ }- F' B$ m
mysql_close();显示在线的人数。
+ u9 N( }1 }( h: p1 }6 x: E4 u) Iif($user == 1) {6 `( ~, K, Q+ `- e" V6 M, h5 P  q
print("1 user online\n");7 F  T; A2 w) F* g4 J
} else {' U9 x7 R3 l2 [% q  x% M
print("$user users online\n");
: R6 T1 y/ t2 x" P9 q}最终把上面代码写成一个PHP文件如下。
/ `1 L# {8 c, O5 u- @- O; J<?php
- p* k8 W" ?% w9 \$ E//Put your basic server info here
+ \0 X& r: C9 |' N$server = "localhost"; //normally localhost7 z2 m2 E2 b* L( k
$db_user = "root"; //your MySQL database username
1 q, l9 {/ E$ W2 F4 l( b$db_pass = "password"; //your MySQL database password4 I6 Y* D$ o1 A% r
$database = "users";: E  ^" h, l' t9 A, j6 P
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are  p* U; |* w0 l+ V9 K
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last# k. M3 `1 A3 K4 |* E1 J
// $timeoutseconds seconds)
3 o$ I% r1 h# Z; a9 ^( G7 d, N//this is where PHP gets the time
4 b+ X+ O/ c4 H8 X$timestamp = time();
; Q8 L' i; \* A1 x) \//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
; x; I( R: r  s  T$timeout = $timestamp-$timeoutseconds;
: @/ I, z9 j3 k2 _0 b8 p' s//connect to database
4 _& U+ {, M. }/ j1 H& Z& D+ f1 kmysql_connect($server, $db_user);
- i% k. o/ N  f" H7 C  J0 K//add the timestamp from the user to the online list
5 V; f2 P" T+ }7 O% H& x$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- |0 n8 |9 B. V' d; `' I('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
9 \1 ?  E' J' _" ]) dif(!($insert)) {
6 ^5 V& R2 R  R. v; z+ J: Uprint "Useronline Insert Failed > ";
" R" V6 e' \+ R, z% o" ^6 l- e}
* v1 D, K$ Q  E3 Z, q//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ k' u+ u6 Z0 A5 G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");, e5 j, P# ?) c
if(!($delete)) {4 S# _; K' C& _$ \; d' G8 H
print "Useronline Delete Failed > ";$ x: [. }* l. x) U
}
; @" A9 @: C3 E% a7 o& D# f) Z//select the amount of people online, all uniques, which are online on THIS page
# V9 G9 g$ l8 f) N$ k$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");% J* Q: S- Y, }" i8 ^
if(!($result)) {3 _2 w3 O; u: H7 g2 O# d+ L
print "Useronline Select Error > ";" [9 C3 \2 `, C3 b- d5 s" U$ f
}0 X* @! T# ]5 A+ Z
//Count the number of rows = the number of people online4 J: L4 x" a+ w& C) T. |
$user = mysql_num_rows($result);
/ ?/ C$ H; c7 H1 n5 Q//spit out the results, h1 K' ?3 c; B5 s  d" C; f
mysql_close();- Q7 C4 V$ w* O& P9 _% ?/ \, [7 c
if($user == 1) {" k( ]3 |4 y% J; i) c7 G
print("1 user online\n");: _! i, |" _. k  L% Y
} else {2 l! a1 r8 @7 n% Z
print("$user users online\n");
, {- a- L5 b# V0 c5 I}* o4 N1 f1 Z- X9 c5 w3 S
?>( Z. p  [) h: I# _" v) n
+ _. n- C6 W& e7 F# c, S
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。2 c3 |. h. ^! [7 w9 K% ?  l
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ d$ @6 F. B9 ~  e我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。6 U0 V+ x0 k5 v& w$ n6 c' U. q
当然啦,这两款主机也是相当不错的。* H7 o% b" f1 U7 J2 Q
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
6 f1 H7 P; F4 R' h* u标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" V6 w4 L- i+ C5 b
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & ^2 F/ F8 }( |% p  U
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55! J1 t9 V: p) Y
自己加QQ去问吧。

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