获得本站免费赞助空间请点这里
返回列表 发帖

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
; C! ^+ Q* _5 o# c) ^( `; L我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
1 q$ \/ f7 i" x( w% ^' C( J首先我创建MYSQL数据库表。2 q' l' |. m! L7 t; k. @+ h0 |
CREATE TABLE tablename (
" l7 P8 j! J( X/ n, @  A( ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
; e8 J# u3 W- k}可以使用的SQL语句。
- M  I$ a7 c  NCREATE TABLE useronline (
) D1 R6 F4 N, L6 dtimestamp int(15) DEFAULT '0' NOT NULL,
9 F6 k2 V/ M% ?" Nip varchar(40) NOT NULL,
; K2 p9 \7 L+ d$ n- Z/ ffile varchar(100) NOT NULL,
4 [: A6 p  b' ePRIMARY KEY (timestamp),
( a4 g+ I7 ]6 M) G3 iKEY ip (ip),
! W5 T# P  G! `8 o! e. nKEY file (file)
3 i* ^; F& ^) g3 a8 h);下面我们是PHP脚本,首先我定义MYSQL的信息。% @! k* o. P0 C0 S* [$ ~1 c
$server = "localhost"; //你的服务器
8 L! H+ b; c' Z/ J4 ~! x$db_user = "root"; //你的mysql的用户名* ?# a& \& U5 k2 p" E3 u# Q
$db_pass = "password"; //你的mysql的密码4 o! ~2 d3 r' m+ t# v
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
, K: K, ], r+ V+ w5 x* U$timeoutseconds = 300;取当前时间。
  |1 A: f& |1 _, t. Q$timestamp = time();上面的完整代码:2 e' r  |' T4 V; ~7 |
<?php
3 H& E5 V7 k0 S/ v# j$server = "localhost"; //your server
1 i- W( [$ F1 b; _+ H$db_user = "root"; //your mysql database username$ x1 q2 f  Z+ T; m# w
$db_pass = "password"; //your mysql database password if any
, R1 v" Q  V8 s5 _7 R$database = "users"; //the db name0 e  k' R; ~! x1 s; f1 o
$timeoutseconds = 300;//timeoutseconds limit
5 @% z) N: N/ @/ s/ j$ C//get the current time
& T1 [( h0 y5 J2 s2 h% }: L$timestamp = time();
! B3 I3 r# [2 k$ g//calculate the lowest timestamp allowed; O. q5 ]- G* g
$timeout = $timestamp-$timeoutseconds;
% B9 B( B7 I, F?>连接mysql
% O) B; h9 H, l5 M/ l) p- Wmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
; F# b: B7 }- {' h7 b" S% mmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接( Z& Y3 ]7 m- g9 F9 \
mysql_connect($server, $db_user);查询数据库的代码:
, i. I' f. j7 E3 Imysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
. A$ v3 W$ w; ^) D$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
  j' ^" p8 E; s0 y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 I% a: I# R( q如果用户用错误信息的话,这样处理。7 i( c: Z% Z/ n! r* e# Z
if(!($insert)) {
# x! V0 U/ Y% b4 N5 Gprint "Useronline Insert Failed > ";% ]$ H9 z2 O) U4 ?& g
}然后实现当超过设置的时间就删除该用户记录。: v- A! L- ]; y# B- p! b: q
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
2 j3 ~4 _- ]4 d$ u2 {if(!($delete)) {
' Y! i# L4 R) @& U+ \print "Useronline Delete Failed > ";7 M+ c* u/ d! ?
}下面我们解决数据库中不同IP的问题
  z. X7 ~  `4 i  z$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用' x9 z* D( ?. u+ D0 ?
mysql_num_rows(query);来统计用户,代码如下。
# F$ {0 [8 y8 e; v8 M# b% w$user = mysql_num_rows($result);最后关闭数据库。! Y! h" [" ]! @) g
mysql_close();显示在线的人数。
& w2 ^+ V7 a# X8 Aif($user == 1) {
4 z: M0 `+ H+ M) a( H8 _print("1 user online\n");. O# g  m: O, |' N
} else {1 T, S* p2 K  q6 N, K
print("$user users online\n");9 W) d) E- ^$ ~" o: x+ b
}最终把上面代码写成一个PHP文件如下。
  q# W. P( p# j( m<?php
9 c* L- T) ^7 R" S//Put your basic server info here
4 W* E  C2 ~9 j/ _# k) a$server = "localhost"; //normally localhost
& f0 H# u% y4 q5 h; }% r" a' K$db_user = "root"; //your MySQL database username1 _) A+ @2 T- b9 ?6 ?
$db_pass = "password"; //your MySQL database password
7 R9 C# ?, z8 l' d& C% L; h! g9 v- E$database = "users";
% J- s  H% e, \" H$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are. ?- U8 M$ G# {8 l" p1 T' N
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
2 ]: p7 ~/ n3 [* D* K" k// $timeoutseconds seconds)
  K  J; @; q9 \* ^//this is where PHP gets the time
- ]4 x/ f+ r7 g. j" O1 T$ Q9 U% H$timestamp = time();
% o/ b# F+ D; h5 R5 a//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
3 B  J6 Q3 Y- `  m1 E' o5 W$timeout = $timestamp-$timeoutseconds;
% l, L# e" e. N1 f1 I8 `( ]//connect to database
# J) X. Z" ~5 D8 K0 Kmysql_connect($server, $db_user);
/ f5 N9 p8 B; Z% d6 S4 |1 o//add the timestamp from the user to the online list
; f. H9 m- K) I2 \5 e  u- r$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ `+ v# [- s+ x5 h: Q8 ^2 \! @
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 w1 Q0 _% ?; B% y
if(!($insert)) {
2 z  W8 ~) D. o& k; c- u( W) D+ hprint "Useronline Insert Failed > ";
7 F, f  x4 c; z$ Q/ G4 ]4 T) T}# b) t( _- W" F( ~' v% Y
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
2 X9 T4 K# q: x" Z( X. I$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
( `7 P+ K  o8 B6 I: j* c9 Gif(!($delete)) {
) ?6 q" R$ o/ |4 J% Wprint "Useronline Delete Failed > ";
1 i( o, k0 w, R6 G1 e1 c1 T}
. u/ t" o' o* |* p& u, i# N+ w2 y//select the amount of people online, all uniques, which are online on THIS page0 |6 ?, ~& ~5 @
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
* ^9 n- p& t8 O1 m  e  M& yif(!($result)) {8 B2 z7 J; w; b/ F/ x
print "Useronline Select Error > ";
/ f( J5 V% X3 f}7 ]- _3 B" i. }$ k* a4 @  Y" y
//Count the number of rows = the number of people online2 }1 s! `! l1 f2 R8 ]
$user = mysql_num_rows($result);
2 _- m2 S2 `3 P5 |9 e//spit out the results. f: F4 u( k" @: x5 c
mysql_close();
4 V6 \/ P, C0 I! {) S2 Eif($user == 1) {2 a  a% U+ ?# e% z" {, o- m
print("1 user online\n");
# z% \, |* s7 i} else {
, v& ^5 W# f3 t8 j. @" C; E1 cprint("$user users online\n");
  `+ k' z! l! s) |}& s' d  z4 e! G$ s3 h# i8 u
?>
1 c) K& z) H0 w, J7 n9 a. k1 [% r( w7 z
1 i1 f) ]' [; r5 r: v! I以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
) b5 d3 r% U2 H4 d9 c- F时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。- H, L2 h% a2 f6 U2 ]5 O
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。' ]; h7 }  o5 Z0 _* v$ Y
当然啦,这两款主机也是相当不错的。
+ N3 s, o5 ^) ^5 Z8 n9 k+ {: N' F智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年$ _9 t! y- d+ _0 y6 J
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
2 g8 T8 j0 C- j提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
8 d4 s8 G4 _# g) B0 ?' J空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
; q" r: {! i' B3 g* w( T自己加QQ去问吧。

返回列表
【捌玖网络】已经运行: