
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 n/ b) `# `1 ?: S8 U我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 U) b" J4 @0 H
首先我创建MYSQL数据库表。+ H1 r; `6 V7 ]! B, G
CREATE TABLE tablename (+ k: k% z. S6 Q
field type(max_length) DEFAULT 'default_value' (NOT) NULL* \0 r' G& U/ {, ~4 W+ t, }
}可以使用的SQL语句。& B+ f& K A1 Y
CREATE TABLE useronline (
6 X5 e- `" r! T# @timestamp int(15) DEFAULT '0' NOT NULL,: t! i9 H _% \! X8 h
ip varchar(40) NOT NULL,
8 r6 z: M) W5 W. y5 T& B7 _6 Zfile varchar(100) NOT NULL," T* s- p' q( d$ \+ N0 K
PRIMARY KEY (timestamp),. q. ]+ Q2 N( R7 b- [
KEY ip (ip),$ B( d/ X3 m0 m1 k F
KEY file (file)
( a5 o& }' V0 g3 P9 R& o* Z: H);下面我们是PHP脚本,首先我定义MYSQL的信息。
) A" d% z7 ^; [ l7 r2 Z$server = "localhost"; //你的服务器7 I- a+ @1 P) I$ G6 @+ R) W# Y
$db_user = "root"; //你的mysql的用户名
B2 L+ c% n; A% t6 `$db_pass = "password"; //你的mysql的密码
/ ?0 p$ s7 x! U6 g3 |$ V$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)- b# T8 x+ ~' ]) |; J
$timeoutseconds = 300;取当前时间。! D+ }; t: W1 Y' ^& n
$timestamp = time();上面的完整代码:% @! k* @! |; u& | t* V( O
<?php* E8 C9 R) \0 I6 x5 d1 M# x( w
$server = "localhost"; //your server% ]; x" v/ Z, v3 F: b: c
$db_user = "root"; //your mysql database username
8 X6 }( T6 S; u$db_pass = "password"; //your mysql database password if any4 o# ?6 V* L9 b; d0 i' g- K, i
$database = "users"; //the db name( Y, i2 Q% U r
$timeoutseconds = 300;//timeoutseconds limit
5 y$ P7 ]+ [9 `1 W//get the current time% w% {0 x- I% g y
$timestamp = time();0 c) o l J+ Z/ Z9 Z* Q
//calculate the lowest timestamp allowed
4 N+ x& a9 i9 B7 \6 T7 u$timeout = $timestamp-$timeoutseconds;
6 D' G) S* B5 _4 c9 f3 y$ |?>连接mysql
3 Q+ U& i; A6 u. Nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。$ M6 K! B( d9 U6 m& b! f
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 g' r" {7 r7 C
mysql_connect($server, $db_user);查询数据库的代码:
t' Q, o4 Q3 U# t% pmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ E. A0 o8 H9 ]3 [5 d- l2 @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 y8 ?4 S* w8 \: a! ^
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ {( ^9 P4 b/ U1 A$ P如果用户用错误信息的话,这样处理。9 M- Y2 R- {/ u7 \/ b' t
if(!($insert)) {
8 L9 J& F' c6 U& }! M" D; a6 U7 mprint "Useronline Insert Failed > ";
D4 S3 A0 I" Q$ q}然后实现当超过设置的时间就删除该用户记录。
' ^3 u/ I. Y3 G8 r+ @" A' A$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
4 `2 ~+ T. F* v2 c6 B) n" B% Vif(!($delete)) {; t/ u) m$ o5 V7 { l# l
print "Useronline Delete Failed > ";
' V4 U& z: H: B* [, ?; z}下面我们解决数据库中不同IP的问题
# h" r/ O3 D9 {7 o2 |, h$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ a/ \# K3 ?( B ]5 m9 T) W. ?mysql_num_rows(query);来统计用户,代码如下。
' O+ h8 P J# {* G- g$user = mysql_num_rows($result);最后关闭数据库。
7 C1 N5 }* ~! A' F0 `& |; emysql_close();显示在线的人数。
2 M, O$ I) H9 q2 N. dif($user == 1) {. P; y# ^) O/ I9 L
print("1 user online\n");# C8 a8 v0 n2 K9 i
} else {* r' P8 e* Z4 X6 `! q* Z1 C8 U
print("$user users online\n");. |8 [4 B4 q( g" T- v
}最终把上面代码写成一个PHP文件如下。 T6 r& |5 u+ [& Z( Q
<?php$ R% q( ^! F, u% m r& D2 U6 z
//Put your basic server info here
4 g( G5 @. R- p/ Z, I ~& W3 g) N$server = "localhost"; //normally localhost
, v8 D$ P. _8 X( o3 S% y) C. Q# G$db_user = "root"; //your MySQL database username
t5 q3 J$ f3 T8 ^$ ?$db_pass = "password"; //your MySQL database password
/ e3 r0 u- u( o0 K+ ?6 o' Y$database = "users";
0 }0 }9 w8 M: M! }/ ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are4 J1 u/ F$ z7 I$ Y- ~( ^
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last" V% N3 s8 u* ^/ {
// $timeoutseconds seconds)8 T2 T, O) N$ r5 ^
//this is where PHP gets the time
' Z# J- G* s3 C( F$timestamp = time();5 r# G6 @ J H u e0 o
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
, ]1 ~0 e8 T: A% U$timeout = $timestamp-$timeoutseconds;
( K. g' w: q f: [* H1 Q//connect to database
" ^8 K$ p! u2 z( t" ~mysql_connect($server, $db_user);
" H2 ]5 {0 r/ y' D6 ^//add the timestamp from the user to the online list9 m, X( R, U2 s/ c, o1 T
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES$ E2 u! A2 I' i, t" F O
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' N4 r! d6 q3 t8 M6 ~, K# [if(!($insert)) {8 k. V) G1 S* e/ h, Q6 t. C
print "Useronline Insert Failed > ";
# X* k* N; n! o) j7 I}$ } Y/ D4 V: a
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
5 d W" \- E& y# X$ y& m2 n& y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");1 ]* @# B; `; m/ B C: I
if(!($delete)) {
- t* ?' |% N% C1 R9 Z6 e9 D0 V( Qprint "Useronline Delete Failed > ";
+ Y" g1 e6 u+ S9 d, t}
/ [4 }/ @) _+ `# U6 y( }/ u//select the amount of people online, all uniques, which are online on THIS page
$ F( V0 s4 [0 w9 q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 t& a' I0 k$ W8 c: hif(!($result)) {
, p7 G$ n7 E& wprint "Useronline Select Error > ";
7 V: N8 w3 w4 F3 ~4 n p( o% y}
7 I) [ E* p/ L7 z9 S( V+ W- _//Count the number of rows = the number of people online
2 ?4 Y5 K& U4 D0 ]$user = mysql_num_rows($result);( [/ H4 P4 b: E% ^8 h8 S
//spit out the results
& [6 C( ?: h. n: L omysql_close();7 ^" p( j; h" Y; u* ~
if($user == 1) {
* h, a: p0 t0 T& q" hprint("1 user online\n");
* d# d* U/ k9 a' f& W& Y} else {
* V" X: g1 D0 o+ z$ v8 k. m7 Cprint("$user users online\n");. }4 Z6 H& V, L' N2 }1 o- n0 H
}: z$ h; p% i3 d/ g
?>( \+ M- \- i) d/ b6 ?- b1 P6 C

! c/ F3 X, \! B% m/ [! t& h% V以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
' z) }9 q0 Y; Z7 S6 W% k+ I5 Y- f0 S时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- C t+ k" F X9 C我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。% C$ H5 U; s; ?1 i
当然啦,这两款主机也是相当不错的。
( d; L; p6 V% [- }9 _智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! G1 J" ]8 k" u2 V' h* e6 M
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
, l2 }7 t; j }. e6 `提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
0 ], L1 G9 b( A; p空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
N6 d; z {5 [+ a+ Y- J自己加QQ去问吧。 |
|