
- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!8 T d8 X' ~& S' \# s
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
% U& S" z3 }; S D4 u" o首先我创建MYSQL数据库表。5 D" u) z: P ]- ^4 l! s4 s: d
CREATE TABLE tablename (
& P3 b. Y& X4 J5 p6 l$ S4 J5 y# j; yfield type(max_length) DEFAULT 'default_value' (NOT) NULL, o( N( v0 W0 N
}可以使用的SQL语句。
; V2 o5 a+ j, _( H4 W. cCREATE TABLE useronline (2 r2 s5 a6 y5 \+ y0 O' z, W1 o
timestamp int(15) DEFAULT '0' NOT NULL,
# a8 n2 m O; z5 x! |" p, Iip varchar(40) NOT NULL,
, C+ `: n" D5 V5 T' Zfile varchar(100) NOT NULL,& t8 y5 l3 g( C+ G3 x
PRIMARY KEY (timestamp),
( ?1 L- O4 C0 {KEY ip (ip),2 |1 I; R7 E9 }
KEY file (file)$ s @8 q* n+ R {8 q6 B
);下面我们是PHP脚本,首先我定义MYSQL的信息。* D& N0 ]6 o, H5 \7 H
$server = "localhost"; //你的服务器
( C. `8 {: K( o, M, F! F$db_user = "root"; //你的mysql的用户名7 X2 t/ s- ]: Q8 g* B
$db_pass = "password"; //你的mysql的密码1 g; J% g* p/ f7 J3 |0 k
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数) m$ y# V. U5 `, F$ e8 }, Z
$timeoutseconds = 300;取当前时间。
1 X& \/ {+ q4 x& ^* K$timestamp = time();上面的完整代码:2 J" t( z7 d+ A( w
<?php
9 k+ D' o' ~ S O$server = "localhost"; //your server
1 Q# g+ [3 g5 e$db_user = "root"; //your mysql database username$ ]. x/ I; q \6 t t2 ]
$db_pass = "password"; //your mysql database password if any. p Q* L9 L$ ?( c a
$database = "users"; //the db name
0 q0 J' B# i# e$ t$timeoutseconds = 300;//timeoutseconds limit
, ~+ e- m7 I+ F" r6 }//get the current time/ U5 F& P3 P$ `9 N4 T
$timestamp = time();
. U% c6 N% d8 m, d1 k//calculate the lowest timestamp allowed
0 H, L9 C' y6 t$timeout = $timestamp-$timeoutseconds;
" _5 |$ y6 N1 j' l9 z) ^0 @?>连接mysql
: a" \/ G7 G# v& Kmysql_connect('localhost', 'username', 'password');也允许使用变量形式。: I7 I8 w. @) `9 ~
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接/ V1 D- u; h" U( r
mysql_connect($server, $db_user);查询数据库的代码:
, S( D/ U2 E' U" |. N' M8 lmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。3 l; |, p6 v4 F/ ~4 M& D2 d* x. O2 A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 A' I4 M" ~! m7 C! r
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 T- L i4 \* I* B# g% c
如果用户用错误信息的话,这样处理。
- D) r3 _" } ^+ p0 qif(!($insert)) { y2 e0 J5 X% H- f) \& C2 x6 S1 p. _
print "Useronline Insert Failed > ";$ C6 V2 p7 o, H1 O
}然后实现当超过设置的时间就删除该用户记录。
/ k9 D+ t4 O- S( g$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& s. k: z1 }9 h$ J6 M; j
if(!($delete)) {
: o# k6 O! u; G6 gprint "Useronline Delete Failed > ";% o7 |% l, _. @- Y) R# x
}下面我们解决数据库中不同IP的问题
* D$ D. L- z+ B% N. C$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用, ?% E% _2 Y% G
mysql_num_rows(query);来统计用户,代码如下。1 c2 ~2 V% `* ?' E
$user = mysql_num_rows($result);最后关闭数据库。+ y( c, h2 P9 h: Z; Q2 ]
mysql_close();显示在线的人数。. ?' N% e: g! k9 p) K% F0 H
if($user == 1) {
; p y* a# `* {% t/ wprint("1 user online\n");
$ I: v2 _2 ?* F0 i} else {- t. l, f* j# V" I3 y4 c" q$ p
print("$user users online\n");
) u2 ?' Q/ k4 }3 w7 q}最终把上面代码写成一个PHP文件如下。" U9 f/ f! ~' U$ }
<?php: p$ |7 ]! q" G0 ?
//Put your basic server info here
3 Q E% T; ]1 B K3 O+ u% w. o$server = "localhost"; //normally localhost8 {8 p/ J& P+ g' D v% U' n( C, T
$db_user = "root"; //your MySQL database username
y. H8 N) H4 \# Z6 \6 q! `$db_pass = "password"; //your MySQL database password( p6 J R3 S" V7 ?
$database = "users";9 l9 d5 O {6 c- C
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are! e/ w1 z( `$ ^; F# H
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last" I& s2 c3 I; p# c6 P
// $timeoutseconds seconds)
) \' F1 T* P$ [3 n+ ^7 h//this is where PHP gets the time
1 g+ y8 w- c# Z: t" B$timestamp = time();: ~8 o% s& p, g9 E
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 L+ [ Q; ^1 d9 s; s" {5 ]; r$timeout = $timestamp-$timeoutseconds;$ _4 R% d& J; H; U. G+ s& D
//connect to database
! p) a `* h2 o5 Ymysql_connect($server, $db_user);
* F' ]9 @& b. ~* R0 |/ Z//add the timestamp from the user to the online list. d( j2 K& N( `# s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* h7 p+ Z- T, R8 \# E& O('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
1 q- y5 n5 _/ G p5 ^7 C0 gif(!($insert)) {
( ^# [; v9 x4 w" N6 ]print "Useronline Insert Failed > ";/ I7 ?+ Y; t! E) E( q6 `+ m7 ~
}
v7 g* l- x! B) t//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ Z) W; }4 X) V
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
" B0 m2 U& d5 F7 h7 n! [if(!($delete)) {
n7 [4 H2 T9 ]# uprint "Useronline Delete Failed > ";
. Y# O( f& b; _1 s}
9 j, O& s4 j0 ~$ T5 l4 i6 r//select the amount of people online, all uniques, which are online on THIS page
& [8 x" ]4 O8 N0 ]# @$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");0 b$ s" r) e& x* \
if(!($result)) {
+ o9 R, {8 J, j7 P: mprint "Useronline Select Error > ";
( H# a3 V- x0 x+ y}/ k' n/ N- \+ U; Y
//Count the number of rows = the number of people online3 Q3 D$ F7 Z! H2 r2 e7 M7 ]
$user = mysql_num_rows($result);" E5 k; a0 Y* V' S! {& ]2 m( |' b
//spit out the results( C3 g3 M3 h6 _% n% r7 a7 P
mysql_close();( L. |* ^8 B0 p& E) W5 X8 Z6 u0 j( O
if($user == 1) {
' Q" ?- }) ^' S1 n/ wprint("1 user online\n");
8 \$ i, M9 o7 I5 n/ J! h} else {
& _1 G7 ?4 o/ tprint("$user users online\n"); ~ I& m" O! R1 C( ?8 I
}
. @2 D8 | w( p2 L; Y4 L?>. m# \$ Q2 Q4 P9 d$ C
+ e, Q' l1 Z; p: p: o; m! ^
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" d. R6 n% [# [. j时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ T! F8 V. ~. v. r) J我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。: N! H( _! W5 T( D# \7 D
当然啦,这两款主机也是相当不错的。! _$ H6 j: F+ |2 \
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
% X/ s7 e% K/ H8 |8 U" a/ F标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
# p! k* V6 m/ O5 v提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
4 l0 C2 j6 N6 a- `空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" {8 o. u. ] H) t: ]2 n. f自己加QQ去问吧。 |
|