|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!/ ]( k3 v0 N: b( ^- P
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
! a& C! [3 a9 Z首先我创建MYSQL数据库表。+ g o7 m! X) \! H' w6 w# N: f( A; ^
CREATE TABLE tablename (
7 J U( z. Z! c! o. I" Kfield type(max_length) DEFAULT 'default_value' (NOT) NULL, |5 q! i* r) U+ L- z
}可以使用的SQL语句。; I6 d9 q/ N9 T3 v* @6 P6 X0 C: q
CREATE TABLE useronline (
2 j4 C) w. [8 E/ T6 xtimestamp int(15) DEFAULT '0' NOT NULL,
8 m! ~* o1 ^4 O' a' Jip varchar(40) NOT NULL,
O9 W' D( W4 E- w1 mfile varchar(100) NOT NULL,
1 D P% W- @7 E8 |PRIMARY KEY (timestamp),
% w W/ L) B0 q0 u: [KEY ip (ip),+ A# @' t G5 V# v ?8 K
KEY file (file)( M' X; ?% I' T( Q1 z; N8 S. g
);下面我们是PHP脚本,首先我定义MYSQL的信息。! x, J( Z4 d0 h; h" @: `- R
$server = "localhost"; //你的服务器: R( P7 _& A% O: G
$db_user = "root"; //你的mysql的用户名' k: S% `, ]# q" z( T2 [: r2 I
$db_pass = "password"; //你的mysql的密码- ^% \5 t$ W9 @5 J+ M1 m& t
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 N6 a1 e4 u+ ?; k9 N1 K9 v$ o: A$timeoutseconds = 300;取当前时间。0 z9 W# f. o- S" @2 F) `
$timestamp = time();上面的完整代码:
) p- y' _2 c# X<?php
" F0 w$ B# F V- j8 P$server = "localhost"; //your server
5 X( l: W5 S) A4 j9 F5 Z+ ?$db_user = "root"; //your mysql database username @0 [: z/ a, {
$db_pass = "password"; //your mysql database password if any
* K7 W, N) v- _& [/ U. `$database = "users"; //the db name
' y8 C; y6 {! y3 N/ J, M1 A$timeoutseconds = 300;//timeoutseconds limit4 D% R2 \/ R3 u [7 j; G
//get the current time
?; Z1 [/ A0 ^9 H1 P, y0 Z8 }$timestamp = time();8 ^* o8 A$ [' T' F
//calculate the lowest timestamp allowed
! h& l+ a; O% O# y) z# q1 ^7 n$timeout = $timestamp-$timeoutseconds;+ P x C% H+ P% p- b
?>连接mysql
! M8 B. [5 w7 V5 Mmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
" i; I2 o% U$ {mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接" k0 o; v% `7 T) {) b
mysql_connect($server, $db_user);查询数据库的代码:& H; N. f' Q/ m1 F' z! _
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) n" }4 ?" M( f- Z& n$ z$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 P% _* J3 l4 h1 D7 f2 Y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
/ `' ^! Q" P. M( z A9 o如果用户用错误信息的话,这样处理。# \& q/ j( B3 A& E+ f! I
if(!($insert)) {
* N; v( y7 B' \" }) O# iprint "Useronline Insert Failed > ";
$ |; l( N7 f8 k! j, U( H! U}然后实现当超过设置的时间就删除该用户记录。, y0 z+ Y0 u! n% h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 ?: g3 e. n8 q9 v* L+ jif(!($delete)) {2 x3 K" f; Z+ v6 H+ s: J2 N
print "Useronline Delete Failed > ";/ w- `) Q' [! n9 g5 n% g( @; G
}下面我们解决数据库中不同IP的问题5 C& w8 Y! p4 P
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用 J4 z, s M6 a( a
mysql_num_rows(query);来统计用户,代码如下。: r+ p4 Q8 K6 h* u3 e/ F) u
$user = mysql_num_rows($result);最后关闭数据库。
9 J) w' P3 V' c0 m# j& C8 p5 wmysql_close();显示在线的人数。
. h( Q) G" k* Z1 _) N9 z! dif($user == 1) {
/ b6 e9 R% c# r; ?% xprint("1 user online\n");
8 |# F3 V+ ^# N+ c8 X} else {
d9 \- C, }5 R3 E6 s: u( ^" Fprint("$user users online\n");
' B# `* K- h1 Q/ s0 K1 }}最终把上面代码写成一个PHP文件如下。" T7 ^. H+ W }/ ` O/ {' q" J
<?php4 K" R1 k' {2 Z7 w% U, G! k( E
//Put your basic server info here+ |( t }- l2 Z5 M
$server = "localhost"; //normally localhost7 t* H k" t: d8 g: v. @! |9 z
$db_user = "root"; //your MySQL database username
9 X; m' q7 I% F" X$ T9 G$db_pass = "password"; //your MySQL database password: S% ]' F. b4 m2 Q7 ^1 n& q4 v
$database = "users";
5 _4 b9 d+ o3 |% C4 ?$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are: Z( I$ y# t; c3 C4 [
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
( S' v; D" E4 k& S- J8 o1 H// $timeoutseconds seconds)
' g/ J/ m5 j2 X5 f- H//this is where PHP gets the time# Y' m. N; Z) F2 Y9 x f
$timestamp = time();2 e2 s' @* ^' @7 E
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
[9 @, B- y- G5 H* a$timeout = $timestamp-$timeoutseconds;
7 P2 l% B9 D W' a//connect to database
7 j9 u5 R8 x$ r# s+ H" m4 xmysql_connect($server, $db_user);
5 K4 _# r2 k# [- Q//add the timestamp from the user to the online list
* ]6 A4 B, K S$ P' \! H$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" y* P7 K; {+ m3 R' C q) y
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 u: S$ s5 u" W( S) O* @if(!($insert)) {
% z% K {! X2 K1 x$ S8 X: Eprint "Useronline Insert Failed > ";
4 x f0 \9 `: e3 A) k6 ?2 U5 Q L}
# I' p2 d. h1 N2 h//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
. w9 c7 z% H" `) `( T: {; p5 M$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. O2 x( \1 ^4 B% I! ~if(!($delete)) {
- h" l+ B2 V7 eprint "Useronline Delete Failed > ";# q/ t/ h/ z5 j
}
7 {; ~! [: Y# T; b! G//select the amount of people online, all uniques, which are online on THIS page
6 a0 Z' n, R5 r: q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& K) ]3 t6 H* x$ |" W) A4 S3 {if(!($result)) {: L) K# ^. w7 h# v1 b ~; Z4 v
print "Useronline Select Error > ";8 C( j+ y, M% y8 V8 K$ c0 z/ z
}# {' A% n6 g6 {# C2 S7 m
//Count the number of rows = the number of people online
- \" X# h/ M9 B. D K/ j; g% L# Z$user = mysql_num_rows($result);
6 u% A d2 V& ^2 r# ]//spit out the results
- a! W' M M! u0 Mmysql_close();3 z+ Q; @) v& ~' b6 h
if($user == 1) {! T8 L7 O4 f. | s3 D1 h
print("1 user online\n");% }2 i3 a8 R+ S! z
} else {1 |/ p' d6 P9 w3 T5 p H y$ y
print("$user users online\n");
, G' X/ f8 u' [! P" Z. A- L3 u5 a}
9 G% I) {1 r6 }& r6 b) A2 a?>
8 e# n. a! Z; j
. `: _3 t# q4 i. a) }9 G以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ ^% U4 N5 E+ c: d* X时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
9 O* D+ r2 b* v* o$ C- f# _. u我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 T" j) ]) s- Q当然啦,这两款主机也是相当不错的。2 q! |0 B: R) {
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( i( l0 g( c; \" d) ~& b
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年3 @1 s( ^5 i: C& F, n6 A I& C+ P
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " |/ F% k# A8 g$ F! }
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 T; {3 v( i2 R- I# O+ e
自己加QQ去问吧。 |
|