
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!$ N. T/ P2 X. w# v2 a
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。5 ^1 o, n: ?8 }: ^3 ~" Z$ q# M. a7 H% e
首先我创建MYSQL数据库表。
; C- F) `5 M3 b+ u" V# Y) G/ P5 qCREATE TABLE tablename (
9 o+ a6 ]0 `9 a+ K. Cfield type(max_length) DEFAULT 'default_value' (NOT) NULL
- V3 r/ C2 F* u# j. z2 ?}可以使用的SQL语句。
9 N! l; F# k6 y r* B- O! L/ `CREATE TABLE useronline (, S. Q& y7 O. N. j" ^
timestamp int(15) DEFAULT '0' NOT NULL,& T+ P# l( X& a$ w) S0 q
ip varchar(40) NOT NULL,
# x9 P. o, ?- f( ^" \/ s5 Tfile varchar(100) NOT NULL,, ]* E1 }9 T' A1 \3 X: G; u$ R
PRIMARY KEY (timestamp),
% Z9 X: g2 f2 Q* NKEY ip (ip),6 _5 U/ p# E% P" Y
KEY file (file)" o/ N( f9 V& }
);下面我们是PHP脚本,首先我定义MYSQL的信息。$ x4 p+ Z0 s5 o) V$ H7 M' k- H3 m
$server = "localhost"; //你的服务器) B1 `& m, B9 Z9 ^
$db_user = "root"; //你的mysql的用户名7 M" ^) z% Y3 s; ^" G
$db_pass = "password"; //你的mysql的密码
2 Q* c1 ]: [5 Z3 n$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* m& Y$ w0 G! w, [; @; e& Z$timeoutseconds = 300;取当前时间。
9 w: }+ r- V0 |7 [6 Q8 p& Z$timestamp = time();上面的完整代码:
8 L9 C9 h# Y/ m4 e3 F5 R& w5 V) K<?php
" ]! e3 k) D& b* `& F/ s$server = "localhost"; //your server
6 F0 `; a4 X" G7 q6 G$db_user = "root"; //your mysql database username+ X; I' m+ g! A) X
$db_pass = "password"; //your mysql database password if any
7 [8 o+ R/ \8 `; ^$database = "users"; //the db name
/ Z7 v4 i2 K1 C" t7 k5 o$timeoutseconds = 300;//timeoutseconds limit7 J. g, t; `! h' Y
//get the current time( m! k+ h) k8 {: i6 j9 m
$timestamp = time();. v. w: {- Y0 S/ C# r. b
//calculate the lowest timestamp allowed. L3 F- W/ ^. n9 l3 f5 K. \
$timeout = $timestamp-$timeoutseconds;
7 ~3 N0 }. Z% S?>连接mysql
! ?- a- L& F1 E) c5 @2 B. r) i& mmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
" q# H2 B# ~! W5 Y& t2 t+ Fmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
6 n: S: J+ r- z7 `* k4 Hmysql_connect($server, $db_user);查询数据库的代码:- f5 Y# P6 i& \4 H* d
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* t* t+ l. p8 Z; b+ M$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! b6 N2 K' o: C. U' k' h6 D6 o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 ` Q+ v6 V$ p/ c如果用户用错误信息的话,这样处理。
: m5 I( n' q* ^. P4 ` u4 Pif(!($insert)) {
" q9 R8 |/ a/ x m4 t2 Sprint "Useronline Insert Failed > ";# @: ]- j8 J/ j' I
}然后实现当超过设置的时间就删除该用户记录。
# Y) @9 `! v6 }0 B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。5 H1 Z* D6 X, E% ?# v4 N9 [
if(!($delete)) {
; V" c! Q) H& ^& T5 G; K% k. lprint "Useronline Delete Failed > ";
$ Z* N: G& h9 l6 x}下面我们解决数据库中不同IP的问题5 f0 c2 p5 ? u, ?0 W u* ^. X0 y$ z! H
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
: Z, f: w* G/ \' g' k0 X8 s" pmysql_num_rows(query);来统计用户,代码如下。3 j2 a' e1 b# ]1 V* E$ Y
$user = mysql_num_rows($result);最后关闭数据库。
/ d3 i, X! {, H3 f8 ]+ Smysql_close();显示在线的人数。1 I8 t5 j+ d, E* d, B
if($user == 1) {3 j# V5 U1 O$ e* k: Z
print("1 user online\n");/ S4 D9 `. \) S. u: L
} else {
$ ]; V1 F0 ?5 T4 `1 f( {print("$user users online\n");: h. }! K4 x. Q. c( M5 L
}最终把上面代码写成一个PHP文件如下。
H0 \8 V' E% v8 W) J- B, v<?php
1 a9 B8 X$ J1 w//Put your basic server info here
! P6 C4 L- c; _% {) c$server = "localhost"; //normally localhost# I& y7 U8 J" n/ d/ y4 W* g
$db_user = "root"; //your MySQL database username
, p+ D+ `- {% s" `" g$db_pass = "password"; //your MySQL database password
: o }: R' Y) y$ n6 N$database = "users";
" A% }; U0 M( k; T" q2 i7 T$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; z# t: Z. e! X% p9 h- u9 a
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last! [3 ^ S/ C1 e2 A$ F
// $timeoutseconds seconds)2 c2 l( _3 A0 y: u7 F/ R
//this is where PHP gets the time
% v, ?! V% t: F" C7 p$timestamp = time();
* }* h6 Q- Y4 l- G6 B- Y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed6 ` d' r: X3 P# ~+ c
$timeout = $timestamp-$timeoutseconds;$ J; ^) [* `7 N9 Q/ C" I
//connect to database; P7 u1 ^! {# [' F( d" _0 h/ j
mysql_connect($server, $db_user);/ F: L$ O m( |+ D1 T
//add the timestamp from the user to the online list4 M; o* Y" o. |! A9 k" \' [
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& _/ H& Z: b6 v. |* Y3 J, r3 L
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 v/ o+ x+ p# { R
if(!($insert)) {
& O0 R4 V# ]- X7 k- e4 r `print "Useronline Insert Failed > ";
! z; ]+ L( [$ k* J( h$ B/ i}
( S6 C4 ?% ~5 H" f% V" ?//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ N; A) H1 V" y2 S$ H$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
6 d% }- B$ t5 C9 `8 u$ J N Uif(!($delete)) {
' E( T9 Z ] o" j, p* gprint "Useronline Delete Failed > ";. {3 l: P9 k# Y g# R0 t
}
0 X% a; B3 J/ u0 H7 U//select the amount of people online, all uniques, which are online on THIS page- L$ m0 |) K8 e' r: f. D+ e$ I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 ]+ j9 [3 a! J6 Oif(!($result)) {
1 j7 f4 I2 g) j; }% @. Bprint "Useronline Select Error > ";
. r* f9 O$ {8 \# H5 K}! a) O2 l! e8 w5 i# Y
//Count the number of rows = the number of people online' l) y0 w; g3 M2 r4 {! { ?
$user = mysql_num_rows($result);
7 n) l+ A1 w/ Z F( j, B//spit out the results
4 {- Q0 k0 H) qmysql_close();1 p2 @5 M [( Q/ S, ?3 X
if($user == 1) {; {: b4 Y# v! I+ O1 E
print("1 user online\n");
0 Y+ L0 K& L% m9 T$ F% l} else {! ^0 H6 P8 Z0 ~+ |& d
print("$user users online\n");! W. E7 Q, Y0 t2 c" f
}
0 O+ M9 X. `( Y1 H7 S" a& H?>
" M; S* v' w: A5 u" d5 l: f0 P- x
9 T9 u: X5 p+ r以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 |+ j/ d3 a d1 p时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
- K" p3 @8 Q7 }4 a0 i5 I我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
s( A4 ?1 w0 i* u5 U. ~- R当然啦,这两款主机也是相当不错的。
) R, R; a% @* f0 s N/ G& ?智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年4 ?. X& \% \) J( @& d( V/ {' ^5 G
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年* _- A: W& P1 g8 h, S$ E
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ , T5 V+ c, x! Z2 n9 d- }
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( j1 Z5 C9 ^& h7 |3 U
自己加QQ去问吧。 |
|