标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
[打印本页]
作者:
lilcy88
时间:
2008-5-28 10:40
标题:
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
- r! ^' ]6 v0 z/ t" e7 ~0 U/ i
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
4 A \& i$ ~) q& ?$ J
首先我创建MYSQL数据库表。
5 k u3 e# F j. r
CREATE TABLE tablename (
|: |1 V; p1 f' F
field type(max_length) DEFAULT 'default_value' (NOT) NULL
5 w! e# g1 a+ N2 N, m
}可以使用的SQL语句。
; l2 p, Q& B( {" I# J1 Z1 a2 @
CREATE TABLE useronline (
, U& K. j: c$ n; g- D' }
timestamp int(15) DEFAULT '0' NOT NULL,
: `9 N( Y. b% R
ip varchar(40) NOT NULL,
$ p+ Y4 @7 n8 c/ J( P6 w/ _
file varchar(100) NOT NULL,
C& c. p6 y8 B
PRIMARY KEY (timestamp),
. [! o( V5 Q* i" w: a* q
KEY ip (ip),
% T- Q5 ]2 P) ^8 C6 f% c1 [
KEY file (file)
/ W7 A7 _* Y% Y. V
);下面我们是PHP脚本,首先我定义MYSQL的信息。
+ x( h, M3 v. n
$server = "localhost"; //你的服务器
) J# `7 d% S0 }; O& P
$db_user = "root"; //你的mysql的用户名
R0 l5 T% {* ~; j6 ]6 Q( c
$db_pass = "password"; //你的mysql的密码
& v! y* E. ~2 U4 T T, X; u
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
+ g1 V* A4 M5 T: z4 r8 U$ `
$timeoutseconds = 300;取当前时间。
; l; C1 S# o6 t5 t# H/ m' V
$timestamp = time();上面的完整代码:
$ |- `! w/ V* f l N- k
<?php
`" e' c4 X8 }; P
$server = "localhost"; //your server
( q9 t3 C% F6 J2 ^2 g' R
$db_user = "root"; //your mysql database username
" {( x& |- d# F" l/ x- _
$db_pass = "password"; //your mysql database password if any
8 Y1 y: L* Z' E3 O" j
$database = "users"; //the db name
1 J. H' V( @3 T- E
$timeoutseconds = 300;//timeoutseconds limit
& d$ u/ V4 O' y% [5 P
//get the current time
+ ~( Q" k; @ Y$ ]1 |$ f
$timestamp = time();
" M, e, ^% C- ^4 q9 b+ T0 Q8 {
//calculate the lowest timestamp allowed
, X8 |3 @+ F% j$ C- ?2 y, P
$timeout = $timestamp-$timeoutseconds;
% p9 B# m/ n& u" n" `7 A+ S
?>连接mysql
S8 e: \# n6 z& I
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 y2 ?' v3 G/ ~9 d" c3 A5 u
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
0 n0 @$ E' k/ I9 [4 M4 D9 u t
mysql_connect($server, $db_user);查询数据库的代码:
8 o+ e5 ~4 l8 g" u0 b
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
) k- D4 g& s# }, K
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" X; S- M! ^) d( G0 k7 K
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
6 M4 Y$ J/ \# o3 e0 W" g3 S
如果用户用错误信息的话,这样处理。
a9 \5 q7 Y# K# Q* M# o* v
if(!($insert)) {
1 H' R. `2 G; B( A" ^# R
print "Useronline Insert Failed > ";
: o# [& d ?1 {# l
}然后实现当超过设置的时间就删除该用户记录。
5 K- u/ o% K; R% J7 H% H
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
6 y8 z- |6 C I4 W% y
if(!($delete)) {
9 A9 g! ?1 B9 P
print "Useronline Delete Failed > ";
6 y6 n% ]% p8 q3 P- U, a
}下面我们解决数据库中不同IP的问题
& I- w; |. O/ E0 @7 f$ N. p
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
; S2 J1 f7 O2 L% c) T8 ~; U9 J
mysql_num_rows(query);来统计用户,代码如下。
8 A. l0 a9 _" A( O+ \
$user = mysql_num_rows($result);最后关闭数据库。
- u. D( l3 B% h# B8 h% s) u
mysql_close();显示在线的人数。
8 Q4 ?: E/ f1 Z
if($user == 1) {
3 D4 ?+ y1 h$ e: M) k. u: T
print("1 user online\n");
# K0 U) i* s% X( f& z8 d4 P
} else {
5 o$ \; Y$ W' P3 _/ ^
print("$user users online\n");
0 f9 }& }0 x& j1 L, l
}最终把上面代码写成一个PHP文件如下。
: C, D% p! R* V7 C' L
<?php
: o. d1 K7 r" t
//Put your basic server info here
+ K8 c$ X% e5 o2 \* d
$server = "localhost"; //normally localhost
+ e ?" J* g8 K7 ~3 n: Y6 S% t6 J
$db_user = "root"; //your MySQL database username
. ^7 J4 [+ E' i# e4 `3 M
$db_pass = "password"; //your MySQL database password
4 I2 J5 x2 ?1 r% ]5 U7 D
$database = "users";
% j& E6 D9 R, I; J% ~0 J
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
B( a4 i/ T1 f" l; ^; Z
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ N% L* m1 X3 T% T9 F2 R
// $timeoutseconds seconds)
# e4 V, H9 ^7 V
//this is where PHP gets the time
" b1 L- `" G! c5 T4 S
$timestamp = time();
' v; a0 ^% I* V# n2 C/ D0 { |* b
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 ]7 ?! p2 t. Y$ b$ m
$timeout = $timestamp-$timeoutseconds;
- s6 h& z, ^! ?- d/ m
//connect to database
) X; c h7 w, Q6 A5 o/ X9 D
mysql_connect($server, $db_user);
6 a3 i5 L, S) x, ~
//add the timestamp from the user to the online list
( n% Q. j4 Q/ ]( y0 F. T# P: P
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
) g9 a) S A9 j% R8 k
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 O9 f: h2 O( Q9 t$ k6 z! k
if(!($insert)) {
4 P& \" i+ \* x7 t; f) g" I5 ]8 C
print "Useronline Insert Failed > ";
+ q% j7 {1 S4 [! ~/ T
}
3 W' V5 r9 y( `% o6 ]9 j8 f! k
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, d. Q8 A/ Y. h# ]3 k8 X8 R
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
# Y% U# g4 d) F9 I. {
if(!($delete)) {
0 [' [" K* _ }/ b
print "Useronline Delete Failed > ";
+ ?9 \6 {) j k6 s" I, K
}
. w" P/ g% ^5 ~ {% l" W
//select the amount of people online, all uniques, which are online on THIS page
. r7 g: N% @0 y; J7 N% l" [1 I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
7 L2 R9 s N9 @6 j1 ?& v
if(!($result)) {
5 g! _! n; b% ^( Z9 V
print "Useronline Select Error > ";
& e o6 f- q$ g
}
9 \* h* ]# n' Y5 D
//Count the number of rows = the number of people online
( B D3 j6 j# o( c) Q
$user = mysql_num_rows($result);
* N( x% s2 [) y
//spit out the results
0 E# d* N, e( S) h# q
mysql_close();
1 G3 Z9 Z+ e9 A4 Z3 r/ _0 h
if($user == 1) {
- h X. Z, F4 R9 }% D) a
print("1 user online\n");
9 i5 S3 v* W- U
} else {
. D( m0 M, f2 ?0 K7 s/ _! q
print("$user users online\n");
" N- k+ a0 G8 {
}
( e u2 P1 C- O: ^+ Y
?>
0 Y" C2 q$ Z% r' ~; z- V g$ {$ i$ J
+ j5 V9 ^0 F5 b% Y/ s0 ^' A: C
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* G8 [1 g2 a. l2 F1 ?% d z
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
7 H+ K: ]$ x5 W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
6 I" d i$ {# ]8 j
当然啦,这两款主机也是相当不错的。
7 Q8 U1 o1 b' r6 T( I" Y V# e! r
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
3 W) P1 D) |. H: X- R I4 O6 _
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 H8 F0 t- x! r& I/ q/ o
提供一下这个公司的联系方式:请见:
http://www.now.cn/vhost/
4 X6 j7 `2 |7 x1 G9 T% [
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话
http://www.now.cn/callcenter/call.net?LineName=55
- u1 Z* J3 @( p1 ?& R4 d
自己加QQ去问吧。
欢迎光临 捌玖网络工作室 (http://89w.org/)
Powered by Discuz! 7.2