|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 @ b4 B, d* v
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 x- }. T' W0 A+ h U
首先我创建MYSQL数据库表。
- y6 l9 a2 G1 |CREATE TABLE tablename (6 w9 D4 [% [& W# G; C* B; J
field type(max_length) DEFAULT 'default_value' (NOT) NULL; d$ P, h5 _% Y B* X7 Z5 A8 U
}可以使用的SQL语句。
/ _6 i& q3 f5 o8 d! t0 ACREATE TABLE useronline (
( ~7 W+ Z9 T) m+ d2 `% jtimestamp int(15) DEFAULT '0' NOT NULL,8 l/ ^7 R& E8 @0 q3 C# k& f: I
ip varchar(40) NOT NULL,% a. i a# f5 }7 D: q' i
file varchar(100) NOT NULL,9 ?# ?* o, B# g4 J8 e& q# S
PRIMARY KEY (timestamp),* [+ p K: ~2 k4 w7 D
KEY ip (ip),+ y$ S% V: I- e! Q0 h! \
KEY file (file)
7 J# W& b2 J) g0 {( {9 g);下面我们是PHP脚本,首先我定义MYSQL的信息。+ i9 C5 p. C- `: b) S" b
$server = "localhost"; //你的服务器
' g. N( y3 E+ O5 G7 m$db_user = "root"; //你的mysql的用户名0 b" A) `1 l5 w$ k( T* N; }1 d3 ]
$db_pass = "password"; //你的mysql的密码4 r9 P& d/ D7 i! d; M8 K# L9 M
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)% B# \/ A6 m# I
$timeoutseconds = 300;取当前时间。
8 T3 G" l, Q' D9 I0 M$timestamp = time();上面的完整代码:2 l+ G( l) S# h% i0 \4 j/ C" [
<?php& \ Z( W$ f/ h, C* y
$server = "localhost"; //your server
; ^# e5 M, R' i6 d$ w) d5 K$db_user = "root"; //your mysql database username8 W7 p2 m L& o9 H* x9 m+ ~
$db_pass = "password"; //your mysql database password if any
" D1 e5 Q0 ~& l$database = "users"; //the db name
) j' ` b' k7 A; p1 {4 H5 g$timeoutseconds = 300;//timeoutseconds limit1 e, {" \/ Y" U& D0 E( j
//get the current time
. f3 C6 ^( r6 J1 [# {8 ^ t, F4 M$timestamp = time();
. U W: r! D* A( v/ g& L//calculate the lowest timestamp allowed
% e( c6 G8 X5 A' Z$timeout = $timestamp-$timeoutseconds;
/ W ^5 X2 l+ E& L?>连接mysql2 A& |: v* p8 J% T) v; ^
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。- k: c% `9 C+ z! p) i* W1 s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接7 }" i8 }5 n+ Z! ~
mysql_connect($server, $db_user);查询数据库的代码:7 k* g2 b* ]# g3 X7 O; f
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- G, p& f0 I) O6 z0 C( r$ o3 s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES9 g- r4 ?. s0 l6 A$ l2 F* d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( O) A: N. m& X( x
如果用户用错误信息的话,这样处理。" G1 W2 U$ U5 h6 a
if(!($insert)) {
$ y0 o9 b/ E; N+ _" u, @) fprint "Useronline Insert Failed > ";
) T2 Q7 X; |3 f; s8 [% U4 y}然后实现当超过设置的时间就删除该用户记录。
* ~2 l8 o9 Q7 |* _4 ]1 m. o) m2 M5 ~$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。6 P/ W# W& l+ i5 ~" h" r9 w
if(!($delete)) {, C& j% G, ^' @* Y( T& ] x
print "Useronline Delete Failed > ";8 i% A6 c: @ Y* ^# T
}下面我们解决数据库中不同IP的问题
" T0 b; T* W9 |- b! t5 ]$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用* ?5 G: {6 c) ]$ I6 } `; j5 W! Q
mysql_num_rows(query);来统计用户,代码如下。
$ a% B1 ]1 b: G$user = mysql_num_rows($result);最后关闭数据库。
/ ~5 E) X7 J4 Gmysql_close();显示在线的人数。
4 Y6 F# X4 U$ i6 x9 `. L8 g3 e+ A2 Zif($user == 1) {
" k. [# E1 L0 V) K0 _2 Eprint("1 user online\n");/ s% t( B/ [+ q! j% \0 i/ T
} else {
0 o8 F2 Q) w- U/ h; s5 Z2 B/ Vprint("$user users online\n");
/ _9 w9 c! t& {$ k}最终把上面代码写成一个PHP文件如下。3 G0 L$ T' @& w! Z, a
<?php6 T0 A) `' R- g* ~. _! s
//Put your basic server info here
. K" [! {, Q, ^$server = "localhost"; //normally localhost
$ M5 s9 y# `" @1 ?$db_user = "root"; //your MySQL database username2 b' D' s% k5 n
$db_pass = "password"; //your MySQL database password
" ^" i3 [: \* ?( X7 p0 S$database = "users";
# z- f& F @3 Z9 |1 ]" I, l$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
0 R6 ]$ s9 o' T; Q+ N- y3 q" \// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last2 ]1 Q* C/ S% b
// $timeoutseconds seconds)
* V8 y1 Q# w- S! n% v2 W9 Z( a2 h//this is where PHP gets the time
' i. _5 _! E4 a t* i3 |$timestamp = time();( m; q C1 k! ]9 r$ f) b3 R% d x# q- c
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed! X9 f# m" s* I7 W# W7 `/ `' Q
$timeout = $timestamp-$timeoutseconds;$ Y8 y7 R: u/ c! r$ ~9 V0 @* |! W
//connect to database& g: p# z" P+ x8 X( ]; B
mysql_connect($server, $db_user);5 v5 U5 [+ g0 ]0 ?" M3 ~3 y
//add the timestamp from the user to the online list: P3 b8 U! v$ `7 o! A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES1 g: ~( P+ _# u% s4 J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");' D# r2 T; @5 Y. {1 ~
if(!($insert)) {
3 R/ j2 g: B- @+ ?* J. U1 z" |7 f7 Lprint "Useronline Insert Failed > ";
" c4 {' U! l" m: o" V}) p; y. D& x- Z0 x: p
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
$ E ?. K: E# t1 V5 U$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
9 W# J, F+ K, [, rif(!($delete)) {4 H# Z& S, S6 z1 P% f
print "Useronline Delete Failed > ";
; U, ?( ~0 `2 O2 ^* @7 N}
, N {5 W% W( K6 J7 w- w6 R3 g" h& H1 _//select the amount of people online, all uniques, which are online on THIS page1 A# z, R- H& J$ e) \
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");, P# I, @- ^: J+ p; q4 Z/ U
if(!($result)) {0 m! d2 R0 g) J6 I( E; ]& h
print "Useronline Select Error > ";
5 E( d2 m1 ^( e' \! A$ L* @}& s$ Y/ [# v& Y* }7 o" M% D
//Count the number of rows = the number of people online Z9 n* q& f/ _# }3 ~
$user = mysql_num_rows($result);* P6 k, E% u' y v! T/ a# E
//spit out the results) R1 w1 X! Z! @" b1 j. q
mysql_close();" ^# m1 e- x% b) S% t4 [
if($user == 1) {
9 z2 b. v( k$ M( ]8 ^% z$ Bprint("1 user online\n");* i) y u( O' ^: ?* a B
} else {
- z% x4 e' V& ~2 Q. Oprint("$user users online\n");8 t) Y; ^$ `: v
}. a; @4 |2 g% C' }& b& {( H e* Q
?>
" h I( r4 z! D) Y5 l6 R8 j 0 |7 S- y' [) Z& q0 C5 N
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% S1 O4 L6 f: B+ m. _" T; S
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* q* c) V1 _. d# ^
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
( [" ~. X1 r) g# t% j# V" Y1 Z5 V当然啦,这两款主机也是相当不错的。
+ U! U( b8 r% h智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; q4 U* N* ~# Z" O" J7 ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
' t" P; _# w) t3 i) o' B提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
8 X% h- {8 u$ L: f空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
! T: l7 _5 K" G) L4 u. I' i自己加QQ去问吧。 |
|