获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!1 H/ v) i, x8 V, s5 y2 i$ n3 I. i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! F% N1 g" `! i" Z  c) k6 E6 I首先我创建MYSQL数据库表。* W6 R* G! @6 o( P) n1 l1 g) h
CREATE TABLE tablename (
$ a0 E% x! Z) Y$ O' ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
2 E* T8 O# u( a' {}可以使用的SQL语句。
$ K' f) P/ Q" dCREATE TABLE useronline (
- C6 J' z, H4 W" ^2 l9 z; ?timestamp int(15) DEFAULT '0' NOT NULL,( r! ]$ T& n9 S# w! x
ip varchar(40) NOT NULL,
# {6 K; N8 Y. @2 J6 ?$ C1 u) ufile varchar(100) NOT NULL,& T; y" N4 L5 V8 c$ o& o
PRIMARY KEY (timestamp),
0 A7 S0 [* |3 S# f& B/ bKEY ip (ip),! y: V. I7 f8 Q3 |7 O7 e7 Z: w$ k
KEY file (file)/ A+ z) T# W- ]- c
);下面我们是PHP脚本,首先我定义MYSQL的信息。1 Q. A! _, n6 V" u
$server = "localhost"; //你的服务器( l' D  l) _) L! T+ E; U8 `& K
$db_user = "root"; //你的mysql的用户名& p5 T8 U& g1 h% `( \- o
$db_pass = "password"; //你的mysql的密码
1 [. @* u) m2 J2 T$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)2 X1 ~! z- t, [8 |" U3 |+ Y+ f
$timeoutseconds = 300;取当前时间。( n3 a1 T* C4 q+ T5 S# N
$timestamp = time();上面的完整代码:. Y* u1 v7 T- ~2 d
<?php
6 e' X6 }2 u; t  L$server = "localhost"; //your server: f, G9 r* o0 l  I2 ?: f# Z  Q7 r
$db_user = "root"; //your mysql database username
8 ?% i# |/ p+ n2 R$db_pass = "password"; //your mysql database password if any3 d  d* Q4 R8 [9 }, A3 V
$database = "users"; //the db name
& w( J; X  T$ G- @' f2 z9 z$timeoutseconds = 300;//timeoutseconds limit
6 T  C2 e, V, _1 D//get the current time
# o4 F  w* J2 u9 x- W/ w% F6 W$timestamp = time();3 d" h, y: c/ A( j' y: y
//calculate the lowest timestamp allowed
+ n7 s; L; J5 G8 S5 Y8 w$timeout = $timestamp-$timeoutseconds;
# P3 L. F6 F) a9 @; C7 Y?>连接mysql
* X( @) Q$ y" n1 d* R/ Amysql_connect('localhost', 'username', 'password');也允许使用变量形式。! v3 ~' P: w: ~" j( g- V, Q; ^: }
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" S: {' V/ Q; [3 R
mysql_connect($server, $db_user);查询数据库的代码:
7 l6 Q% y# E; G, g4 Z& Umysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: ]# S$ T9 O0 t/ Q) c& W
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
% `7 O0 k8 B" _5 n& S7 C7 L('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 C2 x2 v. w+ O1 z% J4 E1 B3 Z如果用户用错误信息的话,这样处理。) `3 E* ~6 D. F% @5 B6 f
if(!($insert)) {
, c  E6 x& G& tprint "Useronline Insert Failed > ";
, q0 U) o- Q$ w2 l  G' b; |}然后实现当超过设置的时间就删除该用户记录。
# z0 g6 ^: Z/ x3 t0 D0 o$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 [0 l3 R( S* i% K$ E9 o& Mif(!($delete)) {
% o8 d% F9 a! [- R7 zprint "Useronline Delete Failed > ";2 h0 f- O; o8 n
}下面我们解决数据库中不同IP的问题
7 \6 c+ S: F* n' n8 M) X$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
/ E. o* w3 \' p; H  L5 M& @mysql_num_rows(query);来统计用户,代码如下。
% \/ o% ]8 v: @* f6 u, Q. }$user = mysql_num_rows($result);最后关闭数据库。
% e7 ]- a. B  }. p7 z- Z( amysql_close();显示在线的人数。/ ~, R3 X7 u& M) H0 X6 b3 z
if($user == 1) {
9 S* L' X4 |! M8 [' dprint("1 user online\n");1 ^: y7 D( O5 ]/ @
} else {3 H+ i8 s; I' ?3 }9 z
print("$user users online\n");  m" l# ^( \1 B9 K$ K0 n
}最终把上面代码写成一个PHP文件如下。
. W: F; g" c& G4 |<?php+ p. q2 ?! i# R& G
//Put your basic server info here
3 q3 e) G$ x! }6 v1 c6 L$server = "localhost"; //normally localhost
* U4 D3 }8 ~0 O$db_user = "root"; //your MySQL database username( K9 H( F+ C% s3 m. b
$db_pass = "password"; //your MySQL database password5 ^# v* c* O% G+ x$ k9 S
$database = "users";  D- J1 q* w8 s4 x; n. F
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" h2 W) Q4 `" G0 ~$ {. M8 s
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last+ c% F8 Z  x- S+ L
// $timeoutseconds seconds)) C, ~3 `$ n; a2 u$ v2 G" u# S* h
//this is where PHP gets the time4 T  f1 H3 @9 F: [; ~
$timestamp = time();# n% r% u6 F, O9 Z# {# v4 d
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed% v/ ?! ^! ^9 |6 \: l% s
$timeout = $timestamp-$timeoutseconds;9 ]: c* L9 i, W  S3 B, }! u
//connect to database
2 d! Y4 G! R* w1 g4 I. F* z9 v+ Bmysql_connect($server, $db_user);
' w: I3 a8 A, e$ i! E$ D. y' q4 y//add the timestamp from the user to the online list' V- v5 E' ]  Z# ^) }7 V7 i1 l
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) g/ s. ]& @' j: M& p% Y% v  m('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ ]/ }8 `) `5 I0 N
if(!($insert)) {% \# e5 ^) b6 h1 Z
print "Useronline Insert Failed > ";
. _% H1 r3 r8 p# t}0 I+ r! T' l! F2 f# g0 w! s
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.8 x6 B* O5 J& V) P: \3 S
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 J' ?: y$ I* y8 @% Yif(!($delete)) {
9 q( ~  ~8 U! j' i) }: v) r3 s2 eprint "Useronline Delete Failed > ";
9 {) f4 x4 u1 f  e3 H" n9 h8 Q}
0 h9 q# b( E2 q1 z0 o% G8 Z7 P//select the amount of people online, all uniques, which are online on THIS page
; h3 C: K6 g$ [: ?* m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ S) `7 |; O  r/ |
if(!($result)) {
+ [1 H0 y) o" W. _% dprint "Useronline Select Error > ";/ ^6 d4 `; F1 n& V) {( w$ e( i
}
+ d7 j, h* h( I//Count the number of rows = the number of people online
7 Y+ V6 N. Y  B7 E9 [$user = mysql_num_rows($result);
2 ]9 f. C+ m0 e8 ?% g//spit out the results
( f4 F/ s0 O/ `mysql_close();8 ]( l) g# Q9 [4 a) d( u( `7 z
if($user == 1) {( F: u: R" |$ ?1 F) J3 m0 Q
print("1 user online\n");
! W1 ~( P) H0 ]2 Z* J/ g" H} else {$ Y3 s" k3 v8 g% A9 b% _
print("$user users online\n");# b; p7 k  ~" j6 u; T' v: Q
}- a% V& s' l1 t( Q' ]  o
?>
& N- m: a8 J9 z6 {% C% A" b: f* X' |8 {
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
# }& t! p2 @3 A0 a2 ~! }! s: g时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- e- c# K7 X/ l: F+ O& c. W9 F我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。/ s- s" `; N8 U3 q3 l5 m. Y
当然啦,这两款主机也是相当不错的。
( v$ X$ Q' ?7 F9 _& e5 k- K1 O  Y1 {智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年1 g* @. Z6 \" e# H, I  E
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# x+ k' \/ C. D" T提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 m" n8 [0 ~  d. N, E( r9 s2 o+ A空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
4 e6 k! y, b; u9 G% {$ B自己加QQ去问吧。

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