
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
+ s; {) u5 u# Y& I我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
' N; X+ g& ?. a* r首先我创建MYSQL数据库表。
, }* [' e* q7 G# k& U% N8 gCREATE TABLE tablename (
: _9 ~, H7 g3 L! |& j# Ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
- \/ X+ B8 [/ h}可以使用的SQL语句。
( l6 a: ]9 [( A; [" ^8 kCREATE TABLE useronline (
7 O9 i+ c8 p9 t/ v! xtimestamp int(15) DEFAULT '0' NOT NULL,
6 J p1 v, H4 ?* D9 h$ Sip varchar(40) NOT NULL,
9 T6 c$ ?9 y, O+ R3 V3 G' U* Qfile varchar(100) NOT NULL,! K0 D( n! ]0 C; x. ~* a9 y& W. P
PRIMARY KEY (timestamp),% z* p% G" L0 r9 P
KEY ip (ip),% C M! e6 \% S" Z: r a8 v3 B
KEY file (file)5 h$ ~8 W% m, S1 z# ~' u& ?, B
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: s; l; q& {0 Z' z! F' H$server = "localhost"; //你的服务器
- }& e) {$ ~/ t# E \1 H: H' i: {$db_user = "root"; //你的mysql的用户名
( w6 ?) j5 X( v4 @$db_pass = "password"; //你的mysql的密码7 M( j9 g1 O. L* q) ~4 Y" n
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
4 p9 \, G- D9 r) D! K- G8 R, O$timeoutseconds = 300;取当前时间。
1 Q; F; z, A) R$ L& C+ f$timestamp = time();上面的完整代码:
1 \+ v# c: B6 _* l0 h. `& m<?php
, h# W4 d6 G6 y9 q/ o$server = "localhost"; //your server2 e8 I) k( J7 M! a
$db_user = "root"; //your mysql database username* l ~& o4 ?) b; \( l
$db_pass = "password"; //your mysql database password if any
6 Y9 Q: [9 P* x' D# Z) b$database = "users"; //the db name
/ A. {2 c4 G! q8 U: j$timeoutseconds = 300;//timeoutseconds limit
/ j% z5 r! j# W+ `! f8 F//get the current time6 a, F! z( m3 s, n
$timestamp = time();$ Z, i# j* K* [5 @( T
//calculate the lowest timestamp allowed
' K1 `5 q& S. u: i5 S/ W* f$timeout = $timestamp-$timeoutseconds;
3 E1 d. _- @3 r" s% i1 B$ O?>连接mysql
. l- e+ R5 F6 g5 lmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
9 ?: R; U" V+ _( O* C1 `mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接3 a- k2 |: B7 ] q' o8 {+ B
mysql_connect($server, $db_user);查询数据库的代码:) w: t/ O! l, C/ z I6 x, G. {, v
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
( [! v; j' f8 Z% U5 u0 F, {# S$insert = mysql_db_query($database, "INSERT INTO useronline VALUES! j9 o- w& }2 M" c3 R' @
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 Z! }( R/ b- Y$ W T- H8 ?
如果用户用错误信息的话,这样处理。1 b5 O/ N9 ^" S4 }5 O: u# M4 J& ~
if(!($insert)) {
~/ D9 e, z$ \. A9 ?9 gprint "Useronline Insert Failed > ";
R" Q0 P! U5 K* c0 q) @}然后实现当超过设置的时间就删除该用户记录。9 C D+ \# t2 ]' K; b
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
7 h; E/ e1 E4 oif(!($delete)) {$ y* H2 G. H& g- q+ n3 H
print "Useronline Delete Failed > ";" X. l3 Y0 ]; Q4 v
}下面我们解决数据库中不同IP的问题
5 b$ b X5 r$ S6 X5 J3 K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
3 W, h1 w4 R3 y1 T. Tmysql_num_rows(query);来统计用户,代码如下。
0 \* X: G0 @ p* B. E, C6 d$ F$user = mysql_num_rows($result);最后关闭数据库。
; S9 E! ~7 E) r3 f" s% @0 Imysql_close();显示在线的人数。
( O; @; T# Z4 O9 g1 Gif($user == 1) {$ U% Q& Y1 c. v" s' R
print("1 user online\n");
2 m4 K% D0 t* |% { R} else {/ E+ q1 v5 V! P* f8 R: M! j7 T
print("$user users online\n");' W: D7 C/ K. x
}最终把上面代码写成一个PHP文件如下。* v& V9 B& r+ I' S
<?php
" t- b% ~' n1 h9 U ^1 B1 ~! \0 I//Put your basic server info here
9 q$ t9 O/ r5 z: z }$server = "localhost"; //normally localhost* a8 H8 v4 i7 }# R
$db_user = "root"; //your MySQL database username, L- u0 f5 J' T
$db_pass = "password"; //your MySQL database password3 w% w& ?. l5 @6 W9 Z
$database = "users"; Y( h# |+ e: |8 I6 @3 d0 d
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are V$ @6 _ K a
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
' @5 s* y% g, `$ A9 t9 o. Q// $timeoutseconds seconds)/ z2 l) _6 v6 q h4 E% B
//this is where PHP gets the time
' M, { F/ M8 Q1 z: g `$timestamp = time();- v* ~0 C8 T U% @& n
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 `0 C; y8 Z" N& W+ f7 V9 v$timeout = $timestamp-$timeoutseconds;0 p# _! Z; k) N- J0 ? u3 L5 z" T
//connect to database
: w$ e# f; d6 ~ G7 ^ M, L6 P5 Dmysql_connect($server, $db_user);9 i0 B5 J; I' f: ^5 Z' ?4 \% b
//add the timestamp from the user to the online list
# V: {8 Y8 T9 C: y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2 ^$ _' m' h5 Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 y: T o( M4 p3 wif(!($insert)) {1 Y/ F8 J J8 b i+ f: }
print "Useronline Insert Failed > ";& i: D1 j- Z) e" G2 a0 T8 j
}
' t( x0 B+ T( r& u$ h4 X I//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: S- ~" G% `- V, o7 p$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 e' |& a: v" `( s' lif(!($delete)) {
! l& @0 f4 r, jprint "Useronline Delete Failed > ";
3 P7 p5 l3 ]/ t" m0 u5 w4 r! T' g}
: S5 y1 ~& U) J# B' a# S//select the amount of people online, all uniques, which are online on THIS page* X6 R% q, M3 c0 a$ U. V& A$ G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");9 b- {) s- u; M/ Z7 w
if(!($result)) {
* Y! Q$ M8 J; i" i/ aprint "Useronline Select Error > ";
, w# I+ U) R D4 U0 w# }4 L}
) F5 H6 K4 I% \; N//Count the number of rows = the number of people online2 Y( ^: {% }" ?( q- [& x2 y
$user = mysql_num_rows($result);
3 b! y5 s1 ]: G//spit out the results* V" h8 z* i- H8 ^
mysql_close();) p4 c$ V$ i9 b" m4 Y
if($user == 1) {
3 N* f3 V/ p& `: A& @print("1 user online\n");; S$ E" z5 s6 j/ m
} else {7 U- c3 t& m% i- x- ~# Z) _
print("$user users online\n");
9 Y; e) O4 u6 g4 b5 t" V# O}
% m+ m# q# C% l$ P; X0 p1 Z$ i' i?>
4 h% V$ j- C; H3 u1 [$ H
" p6 J3 [. O* V9 e0 G5 C& |以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。/ E6 q( c( p/ o3 {; q( q
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。, l1 x$ s& p6 e) }0 P6 `
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。% Q$ T, q, f0 }7 z( m
当然啦,这两款主机也是相当不错的。, M0 M* K; p$ s- P7 M
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年4 p Y# K! A8 u1 h9 A; k
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: s- R8 c: n) P- Q: t8 r
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
, Z& a5 Y& u5 e! N }: Y; b. D* c+ E( O& L空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 w9 H) v& I( b! R( C: Y C( E
自己加QQ去问吧。 |
|