|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
0 }" o+ i; i0 q$ ~$ `4 G5 r我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
$ P9 x, A7 W+ f1 \# h% S首先我创建MYSQL数据库表。
- Q0 \0 S' Q- vCREATE TABLE tablename (
3 }6 @7 ~3 c# X6 s. ^' Ifield type(max_length) DEFAULT 'default_value' (NOT) NULL7 `' I* u2 x; p6 @& _
}可以使用的SQL语句。
& t' x; r$ b4 I% Q. `CREATE TABLE useronline (. D- r) D1 Z# r4 f% `2 o
timestamp int(15) DEFAULT '0' NOT NULL,; z9 @# k3 {% \
ip varchar(40) NOT NULL,9 b8 K( Z% L* K9 Y! @
file varchar(100) NOT NULL,
, ~ Q/ A- F' k" e2 H( \; d( aPRIMARY KEY (timestamp),# \2 ?) H# r" x
KEY ip (ip),6 Q q9 O4 S8 L# f3 j I7 y
KEY file (file), l& ?( a* P: G( T' [- b1 e9 B7 q
);下面我们是PHP脚本,首先我定义MYSQL的信息。/ ~6 ?; c: Q6 n y
$server = "localhost"; //你的服务器# e7 U* {' ]& _8 \' v, E% n ?6 s8 m
$db_user = "root"; //你的mysql的用户名
' T' N/ `3 E5 G; l* b2 U1 h" ~5 C$db_pass = "password"; //你的mysql的密码, P, Y! O$ k( u( c; s5 r- l* r7 ?
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# O( b. A* k9 Z9 h" R! S$timeoutseconds = 300;取当前时间。+ {5 M5 Z/ X0 U' M1 }
$timestamp = time();上面的完整代码:
, n, N/ x$ V) v, ^7 c! n& E<?php
) h( b% X7 y3 ^- n$server = "localhost"; //your server
: C C5 T- b, Y$db_user = "root"; //your mysql database username
+ R- L4 G' O9 b: G- i$db_pass = "password"; //your mysql database password if any
5 Q1 j6 N7 N4 R$database = "users"; //the db name, E4 ~4 S) a& r9 g
$timeoutseconds = 300;//timeoutseconds limit+ @) S* e/ a) I; G# X4 j) w
//get the current time
( {9 l/ |( p' C5 Z7 d/ Q$timestamp = time();) m% H$ A6 `- ~4 q* R
//calculate the lowest timestamp allowed
* ]3 w' @* W; @1 m* R$timeout = $timestamp-$timeoutseconds;
3 }4 ?5 r# R8 l$ \?>连接mysql
+ m$ J& F |1 A8 y; _3 xmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
* O* O; |+ N- Q; j3 hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 W: J/ P; |; s: jmysql_connect($server, $db_user);查询数据库的代码:1 L) h3 |1 O% p( p% A8 N
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。% \, k0 Y& K6 l" s
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
" \" m8 \$ {7 F0 D2 M('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");( B8 e* `: ]& ]3 y0 O
如果用户用错误信息的话,这样处理。' P: u8 h7 y m1 z1 S4 n
if(!($insert)) {
# ~) d! s, O o7 L% b$ f( Vprint "Useronline Insert Failed > ";- G9 b$ G9 i/ D+ E! r; F% I, P, M
}然后实现当超过设置的时间就删除该用户记录。! I, U$ R' _& x
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
1 ?: s. Q3 W' N& uif(!($delete)) {
I2 C$ {) W6 ]' ^) F( R5 ?4 S( k! Gprint "Useronline Delete Failed > ";
; {$ Z& A; H9 @+ j6 R( p}下面我们解决数据库中不同IP的问题2 R8 o: `1 x$ E: {& @
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
' \/ f: H$ P; E% jmysql_num_rows(query);来统计用户,代码如下。
6 m5 ^0 y4 {, ^$ Z& N" S$user = mysql_num_rows($result);最后关闭数据库。3 Q- P4 J; H5 v5 {! H
mysql_close();显示在线的人数。
8 U* @& N7 j% y' r T% I! F, bif($user == 1) {
0 {% s* I) O# H7 ?print("1 user online\n");
1 O' ?( Y0 r P( L} else {
4 ^+ \2 U8 }$ A3 G3 [. D% c3 Hprint("$user users online\n");. e) d8 b" q* S. R, |
}最终把上面代码写成一个PHP文件如下。+ n' v2 q' v- N8 Q! J/ u& a
<?php5 Y! a( F+ K0 J+ Z! M6 Q6 P4 C/ V8 P
//Put your basic server info here8 x9 n, }2 [3 G8 N$ M3 A& F$ ?' m
$server = "localhost"; //normally localhost
& `* Z: _" H8 [$db_user = "root"; //your MySQL database username8 I) @4 T& ~/ J% f9 W+ J G u
$db_pass = "password"; //your MySQL database password
1 w# e) b$ j' S& v0 O# {$database = "users";: B. N8 Y. C. Q; G/ o; S
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
1 c6 W+ R- z# d6 j% \2 z6 a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* n9 P6 Q9 z8 z" C
// $timeoutseconds seconds)' o% v8 K: Q4 K6 h
//this is where PHP gets the time2 ?9 X$ T$ I$ \ h, g$ R
$timestamp = time(); `/ ~; ]- T& o6 o4 T# s
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 b8 ~/ ^; l+ H: v# l; j$timeout = $timestamp-$timeoutseconds;$ ~! L) p# g. b5 V
//connect to database% p) F& b9 i, x; \1 v
mysql_connect($server, $db_user);% N% H% U- J3 Z0 N0 \& B4 O
//add the timestamp from the user to the online list
; z( K) r# p% @! u$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ V( M5 X1 Q2 z! a) G('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* T+ c& ?. m1 m4 P0 G( p( A" iif(!($insert)) {
, E! w0 g3 G! S' R' q; i5 t; wprint "Useronline Insert Failed > ";0 }6 K8 Z0 Q0 T- H, ]/ c
}
& l7 d8 M* L u0 U//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
; h$ x4 Y9 y- T" N' y& M$ r8 _' g" Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
% t8 s- k. Y: d, Fif(!($delete)) {
' A6 A6 ? {6 }# C3 n& z( \print "Useronline Delete Failed > ";0 \. I! i' A# F# {; |
}
1 b8 e. q+ U4 Y//select the amount of people online, all uniques, which are online on THIS page
- @. u: E x& N1 Q! Q$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");5 R1 t+ _5 v" @/ E# h
if(!($result)) {" P7 r/ {* t: }
print "Useronline Select Error > ";
; Q/ R. ~: D9 g7 H" {$ W; V# ?}
1 L9 X! R6 D/ w4 o9 }//Count the number of rows = the number of people online# A1 c) r5 \+ x+ \3 y* c/ F% g
$user = mysql_num_rows($result);
0 Y6 ~, y, t% P. i1 ^) N//spit out the results
$ a/ \1 W0 V6 i" n( b% Y, Smysql_close();
2 C; O( g+ I o9 L$ S5 Nif($user == 1) {
4 _, J9 C4 v, s% p: p; V8 q5 b2 j8 |+ {print("1 user online\n");
9 C2 b- V$ M* f8 u8 I8 v1 j8 o} else {9 B& {* ?/ F; C) l( r, \. @" {
print("$user users online\n");
4 S' a1 H; d% Z# q) L}; z& C% O1 n8 T4 K1 I) e& p
?>9 G2 A+ G. b" G# d
5 P9 n& R9 T/ i& s
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" S: l2 a- C& s0 u1 U
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。2 O6 S5 M2 z& ^4 _! n1 Z: e+ J
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
c/ X$ f6 |/ W4 }当然啦,这两款主机也是相当不错的。0 Q" X; T \" T" z7 U f
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年6 D5 R8 X8 {, Y, G2 v# J
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 g, c T. u( E0 w
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
. ?; `8 s8 x- k9 k空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55" m2 x# ?/ _( D! D/ M% K% a2 K! R
自己加QQ去问吧。 |
|