|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! b& Q; `0 V. `" G我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) Y' N7 n( \ Z7 n! G
首先我创建MYSQL数据库表。
`$ O; m1 G0 X; S8 @CREATE TABLE tablename (
6 Q6 I, K0 x3 f9 p. @ xfield type(max_length) DEFAULT 'default_value' (NOT) NULL
$ ~3 ?1 p# ]1 J" h}可以使用的SQL语句。# ?: {- K) V1 X$ S% t' s" ]
CREATE TABLE useronline ($ n3 {! y0 I4 g' m: s# |/ W/ Z
timestamp int(15) DEFAULT '0' NOT NULL,/ z* N: p! I8 ~: a8 _+ ^
ip varchar(40) NOT NULL,
) K! z$ e8 X6 C, _* a. _ Q/ ]file varchar(100) NOT NULL,
0 B8 _- d1 s9 g0 tPRIMARY KEY (timestamp),
7 o% M' G7 p# H/ JKEY ip (ip),) E6 i% M* Y; @ ~; r: ?* W
KEY file (file)8 S* R7 n2 Z6 e5 }6 O& F9 w
);下面我们是PHP脚本,首先我定义MYSQL的信息。
, L% I- t* |5 J3 k. b, v, f6 { s$server = "localhost"; //你的服务器4 R @# ?. _! N/ E3 h+ d" {
$db_user = "root"; //你的mysql的用户名& u* Z/ c2 h/ j4 { A3 Z7 z
$db_pass = "password"; //你的mysql的密码
+ [' ~4 K4 o5 O) v- A7 ?$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
' c4 s- e) ]% Z3 r) h( ^1 F6 i# |% k$timeoutseconds = 300;取当前时间。
0 z' L+ h/ x# b$timestamp = time();上面的完整代码:
, |. X: ~2 j& s/ S<?php
* _: F$ d2 \. k2 K; t$server = "localhost"; //your server0 o& U' [! M2 U( R
$db_user = "root"; //your mysql database username
: E2 Y( L1 f/ S0 |1 a' R) B$db_pass = "password"; //your mysql database password if any
: V+ h* F. v; S$database = "users"; //the db name7 h" Q! v' x4 U1 b. [
$timeoutseconds = 300;//timeoutseconds limit
" C( p P# H% j//get the current time
% F. \# i, T$ z5 a$timestamp = time();
4 q0 b/ s8 n" h+ O6 Z( I//calculate the lowest timestamp allowed
4 B! F: E! m8 i. V+ O I1 n$timeout = $timestamp-$timeoutseconds;
3 d) x- j1 ^* ~! ?7 B2 ~& ~?>连接mysql7 m3 j- f. {, \& Z, a% O8 T+ d
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 g6 V& P) \0 n) k: hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
9 @ w* k5 |% {+ H# mmysql_connect($server, $db_user);查询数据库的代码:) O# N0 b0 U9 i' M/ G$ s* W/ K
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 x6 Z+ D$ |0 w. y' T. y* S6 b$insert = mysql_db_query($database, "INSERT INTO useronline VALUES& F0 Z8 S7 Z: C% F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");7 W' E! k! k7 ]; [- _+ U5 Y
如果用户用错误信息的话,这样处理。
# s d( K @4 z2 g) z, r. wif(!($insert)) {
$ D# K4 P+ r: P6 @print "Useronline Insert Failed > ";) t& x* B1 l8 ^9 d
}然后实现当超过设置的时间就删除该用户记录。9 t T+ Y1 M* n
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。3 |5 B7 ^) y! }5 H) X1 F- E$ t* t
if(!($delete)) {
* `; O$ |0 ?8 b9 Gprint "Useronline Delete Failed > ";
& c8 d+ ?/ c' Q3 s; B}下面我们解决数据库中不同IP的问题
" y* _8 q) [. M$ ~/ \$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用 h, M1 }) J6 G% L9 j8 k s/ V) M
mysql_num_rows(query);来统计用户,代码如下。2 }1 s6 a `( `: w6 X! c' ~ s
$user = mysql_num_rows($result);最后关闭数据库。
2 V, P8 m; j) i3 }+ Q, Hmysql_close();显示在线的人数。6 y5 {! ]! x, M: O. h! J
if($user == 1) {6 C6 X* g( W$ v# q: N1 s3 i. U
print("1 user online\n");# @% I% o3 p+ s) I& @( l
} else {5 q/ X& D0 L c! y4 A9 h4 x$ J
print("$user users online\n");
& w) _+ \' ? o1 Y) G) ]}最终把上面代码写成一个PHP文件如下。
& X6 A# ?0 R0 |' |" J7 j- V<?php
4 f4 c" y1 d' C8 n' Y ]//Put your basic server info here' V: A& |: V" u6 B; q1 D* C
$server = "localhost"; //normally localhost
; u7 s$ d& v& U! B$db_user = "root"; //your MySQL database username2 U7 U3 T) S# G. z. Y
$db_pass = "password"; //your MySQL database password3 j& m& o7 U$ G
$database = "users";+ c- D9 N+ W% B% e
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" D6 M- T& c* R! t2 b// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last8 Y9 x6 d3 n V$ |, D' V# p4 ~
// $timeoutseconds seconds): C$ R. c1 p: Y8 R! I
//this is where PHP gets the time& k" o+ x j4 `- r5 E8 O
$timestamp = time();; A ?& ^7 B3 t* a \& n
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
4 l+ y2 a/ A2 A$timeout = $timestamp-$timeoutseconds;' \0 s- ^; f8 N1 O6 \
//connect to database# W( P) K9 f0 ~2 [
mysql_connect($server, $db_user);( q# B: [- _1 f0 ~
//add the timestamp from the user to the online list; N/ o& m# O- r) c; Q
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 G8 q: E1 l3 G) Z) h" |; h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' o4 s" a+ f1 Z+ L2 lif(!($insert)) {, q/ y- l" v# x5 I, k
print "Useronline Insert Failed > ";/ R7 n5 z* H/ h. F
}/ W) C% {$ ~( w2 S8 ^
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.' ~; D2 p0 d0 t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* h0 d9 E% L" s0 Q1 M8 M* u
if(!($delete)) {9 S6 [! E8 b3 i, Q- W: w7 x9 J
print "Useronline Delete Failed > ";! g( C, N7 }! k4 A k* u) k0 X) B: x g
} E' v. ^7 H k5 d6 B9 n
//select the amount of people online, all uniques, which are online on THIS page( X: @" y1 Y( g6 E
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");8 n; v& ~$ ^( A0 t
if(!($result)) {. Z& b) O1 _8 `; K2 a; w+ A
print "Useronline Select Error > ";; v3 x; N5 T- L1 L
}
7 Y" a& ^" K U; A8 N6 N//Count the number of rows = the number of people online, f& j; h8 J+ b6 q- T* U
$user = mysql_num_rows($result);/ y$ H' g) N7 G
//spit out the results! j# K, c L" U9 }
mysql_close();- P, j5 H* @5 M. A& q
if($user == 1) {9 u( w1 J5 X- S D
print("1 user online\n");, h1 j1 w% z& l' @8 W
} else {
~( }( g+ E l* A$ i9 Xprint("$user users online\n");+ X* L- ^" b+ Z1 y; k7 r- p, \7 A
}. Q& A; T6 |# M( K' H2 a# V
?>
" \) h/ [. T9 V
1 @9 {# J2 S- @* V; R4 x以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。 A% L7 A! N% C' \- K
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/ q* c* Y1 v1 d' w我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。" ]7 Y; G, m i; F6 |5 w* C( ]- m1 Q
当然啦,这两款主机也是相当不错的。' u, k- B, d: ^7 m" t+ V2 k4 I
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年* ~7 t% Y7 E K- s
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年" z+ j c$ X; O% p' u
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ) T, }( O0 E a- T+ v$ Y
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55% k1 X8 ^. L' v6 Q" d! C
自己加QQ去问吧。 |
|