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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& S* ]4 P8 b3 B
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 @1 \0 F4 B" q6 F; f首先我创建MYSQL数据库表。
; \) ^, k$ P! T( x5 F3 xCREATE TABLE tablename (- F4 x' R3 |) r) U6 l
field type(max_length) DEFAULT 'default_value' (NOT) NULL3 R1 _2 ~5 H. X9 u9 i  B# I
}可以使用的SQL语句。3 G2 J* C- D! Z% \: {
CREATE TABLE useronline (" b) B( p: `& m
timestamp int(15) DEFAULT '0' NOT NULL,* `& J* q5 O3 y8 _3 q
ip varchar(40) NOT NULL,# `" |( w& ^3 k
file varchar(100) NOT NULL,
- k/ ?2 W( I: J! f  O! e' tPRIMARY KEY (timestamp),
  b0 t0 F! `' ^& t) l. h" k# bKEY ip (ip),
  i3 ^4 I1 R( u9 w, X: QKEY file (file)
  G% z2 k/ A& M);下面我们是PHP脚本,首先我定义MYSQL的信息。
3 o# z/ Y. f/ Y6 {$server = "localhost"; //你的服务器6 D/ A- D( C8 L; o3 y( n7 s) G
$db_user = "root"; //你的mysql的用户名9 x/ e+ j7 L; e, x) X- B
$db_pass = "password"; //你的mysql的密码
5 Q: k2 y- T: j1 ~* q6 U$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
& u  U8 I2 i2 c  G( L1 d) q5 C5 j* c$timeoutseconds = 300;取当前时间。
0 Y7 f- Z% C" a3 p6 r9 t$timestamp = time();上面的完整代码:
) |4 X* O2 }9 M5 Y1 ?6 |<?php
1 B% s# Q) @( i% \6 h- X$server = "localhost"; //your server: f4 J" c: a' O. Q
$db_user = "root"; //your mysql database username
2 P& f# f# {% p' k; `' s; }* \$db_pass = "password"; //your mysql database password if any. |5 @2 z' u5 }5 z4 m
$database = "users"; //the db name, g) w+ s$ P' S  F& J
$timeoutseconds = 300;//timeoutseconds limit6 p' r' e" b9 F
//get the current time. J  E+ T  R6 P1 d' N
$timestamp = time();
1 C7 m. t1 y  q' z' a//calculate the lowest timestamp allowed
0 p  w6 e, X% G: V$timeout = $timestamp-$timeoutseconds;9 Z3 K5 ~4 I- M  T9 k! c# p4 k
?>连接mysql
& g, m  Q: r- B' r$ U& ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。
7 ~' |  L! d& t, }3 }; Imysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
. k+ m9 J9 s1 x' \  Smysql_connect($server, $db_user);查询数据库的代码:
8 Z' r/ }) j$ d1 M& M; r, \mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- @% f3 I9 ?: O0 d* ^
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* J9 Z1 T& o. K* N& A1 X('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 D* b2 ?. Y3 B# _/ Z  a7 ~
如果用户用错误信息的话,这样处理。
* j6 E2 _8 a- @7 Xif(!($insert)) {
  y+ C+ v; l% B# _print "Useronline Insert Failed > ";
$ I5 F2 [3 k/ t}然后实现当超过设置的时间就删除该用户记录。& B3 y4 z8 ]) g; Q. ?, H# c
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
  t; [) I, f& K/ L- ^2 D' Uif(!($delete)) {
1 l  ]1 q1 v, P, ?+ x; R* Pprint "Useronline Delete Failed > ";( [/ s( b+ \& c& A% a4 _
}下面我们解决数据库中不同IP的问题
. ^- m9 L+ u5 _$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. L/ Q( T  n/ ymysql_num_rows(query);来统计用户,代码如下。
0 V: C6 d3 s$ @9 y7 W( i. F/ Y( P' h$user = mysql_num_rows($result);最后关闭数据库。/ a. @/ {0 t. r9 u
mysql_close();显示在线的人数。; q* l$ H4 e$ B" q' a
if($user == 1) {
) c. b$ l' \( i7 Gprint("1 user online\n");
( c7 i2 x& b. }2 K5 I* b% J! {} else {* G4 a. k+ B& D- H  ~5 t
print("$user users online\n");
2 d- A$ o' S$ q4 c+ B}最终把上面代码写成一个PHP文件如下。, q; Y6 x8 U5 _1 V
<?php* {5 `7 v  {; e1 p! H0 z; }
//Put your basic server info here
/ x; A+ n& ^, K- v& O( n$server = "localhost"; //normally localhost- y2 s- O4 h3 k3 `: E
$db_user = "root"; //your MySQL database username$ _- ^$ K" `5 P/ E& ]$ p6 d! B
$db_pass = "password"; //your MySQL database password2 L' j& j3 y. X" o* i# Q) ^" m
$database = "users";
/ ?1 `' j8 h* l$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; p& O( X' y: [& A
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last( z! A3 v0 S- F7 B8 L2 @
// $timeoutseconds seconds)- z* ]5 X' l% U7 P3 }* t8 e1 b( s6 H
//this is where PHP gets the time
5 W. j9 b! g2 h8 v$timestamp = time();, L0 E: H/ F1 Z7 X' ^' Y; a3 a6 A6 c
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed: e; A/ Z: g1 o
$timeout = $timestamp-$timeoutseconds;3 A$ e& U9 G- h4 A9 l, C9 u! R' Y3 H
//connect to database. Z0 g6 c8 F5 Q6 E
mysql_connect($server, $db_user);
; ^) e. ^9 ?# T! V+ f9 i' S//add the timestamp from the user to the online list
3 F) M/ ]  j) X. v$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! |" c' V; [9 y$ Z' E( m( M* }! h9 b
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) x& }$ \( O) \0 e1 Y
if(!($insert)) {5 u: s% U; C8 d
print "Useronline Insert Failed > ";8 i+ ]% s4 p: v7 J1 T
}
" ~( {- ~. t! ^' b//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
. w; F$ `0 ?' y9 Q' B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
  }0 e( g1 D* n" V5 E% Eif(!($delete)) {
: f4 ?6 u+ o, Y; K9 [  g8 \print "Useronline Delete Failed > ";
& \1 d% s5 C( n  V* g}
& i# Y2 N$ {) m8 B& N# s//select the amount of people online, all uniques, which are online on THIS page+ O- O# j- @8 o  u
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 K% v6 L5 S" d6 k
if(!($result)) {8 _5 }- ~& ~# c! y: [1 _
print "Useronline Select Error > ";' T$ N. j# \# [7 a
}$ A# S# e  N7 l  u0 ]9 }5 N9 }
//Count the number of rows = the number of people online! D2 l/ o/ n% v; b' I: g9 V8 i7 `$ E
$user = mysql_num_rows($result);
0 i) W3 P7 {: @0 l7 I- M: ^//spit out the results! \3 ^$ ^# G% y* `' O
mysql_close();
% J" n3 T$ m# N& p/ y5 E) cif($user == 1) {: [, p) q# A4 \7 L* K) ^% a
print("1 user online\n");3 j* L" l1 T  i, a- y
} else {. b. f) e9 M3 l! D9 j/ ]! S
print("$user users online\n");- s* ]/ H1 F: }0 O
}; P  G1 p9 p' c! w; q' l3 e# i6 J
?>
; D  A( n* u7 h2 |  E6 K3 R2 q) |9 G/ Z& j) P: M8 Y/ `- T$ Q
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
9 P1 T; K. R/ h' ?/ S4 W时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) x/ J: t7 m& c1 F8 J3 m
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。6 E" E" x/ c5 F: E% S
当然啦,这两款主机也是相当不错的。2 o" G& Q9 @% d. k& G' |; L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
) C/ u8 r. K( b3 n8 R. Z8 A标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* I( H0 `. S4 h  n
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 9 V, `9 Q5 k& G, G1 f2 S1 E
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# ]# ~8 A4 B+ W* V6 p" m6 y
自己加QQ去问吧。

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