|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
9 ]' D9 M. w7 B, c: G; u5 K我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。4 m' g2 N! N# k- {- i) W
首先我创建MYSQL数据库表。- p+ Y# F8 u, Q6 \4 n
CREATE TABLE tablename (
6 l7 [0 h1 {5 x* O# i Yfield type(max_length) DEFAULT 'default_value' (NOT) NULL4 e; v1 w- W U6 _. N8 U) G: ]
}可以使用的SQL语句。3 D" \: m; S* V# l/ i/ |
CREATE TABLE useronline (' V4 t( a/ o& U2 l3 [( q5 B/ Y
timestamp int(15) DEFAULT '0' NOT NULL,3 |5 E; B. I |3 F0 ?
ip varchar(40) NOT NULL,- P+ o _5 y) X! K$ |& d2 n$ P
file varchar(100) NOT NULL,- u+ V' x8 H) s
PRIMARY KEY (timestamp),
2 [$ {' a0 w$ N* qKEY ip (ip),
1 W1 `) c `+ v3 LKEY file (file)- b* \9 p6 Q p0 L1 f
);下面我们是PHP脚本,首先我定义MYSQL的信息。
6 d5 A/ ^ m5 g4 \) x$server = "localhost"; //你的服务器, p5 \; N+ T7 S# x3 R0 w9 ] e) ?
$db_user = "root"; //你的mysql的用户名
6 B/ u! e0 `8 c& I' D$db_pass = "password"; //你的mysql的密码. y5 v: }* `; \9 f. x% T1 z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
7 \, B2 E! d- `9 f2 x4 g* T; ~$timeoutseconds = 300;取当前时间。
! }7 ]5 U7 F% ]5 G7 n4 m$timestamp = time();上面的完整代码:
7 C: }3 T6 E# ]2 x0 g$ e* `4 i<?php/ m! {. F u' P1 N$ R
$server = "localhost"; //your server# u8 t* }* u: o: [/ o
$db_user = "root"; //your mysql database username2 [; }5 J! F- l6 N3 A. a7 o
$db_pass = "password"; //your mysql database password if any+ y: N9 b) t0 i, @0 c6 U
$database = "users"; //the db name; b: E6 b( w% T5 p: o% D
$timeoutseconds = 300;//timeoutseconds limit
8 z9 N- v8 ]) X6 ?+ O5 o$ i' ^//get the current time3 A. |6 H, _; o1 a
$timestamp = time();* M9 P7 U* x. z& S
//calculate the lowest timestamp allowed
. a3 M) `: M: L, z' H% ]6 s3 R$timeout = $timestamp-$timeoutseconds;! u+ Z4 P3 E$ ? g2 b. S
?>连接mysql( F; f9 v& f6 |/ H( `
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
$ C: ^/ k- j s9 S; wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接1 A& f/ L% a' C! a; b
mysql_connect($server, $db_user);查询数据库的代码:
2 \6 P/ G+ ?4 J9 W" Mmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。7 C; \: S, U& ?
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
4 s4 ]8 z& g. s0 _" p1 ~5 ]% g('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* l5 g! a) R, A3 f. k/ m如果用户用错误信息的话,这样处理。
$ R$ C5 f/ i: P; \6 Y) Y4 L; c) Nif(!($insert)) {
9 R( A2 A; a, [9 m$ T- Cprint "Useronline Insert Failed > ";
9 Y, S9 D/ [# a, G+ M}然后实现当超过设置的时间就删除该用户记录。
. a5 M1 g. \0 u1 s% V5 \ O# y% M$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
0 X. l% P0 w2 y2 G# q0 lif(!($delete)) {" r; E2 w+ N( q7 Z7 h" o5 G; C
print "Useronline Delete Failed > ";: t3 W6 s& @1 L
}下面我们解决数据库中不同IP的问题% y! D; B! T/ F+ S& G
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
4 w$ e8 x6 q; E3 k% Wmysql_num_rows(query);来统计用户,代码如下。
5 D0 p! r: q/ G1 u3 c6 F' K$user = mysql_num_rows($result);最后关闭数据库。+ }2 o, e/ {2 _0 p( a, k- M
mysql_close();显示在线的人数。$ m- Y3 t: r+ }
if($user == 1) {5 ~( r3 H8 c% c6 y5 ^2 p
print("1 user online\n");# }, | `+ i4 R6 m+ C
} else {# z8 f; V, W' l: }4 D- h! V
print("$user users online\n");
6 U) A, S( s- B: R9 |}最终把上面代码写成一个PHP文件如下。
6 E0 A" p, i1 T; I/ {<?php
; v- d" K% m1 r" h y$ Z//Put your basic server info here. ?! f9 ^: |' a; N/ k8 S6 ]7 \2 `
$server = "localhost"; //normally localhost
2 F; M# W" S% m. N( W$db_user = "root"; //your MySQL database username
2 m' X& c- ^+ l$ L, u$db_pass = "password"; //your MySQL database password
/ [# |0 N- u+ O$ m3 y- f. X1 g$database = "users";7 [1 J( e5 N. E. r; y% W* l: K
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
- o! M/ A- r9 D: y/ Q1 ?// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
~2 M- n$ M% D. g// $timeoutseconds seconds), a9 X" c7 C. R3 r0 {' w
//this is where PHP gets the time
% }! i9 f- w4 c% j9 ]8 }$timestamp = time();
5 l- \. L( s* `% i8 _. H' z//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
6 F1 h2 g+ L) }# a% Z. h$ ~$timeout = $timestamp-$timeoutseconds;$ {9 d: {, |2 Y, x! \1 G
//connect to database
% ~% }" ]1 A K+ d' b2 xmysql_connect($server, $db_user);
E2 D% P% P0 F2 X$ ^5 ]5 L& ~9 Z//add the timestamp from the user to the online list
- A; Q( Z( R* K8 w: r) O1 Z- V$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- x0 f/ S0 L3 H( V+ h
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");0 d t4 V! c, Q/ d, ]& l: m
if(!($insert)) {
! k- m" S* \( ?0 L$ H! Rprint "Useronline Insert Failed > ";
: h$ j8 S+ D9 _3 m- G1 A, C6 S}6 P0 S& y7 d1 a$ N
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
, b' f# h: x5 q" d$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");# y6 V# U8 ~+ w4 t; O& x. ^- @
if(!($delete)) {
* Q2 t4 |5 W% F% ]8 eprint "Useronline Delete Failed > ";# t0 a2 z ^* \, k. C
}
/ R0 \6 X- y9 Y% y; m6 F- F//select the amount of people online, all uniques, which are online on THIS page
+ W, Z Z* J+ ]# ~; c5 H$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# e2 _# z" V+ J: {7 H5 d$ q% v$ Fif(!($result)) {
+ B& h( Z( l+ Q" S" `print "Useronline Select Error > ";
' c0 u p% O: N6 n$ B}
" _6 j+ Y5 u& o9 p//Count the number of rows = the number of people online7 |& b& E) g: `4 W' i' t: C5 c
$user = mysql_num_rows($result);3 O7 Z9 G& W p" a+ k- M3 |
//spit out the results
. W9 @& r" O* z0 Hmysql_close();
b+ J; k' S! b3 b! o' W3 n4 Qif($user == 1) {# ` k& a7 V F, r6 `& f
print("1 user online\n");
. q: `+ z: _: ]% \+ n3 k; }} else {2 _4 e1 \$ M% S: O
print("$user users online\n");
$ y5 c7 g' Y k( a+ L$ V}
Z3 P' F" ~! Y?>- Y. Y5 b0 r5 U6 w' p/ @0 I+ C5 C$ ]

; \3 d9 b0 S; B. e6 ^+ n以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。" g' R( s$ y* y1 |* ]2 {8 H
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
8 U5 |3 i2 \! V7 N8 Y7 ?/ h我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& q$ `4 X5 g/ S G当然啦,这两款主机也是相当不错的。
3 I; k+ q/ {& ]+ h1 o' p/ }6 }- Q智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& r* B) {% V' P& Q# p- o# O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年/ y. P0 V# E2 [3 O1 K" q. | L$ m- x7 S
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 4 z7 F: g7 J$ I) n1 a
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55- E/ t% `& N+ w0 u. n
自己加QQ去问吧。 |
|