|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!& \% `, T6 S" R
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。( L3 w! W1 Z, C3 c
首先我创建MYSQL数据库表。
" M: e! b8 K" E, i1 @8 c- d' [CREATE TABLE tablename (
5 q; n! \2 U: sfield type(max_length) DEFAULT 'default_value' (NOT) NULL' Y+ B( E% C4 I$ j- A5 _; P* e7 w
}可以使用的SQL语句。
: J% J+ i% V' m _5 i2 \9 @& PCREATE TABLE useronline (
- a1 Z# O& L3 z6 P. Mtimestamp int(15) DEFAULT '0' NOT NULL,
?8 G" h7 d" }: `4 Dip varchar(40) NOT NULL,' \7 k/ z2 `0 q7 Z
file varchar(100) NOT NULL,0 T) G2 O' {1 i# M* a
PRIMARY KEY (timestamp),! v# X' T, U- N; f, @2 `% C
KEY ip (ip),$ E# [$ |$ @+ q/ P
KEY file (file)) N. E% R: c+ _3 R) V
);下面我们是PHP脚本,首先我定义MYSQL的信息。4 w5 q3 \ l& I+ ]) y, H# u
$server = "localhost"; //你的服务器/ |9 |1 @4 t2 b ^9 `2 D9 Z" C# H# u
$db_user = "root"; //你的mysql的用户名
- a0 C, B% v: s# \) Y$db_pass = "password"; //你的mysql的密码' ~; P( i, w( U% ]! G" r" ]* M
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# U- d5 e# @! E/ x$timeoutseconds = 300;取当前时间。
8 A( k/ R% N- _4 C$timestamp = time();上面的完整代码:
; [4 c6 D/ E. ~$ _* w1 S4 n1 G+ N<?php
* \. Y0 t9 x+ i& x" Q0 t$server = "localhost"; //your server
% U1 q/ b+ ?5 I( E$db_user = "root"; //your mysql database username; [2 h' u2 p3 p# o
$db_pass = "password"; //your mysql database password if any
" d! v+ q7 X! N: w$ n: i2 u$database = "users"; //the db name
R6 ^" {4 J8 v1 \) y2 X$timeoutseconds = 300;//timeoutseconds limit% C! A m. D, R% U+ d
//get the current time f0 ^3 G( S+ n- `3 m- }
$timestamp = time();
; s9 c" L" h2 x; f' }3 D//calculate the lowest timestamp allowed
* Y0 `0 {, t5 d5 F* |+ r4 L& C$timeout = $timestamp-$timeoutseconds;
1 `! T( m( s) B" R/ M( F+ f?>连接mysql
) Q$ u- D6 ~% O7 u+ X6 Ymysql_connect('localhost', 'username', 'password');也允许使用变量形式。. y! `) z3 d; ~5 q
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接* J/ c9 U5 j% P j4 W: x' z5 N6 _% B
mysql_connect($server, $db_user);查询数据库的代码:
3 x7 t" H/ N) `mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。. J2 h' Z' X7 D( S
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 B: `" G( e6 P+ Z, |; b( W+ q
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");* _* q, [1 @6 m R; h
如果用户用错误信息的话,这样处理。1 j3 o$ n$ |, k0 _2 j
if(!($insert)) {3 N4 K6 i4 L! z; G4 @
print "Useronline Insert Failed > ";
3 @( B0 X* r7 g: o}然后实现当超过设置的时间就删除该用户记录。! x) G' |* G: `' r+ A: c" ^
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 M2 \; z/ }# `: n( r2 ~" {
if(!($delete)) {: o- @2 U! t2 l/ r5 @9 m+ e2 P
print "Useronline Delete Failed > ";2 H$ B) _$ k( Z2 i: E/ T W
}下面我们解决数据库中不同IP的问题
" |( W/ ?9 V6 G7 G3 l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
* \9 y5 D! ?! D9 ~( e! l8 n/ jmysql_num_rows(query);来统计用户,代码如下。8 A4 y2 o+ O V7 P
$user = mysql_num_rows($result);最后关闭数据库。/ K" }9 K G C% I7 r D9 i. H4 w H
mysql_close();显示在线的人数。
! z4 q. ~- i' [6 `# K! r7 ]if($user == 1) {
- h _" v; {. m+ o9 P+ `- |, tprint("1 user online\n");
' f* S& E6 F) W: _% M3 _2 H6 L} else {
7 q. o3 ?+ ~4 K1 C7 k" Zprint("$user users online\n");) I- j( F. H5 m* d* V$ V: S% g- _' b. L
}最终把上面代码写成一个PHP文件如下。
]! v6 n+ `1 m<?php! }+ s( L9 @7 o0 w, N3 f
//Put your basic server info here
/ O; ]1 _+ Y+ `9 r; S0 K' \$server = "localhost"; //normally localhost
; k, W- F( c1 |4 {1 [9 m$db_user = "root"; //your MySQL database username
2 a6 O1 V- o- {- r+ e$db_pass = "password"; //your MySQL database password$ D; t9 q3 {% s8 @% C4 `# {- `
$database = "users";4 y. P8 L: I6 Z9 h: m$ [
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are r( T# ]& ]2 {# ^+ N! y! K6 n
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
t7 x/ T @/ |( ]& e3 Q h// $timeoutseconds seconds)
( \8 d, @; u* S/ ~//this is where PHP gets the time
7 {# S V; U) W7 S) F% n1 Z$timestamp = time();5 \! R( b# E0 C0 |! ]
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed# U( o0 n! b/ S+ D! c' U# k
$timeout = $timestamp-$timeoutseconds;
. L) t0 V& [& \ K d% \//connect to database' `+ W( B0 m9 j3 ~
mysql_connect($server, $db_user);
; A/ I) Y. R* B) d! F- Y//add the timestamp from the user to the online list
# J% }; V( o3 D0 O; J$insert = mysql_db_query($database, "INSERT INTO useronline VALUES6 F! x! {2 o8 X8 L6 l
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
( A% J( [; i. A' Jif(!($insert)) {
5 e' a4 Y2 U, \$ hprint "Useronline Insert Failed > "; N D, M; J7 |3 k6 r: x) S
}
7 N+ N2 s- H; Y. `/ P- G//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: G$ j6 V! e& f" B* U0 s% n/ c$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 L S2 j1 J& Dif(!($delete)) {
[4 }+ o/ S t( mprint "Useronline Delete Failed > ";5 S( w! P x+ m# \
}
, J& [. k3 O! \: b2 r. y//select the amount of people online, all uniques, which are online on THIS page
$ e+ M! R: |5 }; M* Z/ h% E$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
3 ~- b, d: J% S2 q( aif(!($result)) {
) e6 y& u$ ?+ F- qprint "Useronline Select Error > ";
; u7 o0 E4 k& a: E, ^* h$ [! N9 A# E}: W- d+ J) X) z! x7 F" N
//Count the number of rows = the number of people online+ `- u) E: p- u% G
$user = mysql_num_rows($result);
D+ t: W8 a8 I5 @ V9 K. u% a. |7 D//spit out the results
6 f% M4 |) [/ i' D! Z3 s0 Umysql_close();
3 L; M5 @' q$ w+ b) d0 |" }if($user == 1) {
& i/ l7 V& s. I+ V$ ]1 t! gprint("1 user online\n");, X) r* v+ O' H [" r5 F# N
} else {
* I0 _1 {* @8 ]8 pprint("$user users online\n");' j/ n1 n8 x" x5 N& D# C5 V$ t
}5 X+ M# B3 `$ g5 h t/ H
?>
. h; g- ?( r" |! [2 P2 }4 e2 B7 b
/ T+ M ?8 v! H8 e0 T6 r以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" \8 t8 X) x' }1 t) _1 ~% }; K
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
$ N, @0 ]0 b1 W/ e' w/ c我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。4 y4 N# c v& O6 u/ {3 C
当然啦,这两款主机也是相当不错的。
! c& N8 y- ~; }$ [智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年9 G' l$ Y- B" w
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) U5 u" D' y) l( D1 p( r提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
) V0 m- Z+ ~# w$ ?2 c s空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55. E& C" p1 D6 U+ p* ?: n% b2 l
自己加QQ去问吧。 |
|