|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& s+ y' o5 j9 n
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。8 S; j' x6 }7 ~ N2 v6 A
首先我创建MYSQL数据库表。
* D( F3 O9 J$ D* B0 DCREATE TABLE tablename (
8 k9 v) Z9 c, S7 ffield type(max_length) DEFAULT 'default_value' (NOT) NULL* L( T3 [2 T' S
}可以使用的SQL语句。
& _( u7 z$ ~8 X0 a) U HCREATE TABLE useronline (9 K* D0 d( \4 g& J% ~, d/ K
timestamp int(15) DEFAULT '0' NOT NULL,- h! g# m' h) w% x
ip varchar(40) NOT NULL,
1 z3 a/ ]% n; v* C3 d+ w4 [$ P6 e$ kfile varchar(100) NOT NULL,
9 d$ Z6 z6 a4 z4 v2 aPRIMARY KEY (timestamp),
6 |- k- z0 T* s* Y2 P/ JKEY ip (ip),
4 e3 M2 A# a, F/ S3 w1 j% o9 O7 e+ F4 lKEY file (file)
+ [5 C4 ?, J/ X3 i4 h/ p);下面我们是PHP脚本,首先我定义MYSQL的信息。
9 v, B: v' L1 S, [+ G$server = "localhost"; //你的服务器, W* P. ^5 K/ u" f5 k" m+ S* e' V
$db_user = "root"; //你的mysql的用户名
8 n& _3 s6 E0 ~0 \. ]" Z8 V$ N. w) y$db_pass = "password"; //你的mysql的密码
2 K. E+ c: M& s$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
; j# L+ |% B# O7 U3 P$timeoutseconds = 300;取当前时间。9 w* l* F- i5 Y: ~( T
$timestamp = time();上面的完整代码:
4 ?* k. f9 M7 G<?php
' e3 N V5 Y; K- D% X2 F$server = "localhost"; //your server: I/ q Z# M3 u6 x B
$db_user = "root"; //your mysql database username( Y+ f; {0 R' |9 X# k% P0 J4 v
$db_pass = "password"; //your mysql database password if any+ _8 Z* R7 K- R3 C/ Q: x
$database = "users"; //the db name8 J/ q; ~: D% M8 e& X4 n
$timeoutseconds = 300;//timeoutseconds limit
8 {, n4 T; H9 R; S8 c8 Z//get the current time* `% _# Z; q0 W' G, F/ _
$timestamp = time();
( y% H+ Y; K; g2 @# ]3 s; G- u//calculate the lowest timestamp allowed
( l9 T1 C/ S( y% R _, C$timeout = $timestamp-$timeoutseconds;
?1 ^. E, E" O: M: L?>连接mysql; L8 x. v' s9 I* L. k( r
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
* Q" S* [5 ], @( e! E/ ymysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) K- g& O+ t6 lmysql_connect($server, $db_user);查询数据库的代码:, }* z! y* L) B7 F- Z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
5 C) u- |3 i9 i( X8 U# i/ c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
; |" a9 K% [$ U0 z7 }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 m3 O* A' ]) d' P
如果用户用错误信息的话,这样处理。
1 ]1 o# o2 z7 ?" W0 A8 \5 Dif(!($insert)) {
: i" I$ J: d' G- I$ @3 Dprint "Useronline Insert Failed > ";
/ y& b2 A" I6 W; l8 y: O: a}然后实现当超过设置的时间就删除该用户记录。
% B1 c/ ]2 ^7 P" d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 m3 I% \7 q/ w6 k
if(!($delete)) {, g8 S% j3 h2 o5 `3 w5 N6 {
print "Useronline Delete Failed > ";/ r; [& B; Y2 u
}下面我们解决数据库中不同IP的问题) W/ z" `& K9 ^$ M# k) q; E+ r. [
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
2 A/ H, Q; O/ G' vmysql_num_rows(query);来统计用户,代码如下。# j: S7 ~/ C) z# I
$user = mysql_num_rows($result);最后关闭数据库。1 w% p6 G' B- y& U0 }4 j4 g
mysql_close();显示在线的人数。
/ a9 q6 ~2 f" R) v& Lif($user == 1) {/ q& O( v0 f& M9 j4 T. D0 w, ]
print("1 user online\n");8 @6 R5 o5 T* Q" }8 J: @: v) E! Q
} else {6 V% D% l( J" b, x
print("$user users online\n");8 g+ B& t6 s& I, `! n
}最终把上面代码写成一个PHP文件如下。+ H# S0 k: r% l6 w. y
<?php
! K4 L$ y1 W! H$ A+ S- X+ D//Put your basic server info here6 @3 j+ G! w7 z
$server = "localhost"; //normally localhost8 d" Y- i9 T9 N0 z$ ~1 H t
$db_user = "root"; //your MySQL database username- A( g, m' r! [8 n4 b7 h" P
$db_pass = "password"; //your MySQL database password
A2 ^+ y4 O( ]% ?: `- D$database = "users";
- _5 O' v S$ S- v' ~$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, L) W1 y9 m, Q0 B6 F' C: U
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last) i8 K4 C: A2 p' F. s2 o9 f
// $timeoutseconds seconds)7 N0 Y5 g8 h' b
//this is where PHP gets the time3 X4 x) m' [. x& v3 ?$ [
$timestamp = time();
+ |6 A W6 \3 f% u3 \//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
: b+ i5 z- @. U; O6 @$timeout = $timestamp-$timeoutseconds;9 M* D1 ^1 o4 q- F% h4 u7 J
//connect to database8 i) ~8 \5 r, V% v& x3 T
mysql_connect($server, $db_user);' D' \& f# [9 {( a( _
//add the timestamp from the user to the online list
6 j0 P: E1 z# `7 ?3 T, f9 o1 x3 c$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
- h# g0 R2 q; O" s. c+ e# m0 R5 }('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 L- b5 i! z/ s
if(!($insert)) {7 D" l$ j, H9 O8 }
print "Useronline Insert Failed > ";) B$ V3 Z5 U$ z# X { n- r
}
$ h5 E D0 h1 n- E( T3 [$ f//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.7 t0 ~7 [* M3 h$ a2 K
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
$ b; p% i( X" q* \; m3 q$ u6 gif(!($delete)) {
; b ~9 i- x: }2 f8 rprint "Useronline Delete Failed > ";
+ M, P, m: U k! P$ A7 O& h}
; s* `: ~4 p9 ^1 b* b# K//select the amount of people online, all uniques, which are online on THIS page& V7 F5 k: T( \7 V! o+ F5 t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
( [. u" m; O' n/ G4 V7 n; I7 iif(!($result)) {: t$ l. B$ Y3 i; [9 s9 q
print "Useronline Select Error > ";+ m, O- }5 [+ A# x+ q/ P; O8 X+ N
}% D9 c) U3 B+ Z0 u
//Count the number of rows = the number of people online
; }# @+ c+ d) Y6 ?1 T) N$user = mysql_num_rows($result);5 N1 R! Q7 N# W$ V+ G
//spit out the results
" d$ C' x t7 Gmysql_close();; s$ O8 w# O1 v! B# K4 U
if($user == 1) {
/ w# n: E2 e! U3 bprint("1 user online\n");) o, N' [) a# V# k6 @& E }( z
} else {
3 N0 r [6 |. x( V' _& X) q. `- D$ [print("$user users online\n");2 D+ e- e- x" n% G5 S. H
}* f( f5 j0 ]! W& v: |( S9 k$ c
?>, D/ ^8 b# l* Z8 k' U1 Z- B; Q
/ ?6 D+ k. I3 ^7 O- q( ]
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
6 ~1 ^, U2 C( m( ^2 R时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。- |! n1 C1 M% W- Q( [3 v
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
. \* d9 v# z, v4 b) r; g当然啦,这两款主机也是相当不错的。
6 ^, ?) Y) @7 N9 i智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: R4 I R& z$ Q; P1 g! B8 ]标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ n2 @9 d2 s0 \) z" ~
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
3 o- v6 E5 i- C; ]/ \9 x5 u: i空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
: F: T1 C6 {# Y3 S4 \& l自己加QQ去问吧。 |
|