
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!. q& J% S8 i+ e6 F
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。3 P. e- u% `( _5 D% r
首先我创建MYSQL数据库表。7 R: Y1 m5 ]# B0 a
CREATE TABLE tablename (
7 U. H/ K! W2 B; t H# T: u% @9 o- @field type(max_length) DEFAULT 'default_value' (NOT) NULL" H, Z" G* `) X J& h2 P
}可以使用的SQL语句。
6 x! X( ~6 C7 S- k6 G; k1 w' uCREATE TABLE useronline (
0 S, z0 m3 P; etimestamp int(15) DEFAULT '0' NOT NULL,2 j4 d, w1 R8 h C, j, I+ |* o7 B
ip varchar(40) NOT NULL,5 @1 ~: B" z% |6 N0 Z) O. t0 I
file varchar(100) NOT NULL,
+ n' ~+ A- ~2 |4 ^) dPRIMARY KEY (timestamp),
N1 E2 ~# \4 k U7 K, H i/ pKEY ip (ip),
! s9 E' h- `0 K" R9 N: Q' n+ E" ~KEY file (file)
1 @, {8 u- `4 w, D: n# D' ^);下面我们是PHP脚本,首先我定义MYSQL的信息。/ h5 j3 t3 L1 ~
$server = "localhost"; //你的服务器7 D2 H3 q* T' W/ e, K( C9 }% d8 m
$db_user = "root"; //你的mysql的用户名 Z+ f% w, o3 B+ b, J
$db_pass = "password"; //你的mysql的密码( ]( U) {6 }4 _) z& G2 w. i
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)4 s; ~5 |- c% z+ S
$timeoutseconds = 300;取当前时间。
0 G3 `# r/ }1 T" ~; A# o% k$timestamp = time();上面的完整代码:
2 }; j5 b5 K) g<?php3 i" f( F& Q+ L
$server = "localhost"; //your server0 g* J5 k. B* D) R
$db_user = "root"; //your mysql database username* P% A) {$ S9 s; D7 I9 B
$db_pass = "password"; //your mysql database password if any% W6 E3 [, j4 y1 S& j
$database = "users"; //the db name4 c3 q4 g8 T' C' P' X8 }
$timeoutseconds = 300;//timeoutseconds limit
( N) O: r0 X& \, l2 W//get the current time3 m: _% J+ [4 r: C
$timestamp = time();
, K6 n: r: w, i//calculate the lowest timestamp allowed" A; f* M1 Q" M9 ^( y) k- H
$timeout = $timestamp-$timeoutseconds;
: R/ ]. O* K" w4 ^$ U?>连接mysql
2 E/ `' [4 C- }5 T$ Xmysql_connect('localhost', 'username', 'password');也允许使用变量形式。; V$ V" ^: d3 s& z u" N4 R4 o3 X
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
3 w- @2 H+ c4 @; Kmysql_connect($server, $db_user);查询数据库的代码:1 _6 Z6 Z/ j) Q5 `, r. s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 U9 m4 C3 [5 [+ u& Z2 y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ }1 ?% N- d+ B# F% `' q0 d('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 Q7 k0 O9 W% l' z" H) e如果用户用错误信息的话,这样处理。
! `" U7 Z, i5 }; L; X8 {; hif(!($insert)) {
/ F/ w* d# k& o/ b7 ]4 lprint "Useronline Insert Failed > ";
4 ]+ V+ L$ ?) Y' C% E}然后实现当超过设置的时间就删除该用户记录。& n. l5 _) z: k
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
9 R3 S9 Q/ z8 r! Pif(!($delete)) {
4 H0 o3 F6 j0 a3 i2 Wprint "Useronline Delete Failed > ";
% W9 K. W m; _* Y" T) P}下面我们解决数据库中不同IP的问题
) ~2 w3 S( N" T/ r4 m$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
1 R% K! }4 T# L% v8 j" Qmysql_num_rows(query);来统计用户,代码如下。
# {/ F- R4 o; T4 x2 }% D$ F$user = mysql_num_rows($result);最后关闭数据库。; c) V. a: n5 y2 k/ f, [0 }
mysql_close();显示在线的人数。
: g1 e1 {) @2 j* T9 }) o' ?3 bif($user == 1) {
4 {" Q5 P) f2 d* y2 Rprint("1 user online\n");* N$ i* z% W [9 Q9 j
} else {
! ~( b. z, z8 `9 |6 R2 ?1 V& Tprint("$user users online\n");6 ^. ?, S' j& H1 _' Q
}最终把上面代码写成一个PHP文件如下。
9 n1 h/ B0 D6 D/ {% A% H- l<?php9 M: b8 F3 ^7 D0 |
//Put your basic server info here
) C; F. f, ? G& m) I8 |- t$server = "localhost"; //normally localhost6 Q3 P+ h* M! W" [
$db_user = "root"; //your MySQL database username! x( t! [( c. e% Z
$db_pass = "password"; //your MySQL database password; N: s! {5 N0 W' l6 {$ [( Y% k. s
$database = "users";
) p" c) s& S! `5 A$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
4 H1 ?) S, k# E4 j; d. J8 d// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 k! ^8 j1 x* l0 y: _// $timeoutseconds seconds)9 i5 R2 T9 l, p% R
//this is where PHP gets the time( v4 D6 L# @8 z; R! Q& I
$timestamp = time();$ H! a2 ~# ]0 B* }" w6 ^
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
& ?: L; O1 u8 F; g# F$timeout = $timestamp-$timeoutseconds;
8 C# `$ `4 \( \8 E$ L# m% N//connect to database$ _1 r4 v* `$ T; K, @6 W. o
mysql_connect($server, $db_user);# ~/ b( c# }6 N9 k( e/ t/ L" P" K
//add the timestamp from the user to the online list- Y9 n! B; @4 ]# [
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; J/ q) N% P; z6 o1 K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 O5 L. L+ k' T0 [
if(!($insert)) {/ G- Q$ q ?" R+ y2 |3 e5 J; I
print "Useronline Insert Failed > ";
4 k" Z# E7 s% o4 X3 G- ]( X# R) M}
+ e, u9 v9 t% O* [" b% Y" a//delete the peoples which haven't been online/active in the last $timeoutseconds seconds., S% z) ~4 }7 D, _
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
* Y4 \% [1 e7 T" hif(!($delete)) {
, ?. k/ j( x0 \6 y$ g0 Jprint "Useronline Delete Failed > ";
4 n- x: J, T$ C- S! N" H7 \% w}
) R1 ?9 p5 a/ p8 w/ `//select the amount of people online, all uniques, which are online on THIS page
3 ^# c* L, `: N$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 K J9 x o+ D$ s- r! ~
if(!($result)) {2 W. H7 m' j1 ]* E& d
print "Useronline Select Error > ";
9 p3 c I/ i3 j. f: h$ Z}$ Q, G4 F+ w! g% J# y! N4 q+ Y
//Count the number of rows = the number of people online
$ S4 f8 l4 m0 s8 Z( o. A$user = mysql_num_rows($result);
2 q) X# {8 ~! e1 T//spit out the results" K9 H7 w" G8 S: [
mysql_close();4 n. Y! I# F1 l/ ^" P
if($user == 1) {
# r) L. \4 ]4 i5 R4 R( L" Vprint("1 user online\n");& B' T. ?3 o4 j2 t4 Q+ R* l
} else {
( \$ P* h- n# ~5 q# {3 d) dprint("$user users online\n");. q4 W8 A4 d O( c* Y* c5 u
}! ?* o9 d" C3 k K6 e) N4 q
?>
1 t$ m" R# E9 W6 {0 w! _5 t8 Z
, b9 d3 ?: D/ X `以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。2 y8 I( L* K: ~ O9 q0 ], \
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 V+ S& _8 p( [我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。8 |# U. [* d7 C$ Y
当然啦,这两款主机也是相当不错的。+ U# p, p- K0 F( o
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& ? P9 i, t" y3 h4 h C
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ E9 b: r3 c" L
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
3 g5 Z& I8 J# W6 t4 j2 l) `空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55& N, E' v9 |. \: T1 T" h* _
自己加QQ去问吧。 |
|