|

- UID
- 455
- 帖子
- 3
- 精华
- 0
- 积分
- 8
- 金币
- 3
- 威望
- 0
- 贡献
- 0
|
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! J' y1 J7 N& g A我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。# C0 q/ e, ]+ j7 ]& r1 Z0 q8 H
首先我创建MYSQL数据库表。
; K6 E% h8 v+ c" t# P9 tCREATE TABLE tablename (; I5 ^2 d$ K; L0 I! B* u) K- H
field type(max_length) DEFAULT 'default_value' (NOT) NULL( B a4 f1 ~' T9 K
}可以使用的SQL语句。; e0 U! ^# Q$ K+ \4 P* V$ A
CREATE TABLE useronline (# l1 t3 K$ W/ x+ Y8 l* y* V
timestamp int(15) DEFAULT '0' NOT NULL,. ]6 ^& a) N& @
ip varchar(40) NOT NULL,4 G& y3 {' y0 x1 I
file varchar(100) NOT NULL,% V1 ]7 |* n9 W) O4 m9 f
PRIMARY KEY (timestamp),
5 _: L, r3 [! zKEY ip (ip), ~' o: z! D; Q: r$ M7 F
KEY file (file)
1 F3 H# y z; W/ [0 V# t4 _);下面我们是PHP脚本,首先我定义MYSQL的信息。
1 I. o/ {3 M$ ^. U2 B+ C3 o4 d$server = "localhost"; //你的服务器* U7 h6 [0 `& i# b" S" v% A
$db_user = "root"; //你的mysql的用户名
7 z) K, ~0 K( D: d, K" U. r; ~$db_pass = "password"; //你的mysql的密码
* H% Y) w8 J' Q3 [) N' }8 N N$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
* c8 j9 [6 m0 i6 K! g5 V$timeoutseconds = 300;取当前时间。1 U$ _+ W* w3 n6 n
$timestamp = time();上面的完整代码:
5 k3 z. s o- j2 p; G+ w- [4 t<?php. h: R. Y. ^& W. o; d+ S; S
$server = "localhost"; //your server2 a7 U" L4 N* o6 K2 `5 N- c7 \
$db_user = "root"; //your mysql database username# W% k( q. u% M
$db_pass = "password"; //your mysql database password if any
- m5 F( K" E6 M: P1 {$database = "users"; //the db name
6 X7 k% P, m( g' M+ ]$timeoutseconds = 300;//timeoutseconds limit
8 Q2 j6 Y1 W9 I) z//get the current time
; A g. ?0 U6 A2 t$ P9 N$timestamp = time();
$ I, L3 s$ \) i; t: K; O4 _//calculate the lowest timestamp allowed& O( u P$ D1 R
$timeout = $timestamp-$timeoutseconds;
/ k& c- s3 w, S?>连接mysql
; m8 A$ C( y) D* Y" G* ]mysql_connect('localhost', 'username', 'password');也允许使用变量形式。; G# d' v; j) E; M+ p: l7 {
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接8 z- T& J* Y7 o5 @- W7 C
mysql_connect($server, $db_user);查询数据库的代码:6 m4 T1 G1 X6 p# G1 T0 e
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
1 W0 z4 }! y3 d3 ~ l$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# f6 F' e, _1 a( e. u7 {('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");; |/ Q4 _1 f4 l. t" A# f ]
如果用户用错误信息的话,这样处理。" [0 e8 P: G" w0 m0 {. U
if(!($insert)) {
8 I, c0 h& E( |0 N( Nprint "Useronline Insert Failed > ";
5 ?+ }5 x$ ]0 r" g) ~}然后实现当超过设置的时间就删除该用户记录。
( c: h: G6 ?% |' ~3 q2 l$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。% e5 W4 V# ]5 e' l. u( k1 |. ^
if(!($delete)) {! P, X5 K. ?, F8 d
print "Useronline Delete Failed > ";. W* ]& ^9 }$ P, z- w3 N
}下面我们解决数据库中不同IP的问题
3 d1 Z" U' g& _! o) ^- k, q. N; B$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
+ F) b; J! q) U; fmysql_num_rows(query);来统计用户,代码如下。7 V' w- g7 P" ]$ v
$user = mysql_num_rows($result);最后关闭数据库。
2 t9 k5 }* a' k, ?# k/ nmysql_close();显示在线的人数。. Z& ]" @6 |4 y8 m
if($user == 1) {
8 |6 C) Y1 e- `8 P- h; Q4 aprint("1 user online\n");, A$ ?% W% f! G$ ~0 S! @
} else {
, r9 {2 c& {/ a) iprint("$user users online\n");
, [& L K6 ~8 \1 o# R! ?- u9 ^$ l}最终把上面代码写成一个PHP文件如下。
+ X$ | {3 D1 L- ` k1 U j<?php8 J9 w5 ~) z6 ]( [7 Q2 {- F- P! E9 y
//Put your basic server info here( A6 h$ O4 G( s: c
$server = "localhost"; //normally localhost K- _* \9 b0 q, h: j
$db_user = "root"; //your MySQL database username R+ l j" u+ `' P& F* N
$db_pass = "password"; //your MySQL database password9 F# t* i% X8 e, W" ]
$database = "users";5 r. V5 m7 D0 |% C8 ~
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
5 v$ U" u! Q" Q6 R. l// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last B7 o& t. y1 X
// $timeoutseconds seconds)# e! D1 S @& k! }, R# r% @5 `
//this is where PHP gets the time
$ J1 x/ n% {. p( K( w3 B$timestamp = time();% m- _7 e/ W8 K
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed7 _; [# F% q; z1 u9 M5 ~3 \$ g' F- |
$timeout = $timestamp-$timeoutseconds;
% }! x# P+ I; H. D3 S//connect to database
4 r% j5 ~, j' a1 g6 gmysql_connect($server, $db_user);
- S; V6 r: S) r9 O% ?$ x//add the timestamp from the user to the online list# \0 G; }% `% D: N# D
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES5 p6 |, Z$ Q, M4 S; \$ V/ Q* U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");) p, x3 K% z' h ]" h6 a
if(!($insert)) {# K2 s9 v# s$ x k
print "Useronline Insert Failed > ";
1 O; b' B% w' y6 l}
) g1 R1 V& n- {! V1 k7 E0 f//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 L! N: T7 v6 v! H( N A, G
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");6 j" \4 g5 a) [ S* |* _
if(!($delete)) {
" e! E* o& W5 i1 j! b: X/ }! n- [print "Useronline Delete Failed > ";
- }* w& X4 h1 ^1 c7 f' n}$ M. m2 O+ k- ]$ |; ?6 k" E
//select the amount of people online, all uniques, which are online on THIS page
. {* U) @! |% m0 w; l$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
# j$ N+ I) J2 g8 ?" Gif(!($result)) {
" \7 @! K* s4 l1 S# ~( rprint "Useronline Select Error > ";
7 S9 C; R0 p; |/ {. H. h* h}
$ `6 W1 P" }5 A1 F0 V( J! W( |//Count the number of rows = the number of people online+ v: g+ R1 X8 \% S6 W
$user = mysql_num_rows($result);
|- @1 }0 H) Q% ?) U% h//spit out the results
' E1 ]! D4 A* N& N$ G! d7 Wmysql_close();
' X; X# d. I) G* R8 M5 Mif($user == 1) {
% J. e) w$ ]9 qprint("1 user online\n");& u* j4 Y5 c* @7 l8 D. E
} else {8 F6 X( Y6 P! D- H4 v: c
print("$user users online\n");5 ~8 C. o. Y$ b0 t. D3 c0 O
}0 T) N) I9 H7 O S; ]
?>! _1 d1 q# \, V! {5 S8 }

! v- W9 _! S$ L1 _1 d/ w以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 q2 z( H- @" @% Q L时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
2 C6 K8 Z/ Q; N; j" F我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。5 x* C6 H( F! w' ?
当然啦,这两款主机也是相当不错的。" Y; R! r6 y+ D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
% q. [9 N5 ]" U) b8 W标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
1 j: w$ P2 F4 b( l% \: L提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 6 L: g* P+ Y4 S# p# ~1 E
空间专线: 0756-2623871 QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
3 y% T3 Y/ K# n$ p; x- z自己加QQ去问吧。 |
|