|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
, N. B% V: _4 I4 y0 S4 X# ?8 k& n" k我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。% K: z9 {3 @& K4 H8 u' ]/ H5 ~
首先我创建MYSQL数据库表。
( i* c/ [2 \5 c0 u( jCREATE TABLE tablename (
! Q6 U+ n2 G- H5 n* u! D ^field type(max_length) DEFAULT 'default_value' (NOT) NULL
* j' V3 Y5 @! q- M( [}可以使用的SQL语句。- \ T0 M4 w( O. C
CREATE TABLE useronline (
$ e3 o3 k5 w4 f5 F4 h; O/ Ptimestamp int(15) DEFAULT '0' NOT NULL,
p* x9 {4 n0 K: }8 dip varchar(40) NOT NULL,* r- G; Y& a; S1 W6 a
file varchar(100) NOT NULL,+ {, ~$ w9 O7 Z$ J
PRIMARY KEY (timestamp),* j3 Z2 b; P, T9 V% ^
KEY ip (ip),& D9 f4 o5 D& J' M8 X- C- d1 M' l. ^/ w+ V
KEY file (file)
" ]7 R$ r. B% S* }% h7 [);下面我们是PHP脚本,首先我定义MYSQL的信息。
0 F; M: m+ G0 g$server = "localhost"; //你的服务器/ w$ l+ H3 F' d' o# a; m3 c9 _
$db_user = "root"; //你的mysql的用户名! O0 t' K& z) c# ?
$db_pass = "password"; //你的mysql的密码
, A6 ?$ O1 n- V8 G9 ^# L. N$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
0 \0 w4 p: M8 A" x' [7 A5 p. U$timeoutseconds = 300;取当前时间。
. k& {# Y4 d1 l$timestamp = time();上面的完整代码:) s9 a( o2 w8 N8 k2 r' U
<?php' u0 F1 Q) H$ Y3 Z
$server = "localhost"; //your server
. H" G8 |/ B, S: R1 ]# S) i$db_user = "root"; //your mysql database username5 ~: d+ w2 ^1 T8 D; H" {
$db_pass = "password"; //your mysql database password if any: U" p u: `% {5 v/ M7 v4 S
$database = "users"; //the db name3 O6 v1 p( _5 |- J
$timeoutseconds = 300;//timeoutseconds limit8 Q: {1 c" W2 b% y
//get the current time
" p' H3 q- C% v6 K! D+ |# \4 t7 P8 y X5 w$timestamp = time();# t/ o) z9 u6 ?- `5 ^# Q
//calculate the lowest timestamp allowed
8 @9 E. `& o8 y( f) e$timeout = $timestamp-$timeoutseconds;) w/ Q% |+ B1 L. r0 l8 R% k9 k
?>连接mysql0 g2 m/ T! }/ p# G# v$ d
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
( `- X( e/ r, v: [% Z( L) a5 wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
) `5 R9 Q" m& F/ F5 _7 q( B( rmysql_connect($server, $db_user);查询数据库的代码:
( W" U2 b6 P; u& L4 Lmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 `/ `2 N; [! D, y8 y
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( W3 G0 a2 T0 N* _1 A('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 ?4 R; }- y' `5 y$ U% u! e如果用户用错误信息的话,这样处理。! I$ v+ V$ U) t# I! n
if(!($insert)) {5 j: v1 D: E: Y! Y) K% M: {
print "Useronline Insert Failed > ";. r1 i3 [% ~" r; {
}然后实现当超过设置的时间就删除该用户记录。& A0 f# w& G, z7 ^' S* [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
* f. S* j& Q- O* k3 h/ t" a% d0 g7 Vif(!($delete)) {0 ~ n O4 S% S" c. F/ _
print "Useronline Delete Failed > ";
8 s1 [! L& n- a: z6 f+ C; I$ O. L}下面我们解决数据库中不同IP的问题
7 X! r' y$ R% U9 C8 m# z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' m% k1 U* G3 f. v' o2 Xmysql_num_rows(query);来统计用户,代码如下。6 x: l; x6 D8 m! l# l
$user = mysql_num_rows($result);最后关闭数据库。' s7 o1 T/ C$ W$ {, y6 ?7 g s
mysql_close();显示在线的人数。% N% l3 U3 q5 |5 m; R
if($user == 1) { X! o8 t0 D$ P _/ L0 v9 B
print("1 user online\n");
8 \8 q4 w$ m. Y) l+ k7 n0 b4 M( r1 m} else {6 u; o4 m$ w9 L# u+ ^; ~7 {
print("$user users online\n");" s. ^( q! p: Q( Z B
}最终把上面代码写成一个PHP文件如下。/ H) I0 l* S% ]2 N5 Z
<?php8 k1 l& z* s) p+ k3 q! Q0 a- u
//Put your basic server info here4 }1 x: p: o4 @6 ^
$server = "localhost"; //normally localhost
' \* K- b- o. F7 B- w$db_user = "root"; //your MySQL database username
' T, Z9 V9 k% S$ O$db_pass = "password"; //your MySQL database password% W: O- m2 z- u8 P, Q7 ]( G
$database = "users";
5 o1 r! g" p7 F, {' Q1 H. z$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are, p/ H! Q& E* a9 g8 V* p
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
7 d! a- U2 k" | x// $timeoutseconds seconds)
0 m# H# M& f8 f7 m//this is where PHP gets the time! o% m3 G L8 C6 _7 T4 D# J. u; `
$timestamp = time();4 y A- a w" Z# ?" \2 F/ E/ t+ q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed' a4 r! z; _5 v9 d. A6 [
$timeout = $timestamp-$timeoutseconds;
! i" Q* K$ w+ N, X. u//connect to database
1 X4 _ m/ H+ u8 A! Emysql_connect($server, $db_user);3 n+ _8 E' A$ ^% I, Y
//add the timestamp from the user to the online list; [4 m" Y, t5 s' q, \
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
/ o7 M8 {3 _ p% K('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
+ Z+ h F q+ T3 n7 n/ G# oif(!($insert)) {
S" I; U& B+ Z% v( C h0 Fprint "Useronline Insert Failed > ";. b7 ]9 m2 M! g" b7 C/ |4 G
}6 c+ _) | v2 D6 m" O
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds." z; Z. R9 v2 I9 T. [1 f8 `
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* ?/ j0 V( n0 r
if(!($delete)) {. c* Z* W9 C+ U7 @2 q8 s6 W1 Z6 W
print "Useronline Delete Failed > ";3 V9 {) f( V" q# v! v3 T2 k
}* w K9 [* Q: b) y7 Y
//select the amount of people online, all uniques, which are online on THIS page7 O9 p7 U$ Y/ e' s* P8 U
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
/ H. R$ e1 B, r$ G# _2 Cif(!($result)) {. t4 A2 P- O0 W; |. a. M% @
print "Useronline Select Error > ";% E; q4 {8 X, C+ R
}: Z* \3 j7 A* u1 u+ q& m5 K# K4 x
//Count the number of rows = the number of people online
0 E0 t6 ?, q( q: V z6 [0 B$user = mysql_num_rows($result);2 y' Z' s6 S/ ^0 @) ]6 L6 U
//spit out the results+ U: R* ?( }* N2 @( x4 d; M: G
mysql_close();7 _9 {- O6 l" l
if($user == 1) {
) S) o3 X7 n9 C8 Mprint("1 user online\n");7 A, U. h$ p! `3 a/ X: X2 d* W. J
} else {
- @; O! ?0 S2 O) @# Uprint("$user users online\n");
2 m; I3 v1 ~1 x} O! A/ O4 X8 }( ?+ a4 F- j
?>3 `+ g4 d0 z. g' Y! \

& W0 ]0 i5 v \1 p/ K( _) u以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
( s( @$ r$ d6 G: p4 \8 q/ O; f6 E( K$ h时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 B* [$ L$ M1 a( g7 v! _1 W我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。5 f8 c: ]0 F3 g
当然啦,这两款主机也是相当不错的。
8 P1 A2 D. I6 }+ F- a' k智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# ^; ~2 T* m$ }* h% Z7 v
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
- {# b4 I% w/ L+ |% |* E提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ' ?6 b1 m- I1 x7 T
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
7 p) e; L$ V3 r% n自己加QQ去问吧。 |
|