
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!" h0 R, Z% i: M( c) ]! i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
, W9 I- y- P% F( e' u4 W- P首先我创建MYSQL数据库表。
# l. [/ D, o- f6 ~4 OCREATE TABLE tablename (
: n4 r3 D( b6 K0 H- cfield type(max_length) DEFAULT 'default_value' (NOT) NULL
- `7 I7 o4 \. g5 Y5 J9 o6 W}可以使用的SQL语句。
5 H, T) D8 ]7 v* w) y% `CREATE TABLE useronline (1 a8 z! \6 ]: W; h! w
timestamp int(15) DEFAULT '0' NOT NULL,% G# x" d$ P/ h) P1 l( O
ip varchar(40) NOT NULL,
' j. O2 c, C" f; Q5 i9 ?file varchar(100) NOT NULL,
+ w/ e( a2 s3 B; {PRIMARY KEY (timestamp),! g V: O6 l: P" v: v3 I; q }
KEY ip (ip),: i9 R8 w! G7 [+ c
KEY file (file). X5 q1 r/ _7 e/ g" t
);下面我们是PHP脚本,首先我定义MYSQL的信息。
/ g" i- Z$ K9 V2 D1 |" a, W M" M$server = "localhost"; //你的服务器
2 a+ D2 Q# L$ Z5 A0 Z$db_user = "root"; //你的mysql的用户名" |! Q1 x' p! q9 j* g+ ], G( Q
$db_pass = "password"; //你的mysql的密码2 P+ B. f- [* F" I9 m3 W
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)0 Z' Z# j' @( P9 ?) b
$timeoutseconds = 300;取当前时间。) v; S5 v* _& L) a0 B: ^0 u
$timestamp = time();上面的完整代码:) x* x2 s' \* j! E" o+ `7 j
<?php
: D# B: v) ~! O+ c$server = "localhost"; //your server
- K& m. G @ B# V" X9 u0 h$db_user = "root"; //your mysql database username
- L, W, s! ?$ H- ^4 d' x) ~$db_pass = "password"; //your mysql database password if any4 V5 \( R) ]) r: `$ [4 p
$database = "users"; //the db name1 F; h9 v9 ^% Z
$timeoutseconds = 300;//timeoutseconds limit
6 Y+ j- l" E( b//get the current time' c/ y8 a4 e Z' [
$timestamp = time();) B$ ~) v2 f" F3 F% y
//calculate the lowest timestamp allowed7 i" v8 H2 n4 D8 Y
$timeout = $timestamp-$timeoutseconds;
- H, g9 V( F4 B4 W! M" w?>连接mysql
- l. d5 i! ~" s" [: W& X3 Bmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
# X7 M% d; ]) I3 y2 f; Fmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* x- T) `+ j# N6 U
mysql_connect($server, $db_user);查询数据库的代码:4 _% I: R8 f/ x' z' v1 q
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
; l" G# q' P1 s# h0 a$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 ?/ e2 Z' }8 {7 _3 C3 D: a
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");5 ]- D5 [- ?1 L1 M3 V4 F+ z
如果用户用错误信息的话,这样处理。3 e& d, Y' O% v8 E- W8 {
if(!($insert)) {
' g2 t! ]2 C k) w) \6 I( Hprint "Useronline Insert Failed > ";7 U- j, c3 u# Z( t, c5 B% C
}然后实现当超过设置的时间就删除该用户记录。: O* t; T+ D$ T! h4 t8 ?
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。8 F! [2 @* p$ @- p5 m3 Q
if(!($delete)) {
) f% g2 g" N6 ^' kprint "Useronline Delete Failed > ";
( ~6 l# B( k8 l c# }) g6 A3 V}下面我们解决数据库中不同IP的问题
5 w9 Z9 Z7 z9 G& R# y8 R" o$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 R- k0 F' {' ~) u; s
mysql_num_rows(query);来统计用户,代码如下。0 ?, m2 l3 e& G- Y. n+ {
$user = mysql_num_rows($result);最后关闭数据库。
# H+ C* n/ J% v+ x1 K0 mmysql_close();显示在线的人数。
# T* H* _$ ~- t: Y! Tif($user == 1) {
4 {+ O- T8 U$ r& h' \5 Kprint("1 user online\n");
" h# K, J' ]7 _" a f' ], F( D} else {
- m/ h( b3 w/ e8 D/ qprint("$user users online\n");5 x* p2 ~( w, \2 W: O, @# b' I, h( J
}最终把上面代码写成一个PHP文件如下。
8 k) B5 \! `1 P7 V! U. t# y5 q<?php3 w( x+ f& ]+ U& t* z
//Put your basic server info here3 y- w6 J5 q. @, r- y, S% c
$server = "localhost"; //normally localhost
* S& a d* Z% t2 |/ C0 l$db_user = "root"; //your MySQL database username1 |2 Z) c3 E9 H# _( J. f
$db_pass = "password"; //your MySQL database password
$ K1 F: v8 f' U: D# [5 D% K' }$database = "users";
' E3 E2 F5 P4 a& S x/ c' b$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. L) A. b) {" c4 y% v// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last3 x$ [/ K9 V9 Z! }( u' F( N
// $timeoutseconds seconds)
, G2 |3 |8 f* Y ~- g2 d//this is where PHP gets the time5 x! o8 G( q( h/ g2 D& ?$ h: f
$timestamp = time();
* q2 V8 |% C4 U% {- L//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed. }- D0 v# x; T
$timeout = $timestamp-$timeoutseconds;
$ ?: v( G5 w, g6 Z) a/ c0 e6 h" X//connect to database
4 w% n% N& o, C4 Vmysql_connect($server, $db_user);* Y: H; ]+ J9 D0 a$ w1 S6 a( H( ?
//add the timestamp from the user to the online list3 d5 h, d/ H1 L! j( |2 F4 ?% E
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
5 I) G% H N/ C) e# r3 V('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 Z2 s$ z" t |9 B# Hif(!($insert)) {
. V, ~7 J( {* E/ {9 aprint "Useronline Insert Failed > ";$ _5 K0 r# N |; ?% R
}
6 c: m1 j" b/ I$ @9 `- [//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
1 p. J' B( \* z- t. B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
2 L2 S& D% C: p, }7 _8 D7 E6 @if(!($delete)) {
, W# C% w$ Y) r2 T9 c! E* l$ Mprint "Useronline Delete Failed > ";
5 b* V9 o5 [9 ~}- L* C- O. v$ v& I) C
//select the amount of people online, all uniques, which are online on THIS page9 V! V- N# R3 F; W5 B( t
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");/ G& ~9 Z, m9 n+ F, x2 q5 f T7 n
if(!($result)) {
, |4 \9 ~/ U2 L7 \1 \( K4 y9 \) jprint "Useronline Select Error > ";
5 T& U" [, n L/ ]. o; W" [& g}: B5 q) v8 c( m: Q" x8 g
//Count the number of rows = the number of people online( n! r0 F2 ?. H/ j
$user = mysql_num_rows($result);
+ w: L+ S. T6 ?# V//spit out the results0 c6 c, J8 A* m7 @
mysql_close();
" }/ v' ]+ }! W8 f/ G& Aif($user == 1) {
* I% e. s1 b9 M% ]8 rprint("1 user online\n");
9 P: l% ^1 a9 f& I( ?$ A, Y} else {
j$ D: ~- M; Q) {) ]7 i7 S* Pprint("$user users online\n");1 Q! |" a5 ]" X, J5 G( A1 ~
}
& _( C& `4 f; B& y. M* U?>
z! l* _; }0 D5 f, P' [6 A: {
, E/ W" e, d* n以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。. N5 ]0 Y& e+ ~* Y7 N/ r
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。) q" f; x# Z5 F# v" ]1 h
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
" M5 R7 J; H$ b当然啦,这两款主机也是相当不错的。
N) {0 r# G0 g$ B智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年! _5 m! V2 b0 v( ]+ G9 h1 n, {7 `" \
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年: m3 A/ j' m( S) K% L0 J6 C5 _
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
6 ]9 ~' g+ r! o- u" G) q# D3 O空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
; D) L: \. E' C自己加QQ去问吧。 |
|