|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
3 j7 j) U( T# ~. b* j8 a我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
/ s: d( l+ O7 S2 E% _首先我创建MYSQL数据库表。, ?% A$ {7 g6 K, o
CREATE TABLE tablename (4 k& t: A$ }7 x8 X9 ?* [
field type(max_length) DEFAULT 'default_value' (NOT) NULL8 o/ l& H g8 ?5 Y! o3 N+ L& l
}可以使用的SQL语句。2 r$ W. O8 t" m) o2 M. ^
CREATE TABLE useronline (
$ t6 ^' T! B/ E( X% ltimestamp int(15) DEFAULT '0' NOT NULL,
% g2 s, W; ^0 lip varchar(40) NOT NULL,
5 `; A3 f- W( R3 w: c3 gfile varchar(100) NOT NULL,
# _3 g, o$ ~3 N. l" F- m. a8 lPRIMARY KEY (timestamp),
- T3 K+ U, W5 {" D. C; o) u9 JKEY ip (ip),7 B' p0 g2 A) s6 u
KEY file (file); l3 A$ z' M x/ ?
);下面我们是PHP脚本,首先我定义MYSQL的信息。' [/ q2 j3 \* X% O# L& }. _ s
$server = "localhost"; //你的服务器$ X; `3 B1 w! z& ]; n- K! k
$db_user = "root"; //你的mysql的用户名% S. v# p: Q, Q# ]
$db_pass = "password"; //你的mysql的密码2 u/ g W+ h( F# D
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
) Z4 {, ]4 c5 d3 {& l5 X$timeoutseconds = 300;取当前时间。
* y$ P* l+ |5 H$timestamp = time();上面的完整代码:
2 s0 ]. g2 s% y<?php3 R& Y6 t2 w2 v- h
$server = "localhost"; //your server
, @8 h( ^# l6 q. n* M$db_user = "root"; //your mysql database username! v6 R& G) X' D& M8 v, v! \
$db_pass = "password"; //your mysql database password if any
7 [0 o5 P ^: \# e5 M; W) |$database = "users"; //the db name
5 L) a9 w! a( a0 _( y# _$timeoutseconds = 300;//timeoutseconds limit- t& U! C# l6 N
//get the current time
B1 m0 L- w' n! g$timestamp = time();
4 R7 @6 ^$ c9 C& S" i1 W//calculate the lowest timestamp allowed- B: _9 Y8 d* w, E: O( d8 o: n) m
$timeout = $timestamp-$timeoutseconds;: b+ Y+ N$ p7 l3 W7 U; Y, ?6 q. @
?>连接mysql4 p2 x' U4 h- q
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
- G5 j7 _- l2 p: V) hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接9 g& O) B3 @1 Y' w
mysql_connect($server, $db_user);查询数据库的代码:
( I: q8 E. {1 G+ `. G& W" a m8 {mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
* i2 Y# R+ h) `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# X+ d- m; o1 o7 x O3 k7 \9 a('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& p2 D4 C6 A+ r5 k; d
如果用户用错误信息的话,这样处理。# F! i' T% g' r: A0 e2 n/ l. V$ f
if(!($insert)) {" d- }4 C4 c5 M. U) }
print "Useronline Insert Failed > ";
: }8 t9 M- o y( B4 ~1 z5 S}然后实现当超过设置的时间就删除该用户记录。7 I! h7 y, E# i3 x! i. b1 }4 G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。7 c0 C3 `8 ?: O% t
if(!($delete)) {2 Y- f9 B, V1 V# r
print "Useronline Delete Failed > ";
. [# |4 K) `3 O& K, A}下面我们解决数据库中不同IP的问题& ?/ g% ]& z3 m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用" H' O+ Q. d8 M, K- ]
mysql_num_rows(query);来统计用户,代码如下。0 m( }+ r! u7 [( `6 R" C! d1 Z
$user = mysql_num_rows($result);最后关闭数据库。7 A( ]0 Y& P+ e2 c4 x5 n/ m
mysql_close();显示在线的人数。
# B' ]" w K* G( A0 E5 ]if($user == 1) {
0 _6 X7 x' U# `, b+ Kprint("1 user online\n");
* d& L/ P+ Q$ t# g4 W# Q- v} else {- B% C- y! w# S+ L4 u. |/ a4 m
print("$user users online\n");
* l F# o. P ~$ h9 M}最终把上面代码写成一个PHP文件如下。
, x/ h) {# h E3 e6 Y$ e$ z1 V ]* H<?php
4 p' r6 L h4 c# `//Put your basic server info here$ ?6 O9 v) o2 ]( X. y$ M5 H% Y% [
$server = "localhost"; //normally localhost
& o6 c7 o( g" P$db_user = "root"; //your MySQL database username
3 L& }) p3 B3 e& E% I$db_pass = "password"; //your MySQL database password! q& k/ a/ a: c6 }* G n# I
$database = "users";
) X D( V, c$ A( }$ j6 w$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are% ]2 L9 V+ m; F6 D
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
9 @: N1 S/ z0 B// $timeoutseconds seconds), j0 q! k* n9 f) C: o
//this is where PHP gets the time
5 N) ^9 m" S; n w- F' h$timestamp = time();
1 i; N9 y/ a$ X% U3 W- Y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed4 M" _8 k8 W% `
$timeout = $timestamp-$timeoutseconds;0 g. u% V5 N; E$ f! W3 J
//connect to database5 U+ F! P! M& o$ |" ~
mysql_connect($server, $db_user);
% }% {: ]8 O, C, ^+ b$ s0 D0 \" Q* T//add the timestamp from the user to the online list1 w' X9 g- l0 f! }
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 q0 C. u' W+ g- J3 s2 _
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 J1 }3 V! u- W5 @ x# C3 rif(!($insert)) {
$ b1 n4 w6 B9 \/ Cprint "Useronline Insert Failed > ";
; V8 y: C4 p: w5 v}# o* N: u0 ^! K" x
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.: U J2 I b* X2 \4 V$ y; `) b( |
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
+ {2 d* d( _- M" J5 x: lif(!($delete)) {
; e" r% c; J; O- ` Aprint "Useronline Delete Failed > ";9 ~* j3 i8 B. P/ e
}% y y* P! _8 B4 o' ?) t
//select the amount of people online, all uniques, which are online on THIS page5 h& Q$ C6 M" V1 a* A, p, O
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");! X2 p2 C2 ^7 Z
if(!($result)) {2 R% W% s) i# E
print "Useronline Select Error > ";' ?1 d. |, o* h9 s; w
}2 n0 `) p1 N9 [$ I
//Count the number of rows = the number of people online
- _8 I( s' s, O$user = mysql_num_rows($result);
' t, l6 d$ I. u& B//spit out the results
5 \( B4 a4 b: H( c, ?mysql_close();
% F# V9 C' D% R' U4 z- L9 vif($user == 1) {3 M. t- k$ a; t( ^
print("1 user online\n");
$ r+ q1 F# P5 t! ?- v; F} else {
* q3 y4 \ b; Wprint("$user users online\n");& y& C& E9 K' ~1 g# x, r4 a4 ]! o
}
8 f3 h; c- Z' h: W# R' t?>: R9 _: F0 w8 v# g( a# q
) N6 P: \# M( o1 {/ Y. {2 u! I
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
: l- Y. A) c. g2 w W1 q9 ~时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。* Y+ z% ]6 X' b) M1 o) K
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
! ]- |5 U2 u- a9 }5 m$ t当然啦,这两款主机也是相当不错的。
: K) w7 y* B1 E7 `8 v) Y智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& r! W% ?' i9 b9 |1 E1 x标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 u! ]6 H0 y/ ~
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 ?, M0 R ]+ t; ]) F: Z
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55( k2 u r$ b! a3 K9 z5 w
自己加QQ去问吧。 |
|