
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!3 j" O4 C _( `6 j
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 ~$ V- t# y+ J
首先我创建MYSQL数据库表。* S0 v& c) v# P& G
CREATE TABLE tablename ( [9 C# K$ }$ H
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 k, Q7 F. d' g4 O3 ?: P- Q
}可以使用的SQL语句。, C7 o& E1 F2 r5 A2 P! S
CREATE TABLE useronline (
( ?! ~- J2 q" Y- Ftimestamp int(15) DEFAULT '0' NOT NULL,
$ e; E3 p3 ]3 g9 A. p% Xip varchar(40) NOT NULL,% G; W6 C2 F! ~" q/ x* z0 C; p9 A
file varchar(100) NOT NULL,
8 f0 e: g% S5 P- ^PRIMARY KEY (timestamp),
0 T* P1 l0 h4 y) p) \* g) IKEY ip (ip),# Q1 r; e. a7 D* H" _% t3 J
KEY file (file)
; v( S: e9 o. M" J# S6 y);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ a* T5 G4 e" j8 r4 A x/ l! Z$server = "localhost"; //你的服务器. V2 J, ^8 q1 q+ g5 |1 B
$db_user = "root"; //你的mysql的用户名
1 d- p, L+ g8 i+ p) ]$db_pass = "password"; //你的mysql的密码
0 L$ E2 U: E1 t4 u$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)3 I$ N. i! A+ u6 {* ]
$timeoutseconds = 300;取当前时间。
( L1 y7 ]8 V3 o* K- e$timestamp = time();上面的完整代码:4 M3 F9 D! M2 v
<?php& r% g+ X8 e) t# N2 M* k
$server = "localhost"; //your server
4 l( a4 j5 f, Z$db_user = "root"; //your mysql database username0 r$ F3 {; N# y7 P3 Y9 _) d# s
$db_pass = "password"; //your mysql database password if any
, s0 \+ C) u% Q, Y H, O0 v$database = "users"; //the db name
, r0 G% t w7 \: ^$timeoutseconds = 300;//timeoutseconds limit8 k& a' x2 C( D; C% N8 O; j6 J
//get the current time
/ S! }& S1 Y# [- J$timestamp = time();
% x. d/ t5 b; x2 u# i. m& Q//calculate the lowest timestamp allowed
8 O f$ h0 Q5 s& g1 M$timeout = $timestamp-$timeoutseconds;
# P/ j& V# c3 z( X" N?>连接mysql
2 q. X. A( A8 z) Amysql_connect('localhost', 'username', 'password');也允许使用变量形式。
% u. {: _* d7 e6 h) f* ?5 @mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
1 I" q" B, _0 J; f0 F% K( ^2 v; G+ f# [mysql_connect($server, $db_user);查询数据库的代码:
5 a2 p$ g {! z* x, cmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。! L! d1 P3 y' \5 T; R# C
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES4 P/ t( ]4 Q6 U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 }6 L. s' K# u/ k# t E, l如果用户用错误信息的话,这样处理。
$ w' P# a7 u0 {. ?0 c, n( ]if(!($insert)) {5 a: d* ]! p. q8 y9 w, I
print "Useronline Insert Failed > ";
) H$ k0 q# @; |# U8 ^9 b}然后实现当超过设置的时间就删除该用户记录。3 ]4 f8 Q% [. D! \
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 [' L) e g* Z2 V. hif(!($delete)) {
: G0 Q3 A2 i0 e- ]2 ?* Pprint "Useronline Delete Failed > ";
3 }8 a) d( K; h4 g" i" I}下面我们解决数据库中不同IP的问题
5 O. `9 C* ]8 f) z9 f* D$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. w' _/ X' g; M; o& `" v6 umysql_num_rows(query);来统计用户,代码如下。: a4 D, x! X' T+ |
$user = mysql_num_rows($result);最后关闭数据库。; J. H7 D* U+ S
mysql_close();显示在线的人数。! U, k. _+ a m3 {' C# u; w
if($user == 1) {
* U& O. w1 w: y; n# H- P+ V9 ?9 rprint("1 user online\n");
/ ?) s" Y: V" _0 R} else {" J+ P$ R2 P1 [* ^
print("$user users online\n");( s" R6 c6 `7 K5 l7 c( E5 m
}最终把上面代码写成一个PHP文件如下。
- x7 Y3 z" ?& I# R7 G3 z<?php
/ Z, H S' o5 }9 |7 ^8 T9 l//Put your basic server info here* j1 u3 t Y& ]* R. k- [
$server = "localhost"; //normally localhost2 l" q- j+ K8 k6 x5 G5 m
$db_user = "root"; //your MySQL database username
$ ^; q+ Y2 g# M) V, y# B5 z1 e$db_pass = "password"; //your MySQL database password+ k% g! }) F4 L3 w: Y; Y9 n& V2 m
$database = "users";
: x8 v b1 |: n+ {$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
* U. M% l: r1 p8 {4 h4 x: i// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. m& ^5 p6 s& X# f$ O; B2 I// $timeoutseconds seconds)
" |& i' r# ~) S, \# n7 K: R4 H//this is where PHP gets the time: ` `, `8 i8 z
$timestamp = time();
* V$ l: V7 K8 U; c3 K$ S//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed5 V, x N0 }& K6 ?6 l0 W* J
$timeout = $timestamp-$timeoutseconds;8 O. K- A. D& M2 U
//connect to database
# F/ Y8 ?& B! ?mysql_connect($server, $db_user);( W0 R" { o$ P1 Q d p( X% m8 }
//add the timestamp from the user to the online list: C. u4 l" R0 x
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 ?, y: _2 R! o1 H/ l
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 p# b* }6 M0 {+ k2 Hif(!($insert)) {
2 a; U, u: S% Q1 E& i$ eprint "Useronline Insert Failed > ";
+ N7 c! I& v/ Z}
3 H3 \' c- y' a+ B6 W2 d) d. O//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
( b5 r( G0 I4 @6 E$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");0 {4 v' Y& ]$ K$ T
if(!($delete)) {
" g; f. A6 s/ A' {$ \- rprint "Useronline Delete Failed > ";
+ t! C2 M+ f9 J! L0 n- k# o}* N( ]! o( J' v3 p; P1 j
//select the amount of people online, all uniques, which are online on THIS page
1 j$ e0 Y# t. b) S. q9 H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");( O- Y, v# R: P/ m5 C- ~
if(!($result)) {
4 t2 l0 z- n/ Tprint "Useronline Select Error > ";7 n6 n: s: x- i9 b) q
}. D* u: M, T& _
//Count the number of rows = the number of people online. Q9 | f0 _2 E0 [# o9 E
$user = mysql_num_rows($result);0 I" J4 q% f% h9 s' ?8 I: T
//spit out the results& ^3 S$ U' l2 R4 N9 I
mysql_close();4 }1 e) \$ Z6 l6 n1 s
if($user == 1) {
H& h, W8 i0 Tprint("1 user online\n");& w/ k f, x3 y$ k3 x; E
} else {
* u/ S8 ], E1 j, f5 c c; pprint("$user users online\n");
+ h" J9 o/ A( O$ ]: Y}" @5 E6 s2 j/ \ V# f5 V) x) @: _
?>
' E+ x2 _. }, L! ]& Q- U- y. G: b" h 8 O1 e( r! q1 i# w2 G0 \! d, q6 o
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
8 c5 W" @( T4 h" y+ r0 A( Z; L时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。 a C' _# ` [* x' B- [
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
* I0 L1 q) M- j4 K当然啦,这两款主机也是相当不错的。
# w+ F) N( S/ _9 e智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年, X- r2 y! }6 x. Z$ R7 ?
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年& y: {1 V9 Y8 ^$ r4 V p9 I4 t
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 t" e3 [# E; T. E; J# c6 K空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55* f9 m% A2 R: f! F1 e. t) P
自己加QQ去问吧。 |
|