|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
6 m/ B! g7 c0 s4 K8 R( Z$ I我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
' q7 }) g- ]8 K4 s首先我创建MYSQL数据库表。- d+ E- X2 c. |
CREATE TABLE tablename (
6 }$ \2 n" ~) g+ G7 ?& L8 ofield type(max_length) DEFAULT 'default_value' (NOT) NULL
# U, ?; [6 e9 Y( S& W* D6 ^( R}可以使用的SQL语句。
* e( B+ e7 b8 tCREATE TABLE useronline (7 M. ?4 o. Y) l# U
timestamp int(15) DEFAULT '0' NOT NULL,' R0 y3 \7 q" l8 E
ip varchar(40) NOT NULL,' H7 y- b/ W* V) E" y! z+ D% K
file varchar(100) NOT NULL,8 @, y b2 M" p/ k$ `
PRIMARY KEY (timestamp),! ~, U4 \; o. ?
KEY ip (ip),
# Q1 Y* L$ X) q+ R6 ]KEY file (file)
; T: J+ V( ~5 ~);下面我们是PHP脚本,首先我定义MYSQL的信息。
; O. z$ \0 N- r* x$server = "localhost"; //你的服务器/ G# x; {" t: f4 {* Z) V
$db_user = "root"; //你的mysql的用户名 i/ D) m' m) [; B" t( Q/ p
$db_pass = "password"; //你的mysql的密码
( b( e4 G+ y; A6 ?* t, z( M$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)" {) {6 G5 [* {
$timeoutseconds = 300;取当前时间。
# z Z" i& Z9 m: b1 d3 A1 f$timestamp = time();上面的完整代码:
0 s1 e" U( J. k, a9 }0 G. h<?php
; q1 x1 d) {7 a$ a( J2 c& G$server = "localhost"; //your server# Z2 k! C# W9 I/ m8 U
$db_user = "root"; //your mysql database username9 K: |, `& P: f
$db_pass = "password"; //your mysql database password if any7 ?! D8 O8 s ]- n5 Z& D) X: W
$database = "users"; //the db name# h8 w E# d+ E" S4 }9 X7 q
$timeoutseconds = 300;//timeoutseconds limit! F6 [, ~3 e/ S
//get the current time
9 z; I- v- v2 J# I6 s$ u! f- V: |$timestamp = time();; L$ t0 @9 f4 T: _
//calculate the lowest timestamp allowed' W% ]! c- J& R
$timeout = $timestamp-$timeoutseconds;
; M8 r u2 q+ L; l( d0 K$ W?>连接mysql
: h2 E& K" Q6 l# i! Gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。/ v0 B: h% R3 D0 [6 X: D
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接7 H) j; P* i$ S' W
mysql_connect($server, $db_user);查询数据库的代码:. U! y/ C( A! _7 X
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。: Y$ a0 E3 I0 }* S0 r% q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
& m. U3 I& [6 j5 s# {. ?- K2 D('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");$ q4 F) ~- T5 F8 \
如果用户用错误信息的话,这样处理。" |9 {% I9 V1 G: C) y, Z2 w
if(!($insert)) {2 [2 Y G( I2 q. H7 V ~- q
print "Useronline Insert Failed > ";4 I0 z& b6 K$ Y7 n( A; ]$ x6 r! W
}然后实现当超过设置的时间就删除该用户记录。- L! I$ z9 P# q. b5 X9 m
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% h1 D" i5 W: U4 ]! B
if(!($delete)) {
9 Y; O" b) U7 q4 J/ `/ {0 U. T0 |print "Useronline Delete Failed > ";
# b& Y- m1 ]. q- p4 {! d}下面我们解决数据库中不同IP的问题
]5 |, d& G" \1 s. F2 b' h1 ]$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
- g1 m7 f6 X2 e/ Z3 C omysql_num_rows(query);来统计用户,代码如下。( v1 s1 N# J# Y
$user = mysql_num_rows($result);最后关闭数据库。
" E+ N c: Y8 x$ p' {mysql_close();显示在线的人数。+ i& A0 L! i& i0 k# V' C
if($user == 1) {
5 E7 `. y0 |6 \/ L+ j; V- D- _print("1 user online\n");- \+ Q1 z7 K( D7 ?" N! {2 I
} else {1 C( I# [. v$ c9 q
print("$user users online\n");
, v9 j+ {8 M" N+ h% W" {6 u}最终把上面代码写成一个PHP文件如下。
, e0 H4 U; x: |* i4 Y; P<?php
0 B9 }/ f! W8 V0 n% G u8 X. Z//Put your basic server info here
. T5 [% ~$ l7 {$ |' P1 D$server = "localhost"; //normally localhost0 y& b, t) a H+ D2 Q1 |# D& Z* O
$db_user = "root"; //your MySQL database username
1 Y7 c v: D5 r; v# Y$db_pass = "password"; //your MySQL database password/ n: L5 _* U+ t" t q0 t& ]7 c. M- y
$database = "users";, ?8 Z1 d5 [5 J( L7 k6 ]
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" _/ B: a R9 E& k// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last$ v, h+ \! `6 {
// $timeoutseconds seconds)1 e$ T6 K) C! a( g* X# N: A. l% B" Q
//this is where PHP gets the time$ s+ B5 g$ P3 S+ N- y' I% C
$timestamp = time();
4 w5 a8 A, ] E9 F) N) n. B" w! i1 J9 L//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed) f3 X2 e$ m% q; _6 f& R% J/ o
$timeout = $timestamp-$timeoutseconds;
' Y) J( G8 T1 i5 M5 n//connect to database& J% L8 z7 B m/ A( O+ {" l
mysql_connect($server, $db_user);
( ~' }7 W6 Z! C+ W6 H//add the timestamp from the user to the online list, k" `7 C4 M# s; `/ p0 W( I c7 P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES. c% N3 ~$ F7 L' ?
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* V2 ^% d5 D2 j( u6 R* |if(!($insert)) {, L0 k L S4 n' O! ?3 |9 U
print "Useronline Insert Failed > ";8 E- c% L* p8 V) S( Q2 n
}& I7 s* b/ a6 R
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.) U0 t6 V0 a& H% z5 ^8 P2 Z ^7 |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
. W. ~8 Q+ w* a l7 y* i, a |if(!($delete)) {
6 m: ]: _: J3 k* t! ^- [8 F' k7 Gprint "Useronline Delete Failed > ";
7 O) ^' [- H a2 G3 q! C$ E}
. i" O6 z) f( g2 Q! b; J//select the amount of people online, all uniques, which are online on THIS page
* s* ^/ h( O6 R3 C# R/ c$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# Z+ B7 p$ l/ Q4 {( j9 z; }if(!($result)) {4 Z& e: ]; @( X/ P- U: b9 @
print "Useronline Select Error > ";+ Q* g1 ^- E3 d# @9 F9 x- N& e8 n/ i
}4 Y! ]" T: t. [3 e& a# _# Z+ n
//Count the number of rows = the number of people online, |- b7 g; B( w9 `9 {2 v+ K2 @7 | |
$user = mysql_num_rows($result);" Z; g, T! q; l1 l
//spit out the results
8 @7 }; H" } A4 e+ E* d3 U( o1 Ymysql_close();4 n/ o# d3 a. N# w' l) O8 z, {
if($user == 1) {
- f: y! W' w. Tprint("1 user online\n");; P/ E) e5 E0 c8 O9 @8 Q
} else {2 [! A. e3 P2 p4 F
print("$user users online\n");+ c) t" E" q+ h4 }1 z' }
}
5 a( V) |( q7 p9 P7 m8 l; m0 L$ _) G?>
( S9 O" m8 p! @4 \' _
" L9 |0 _3 L" t: W o( Q以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ H8 l* k9 w; v4 O5 q. e
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
, J8 i; ~) G/ I, z我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
5 }, r4 D8 k" z7 f. r当然啦,这两款主机也是相当不错的。
6 Y6 \2 X$ E) V5 j; l! u* m智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年& ]4 _7 N. a# Z% ~9 l7 K0 [
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
; X+ V! B2 P. D; k4 S: H- O# u7 Z! P提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ " ?* A; d, j8 m/ o9 G9 V3 b" q
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55: ~0 p$ j% K3 S; U' m- X* n K
自己加QQ去问吧。 |
|