
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. U: M3 z) e3 a' U1 ?& N
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。1 q, c1 d( y& r. i5 i1 z7 M
首先我创建MYSQL数据库表。; a+ o S4 \" `6 A8 h
CREATE TABLE tablename (2 `& }6 Q0 I) d7 S9 d
field type(max_length) DEFAULT 'default_value' (NOT) NULL
( |# ? [" j0 n1 _}可以使用的SQL语句。
3 Z& L& \: L; Y; y# g( WCREATE TABLE useronline (/ v" C6 K' }2 @& U
timestamp int(15) DEFAULT '0' NOT NULL,
8 r( P7 N, j( L; p. lip varchar(40) NOT NULL,( ^, j5 |+ k# `% \+ @
file varchar(100) NOT NULL,
# m$ ~: S# Y6 p& z& `6 gPRIMARY KEY (timestamp),
# r- S9 X+ j0 ]$ i. i) c- |- zKEY ip (ip),
( U2 E; {* N6 h9 K9 S+ H3 KKEY file (file)% _! I/ } S( r+ s, b
);下面我们是PHP脚本,首先我定义MYSQL的信息。
" p' r; P# `, a& h0 N$server = "localhost"; //你的服务器! z$ I* H3 z0 \/ n" C
$db_user = "root"; //你的mysql的用户名- k f+ }8 N! }
$db_pass = "password"; //你的mysql的密码
( n5 e" \! U. D" x J- j$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) T F) A4 N2 y" ?# G
$timeoutseconds = 300;取当前时间。
k6 x) ?" f2 L1 {1 ^$timestamp = time();上面的完整代码:
# S+ h$ V/ I; O2 K# L<?php
6 q( J& E4 j0 P. N$server = "localhost"; //your server+ {5 j) N3 |: S/ Q( {% K
$db_user = "root"; //your mysql database username
3 O" Y1 M, `4 F6 m6 d2 n$db_pass = "password"; //your mysql database password if any& @0 h+ ~! \/ X1 d
$database = "users"; //the db name
% L2 o4 K! U. G7 A) O/ T$timeoutseconds = 300;//timeoutseconds limit
+ B7 t9 \: I. K. v: g/ K* f% E//get the current time
# O c/ B9 U/ Z$ @$timestamp = time();; M2 B0 x1 h3 ] }2 e
//calculate the lowest timestamp allowed3 K. h4 b) `/ p N/ k. w
$timeout = $timestamp-$timeoutseconds;1 f; X5 R1 e5 B9 j
?>连接mysql7 m8 }; {9 i# ]( S! _3 q5 m
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 \8 A7 q1 _' W+ B Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
; J% S( i, u+ p7 G/ a: W* Y; xmysql_connect($server, $db_user);查询数据库的代码:
2 r& w0 m3 U. J2 ^6 ?% `mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
2 G8 B( J7 k$ k; q- {! n) X$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ N8 x. [ h8 S0 P- u('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% E5 Z: J* C; [* x
如果用户用错误信息的话,这样处理。+ Y8 f' E7 v8 R8 J
if(!($insert)) {( o1 X2 B( m# J4 X
print "Useronline Insert Failed > ";
% y7 l1 K* r5 ~: l9 @$ u, b7 ~8 z}然后实现当超过设置的时间就删除该用户记录。
, J! b: r, X4 [& N) u8 v7 v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 r/ c4 q; S) |) M0 P6 W# X
if(!($delete)) {; [' [2 w; e* ]- A5 `$ Y
print "Useronline Delete Failed > ";5 y" B: v) ~2 P$ q! A
}下面我们解决数据库中不同IP的问题
8 x- f, v- `8 p7 @& \8 W7 g$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& @. G/ Q; D' I. @* C! e* x
mysql_num_rows(query);来统计用户,代码如下。
6 h5 Q! A; O' K$user = mysql_num_rows($result);最后关闭数据库。
F1 b# M( v$ Y& Amysql_close();显示在线的人数。
$ g; k5 v8 R- R7 ^; fif($user == 1) {
( m9 {5 u9 V1 q% `) U" vprint("1 user online\n");
9 H0 a% S* M0 I9 l} else {8 w# Q" n, ]: Y; q+ x- ^
print("$user users online\n");9 K- s2 r; \( S- `! O( j0 g# t& E
}最终把上面代码写成一个PHP文件如下。
' |" E3 u3 Z/ p; i, ~5 w. H<?php
' {! g* S+ z* ^- Q* Y8 H//Put your basic server info here
3 }+ n' x8 Y" s" L+ f6 a2 z$server = "localhost"; //normally localhost+ H6 x( P; j* K5 G3 t$ F
$db_user = "root"; //your MySQL database username2 ~+ X: i1 q3 T- A! M
$db_pass = "password"; //your MySQL database password
, @3 G! V) Z; L+ b4 ]( U3 y2 u$database = "users";
, {5 S2 P) n S* \$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
% V# Q/ Y, Q5 d8 W+ i# Y" Z// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
) K' N9 v4 z3 g4 t' [ I$ B// $timeoutseconds seconds)7 S+ G4 t" h2 J. X( _ w6 U
//this is where PHP gets the time
8 Y& [3 r6 k2 l7 I' Z8 y6 ]! B- x$timestamp = time(); N& v( z5 s1 }0 Q/ y# v
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
9 c1 x( S. X5 w( w$ k Z! x$timeout = $timestamp-$timeoutseconds;/ I2 ~3 i. J: [( e, O2 _
//connect to database3 Y- l' a8 s2 l# _
mysql_connect($server, $db_user);9 e4 E- ~' b; u1 }/ X2 @. v
//add the timestamp from the user to the online list
, ?; @) w9 O, ^9 V: S0 }$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
. O/ Z6 d, ?0 |('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 s4 y8 m3 m% w. v7 y% {* cif(!($insert)) {
( N& S5 C+ v9 p( W% xprint "Useronline Insert Failed > ";
0 U& N) v# c2 Z, i2 A}" @7 {" B1 @( i3 \& a3 W
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.! A6 |0 H3 @" g6 {
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
6 u- s+ c4 [6 q) J' S/ Pif(!($delete)) {- k5 M2 a8 r* b8 a5 T
print "Useronline Delete Failed > ";
& \, O! p0 d- R; V. j: J4 k}' G1 W8 d4 F4 Q2 i
//select the amount of people online, all uniques, which are online on THIS page
2 i, J3 z7 @/ ]7 h" U( }6 n$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 d5 L: s* f2 @: K$ m$ ~4 j
if(!($result)) {
: G* H; i# L7 z$ u" |print "Useronline Select Error > ";
& M# H3 i4 O0 D; A3 Q}2 t% h, ^, x1 L
//Count the number of rows = the number of people online0 V1 ~: d7 L/ Q# T3 n4 ^* i
$user = mysql_num_rows($result);
) |' W6 a3 ]$ M+ l" U" a4 E+ ~3 k//spit out the results
0 @2 y1 ]& {& T8 V Amysql_close();
$ |8 _* e1 D0 E' s, N, R6 Oif($user == 1) {9 ]+ L( ^/ }* p1 c
print("1 user online\n");0 X$ u, Q8 R2 M7 j9 t
} else {
l8 a" ~4 F4 Q8 e3 ^% @" Qprint("$user users online\n");* c6 f+ ?' m! Q. v8 F' J; e
}! n. ]+ y7 }1 ^8 T
?>& e# G E9 m8 `/ r$ O

( o5 e) ]6 F: z. ]* O以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。2 u* Q: G+ l8 ~
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。+ H0 C4 a' P4 Z6 }2 F! u( S" e
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。0 `6 y5 T( r0 P4 j5 C5 L0 ?
当然啦,这两款主机也是相当不错的。
0 F5 n8 O" n& f. Z2 ^智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
C1 C5 }$ y9 _) N O- M$ D8 `标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年4 R6 U& z% O$ R; t3 K
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 3 c" c0 d' ?( ~9 ?7 c: L
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% @( m/ A. f) R* e3 f
自己加QQ去问吧。 |
|