返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!9 h2 l, a* Z, W: L. |3 s* Y
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。, A! e' e6 I' Y4 t
首先我创建MYSQL数据库表。
- ]* h) T9 c4 F9 M$ PCREATE TABLE tablename (
6 e1 N/ k7 \8 [field type(max_length) DEFAULT 'default_value' (NOT) NULL
# U3 E/ z8 ?; U# M}可以使用的SQL语句。# V& p& U: A; }# ~/ W
CREATE TABLE useronline (, T' a. g" \% b8 X( n
timestamp int(15) DEFAULT '0' NOT NULL,7 L7 _2 f9 f3 c3 n
ip varchar(40) NOT NULL,
  q# {: h! i; J9 d" J. o8 V( b( {7 Afile varchar(100) NOT NULL,
+ P) d9 @/ o( d6 u  c' C2 OPRIMARY KEY (timestamp),* K5 w* R( s0 K
KEY ip (ip),* R; X0 X) u4 \, D) P  e; L/ k* X" w
KEY file (file)
& E( c& a' D' H# f& X  t);下面我们是PHP脚本,首先我定义MYSQL的信息。4 ^/ a+ r7 t5 ]8 D, f8 F
$server = "localhost"; //你的服务器9 z+ u( X) ~) D  i; z
$db_user = "root"; //你的mysql的用户名
# c' X1 B9 R9 v) j! Q& a, N$db_pass = "password"; //你的mysql的密码; Q) K, o9 o! L" v7 f9 n3 i$ z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
% b# z  j2 _7 R% [4 s  g3 l2 y$timeoutseconds = 300;取当前时间。% ?% H) m  M4 w) Y
$timestamp = time();上面的完整代码:
9 \  @" p' A- a0 P<?php
0 q) W+ S5 H. K3 Z7 E$server = "localhost"; //your server
# \$ v- d/ |- {$db_user = "root"; //your mysql database username) K% C/ U! F1 s: E3 U- P, C
$db_pass = "password"; //your mysql database password if any
" p/ y& K3 r: s- V5 g1 k$database = "users"; //the db name  x$ u2 Y" F/ ~1 ?9 z5 f
$timeoutseconds = 300;//timeoutseconds limit
1 ]: d1 B- v5 P) m' v//get the current time) V4 A9 M; V2 l% f6 _$ `  r9 Q) D' G$ R
$timestamp = time();
: i/ g; C( l7 h9 Z6 B# z//calculate the lowest timestamp allowed' O; c! A- J9 l( }$ @: I
$timeout = $timestamp-$timeoutseconds;, u! u7 X1 T! |; e
?>连接mysql: p4 n2 v1 ]. F+ b. e9 ~
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 V" L! v$ r1 |, d( U# p. tmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接6 |  O3 W; F" n" N( f  M8 \
mysql_connect($server, $db_user);查询数据库的代码:( u1 P( L' c8 I
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。2 H0 V( z+ _0 A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- b3 e8 R- o' z' D
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
4 h3 H( k) v6 M" [; ?如果用户用错误信息的话,这样处理。4 {+ l3 x5 W; C9 d! X9 }
if(!($insert)) {
1 m; j- _5 \( n2 {print "Useronline Insert Failed > ";
1 T$ `# \* ]" o+ Y. b: e: g: l" D1 b}然后实现当超过设置的时间就删除该用户记录。
7 D* @, s5 {  D3 a. h$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
8 T. T) k7 _! C3 gif(!($delete)) {% p5 L) O2 V- x$ N
print "Useronline Delete Failed > ";
# a  a4 K( K/ o9 O. @; u}下面我们解决数据库中不同IP的问题. l! D# Y& \, m3 X* w* R
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用2 }! Y; b( E- q4 ^+ m) Y& b
mysql_num_rows(query);来统计用户,代码如下。
; X5 [8 y1 O, D# |$ E$user = mysql_num_rows($result);最后关闭数据库。
& P! p  |7 p& |! o4 bmysql_close();显示在线的人数。
' J6 f; _; g7 A8 T6 O( h9 Yif($user == 1) {
9 q( Z* R# ]' y# o; X& k% uprint("1 user online\n");
( _3 S( {4 {* m* y: O- q8 c. g6 Q; {} else {
' i( z5 T8 ~) v, ^2 p: N. d- \print("$user users online\n");
6 W2 s  }7 @3 U) l% i2 w}最终把上面代码写成一个PHP文件如下。
# U# F/ N/ \: c1 j5 [0 V+ u<?php' i5 h$ z" V& X  p0 J  M
//Put your basic server info here! t: [0 H* `8 k. B7 y/ `( u: }# x
$server = "localhost"; //normally localhost
' }% C  n+ J  J$db_user = "root"; //your MySQL database username; M! W: Z$ ^$ p
$db_pass = "password"; //your MySQL database password
: L- T- ?) S7 b5 Y& g8 n$database = "users";
$ i  \- ]' R) o1 j$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 S1 g  b4 M, z. [8 a// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
/ w" P4 F! m, \2 f; m: o// $timeoutseconds seconds)
4 Y% ~* K* U2 s9 Y, t& Z//this is where PHP gets the time. H# E( l- i, P- S& @$ T
$timestamp = time();# S* P9 T: |+ @2 N, y
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 \5 G7 _' ^) H1 a% x
$timeout = $timestamp-$timeoutseconds;
3 {% K( Y8 ?* E) N/ X//connect to database
/ Y; g  G! X% |* t# ~mysql_connect($server, $db_user);; B% ?& Z+ e% E$ o7 Y
//add the timestamp from the user to the online list# _5 `) R8 O9 g3 Z) P3 b3 R3 i7 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- d- e* r3 D% D9 L' k' R
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% \4 R! `2 @  C: L' t- G
if(!($insert)) {
8 T4 J  {- U) nprint "Useronline Insert Failed > ";9 ~6 S6 Q9 Q  N  \; t
}5 V+ w" ?9 r+ X! v; Q1 T
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.2 Y) S% b7 |6 q3 m4 h3 ?6 t
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
' x' S: j9 J+ L$ C. A: Z  Vif(!($delete)) {! U6 G, l; K# J9 R( W! z. y5 s+ b/ E
print "Useronline Delete Failed > ";
/ R/ c( O' c( u}1 d" R. a( ^  d
//select the amount of people online, all uniques, which are online on THIS page+ x1 x5 F0 |- r  S; @- I
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
- U# J9 O% R: T$ J7 Dif(!($result)) {& W& ]+ o$ A3 D5 Q( j6 N
print "Useronline Select Error > ";( }( z- P! i: k, H" P5 v( S  N; J6 p
}
" i; y7 R/ j: U0 L2 R//Count the number of rows = the number of people online9 Q, P* o2 {! V: t: S6 ~/ \7 |
$user = mysql_num_rows($result);& C! T, I5 V6 G7 n5 U
//spit out the results6 |% }6 Q( r$ H1 `7 m( B
mysql_close();
* {/ W3 M" J3 d$ v; f8 |& c7 S, Y0 Tif($user == 1) {
% O' A* N( [& Aprint("1 user online\n");4 k, l, `7 j1 N% X9 w1 H
} else {  o+ C3 N# B$ D6 g' e7 f
print("$user users online\n");
  N; t7 u8 t0 e0 p2 V. ]. C! r' |, W}
+ D4 E: \8 i; o/ a' u" y2 N?>
0 D- e! V- O5 @9 C4 G9 i" b8 I
% K) y( M+ G; P1 |; g以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。1 Q0 o( L0 p0 _; n- l7 r: O
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
% t, B! v. _' ?. W4 o5 m3 j4 o我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。5 R, z$ H+ K; u3 {. R$ |, f6 s
当然啦,这两款主机也是相当不错的。$ O! T! k: q8 e
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
: g( U- n2 X* D: I7 U# b) `标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年9 c! d: V/ ^# I# K4 |8 v
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- y$ p' x4 H' t  R% N1 {$ E, r空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
0 \8 B  u; ]+ d& [自己加QQ去问吧。

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