返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!+ E& O6 G9 W  D8 a0 D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。, C9 z1 [' y& K' o) V7 ]
首先我创建MYSQL数据库表。* {8 {& Y- j1 x3 W# b1 X& g
CREATE TABLE tablename (+ L7 M6 N- z2 p( u
field type(max_length) DEFAULT 'default_value' (NOT) NULL
( {% e, j3 S7 U}可以使用的SQL语句。3 d8 j8 y& n7 h& e2 \. y0 [0 `
CREATE TABLE useronline (
- @2 O/ C3 G. F6 Q3 u7 z" c0 Ptimestamp int(15) DEFAULT '0' NOT NULL,
3 W; {6 ?0 r( Qip varchar(40) NOT NULL,
) n: W, y1 L2 qfile varchar(100) NOT NULL,
1 K( s2 Q1 H# dPRIMARY KEY (timestamp),9 q/ h! s1 c0 f- T8 I  k* R
KEY ip (ip),
" ]' h0 {- R$ |* j4 Q6 r, {) _KEY file (file)
# m( h: \0 {' @9 r; O);下面我们是PHP脚本,首先我定义MYSQL的信息。8 q1 J" e, e0 m/ h$ X
$server = "localhost"; //你的服务器
5 J, o9 U4 _+ {8 C: b$ l$db_user = "root"; //你的mysql的用户名$ l) E: u9 e9 j5 s- K
$db_pass = "password"; //你的mysql的密码" M7 t( {' B( P9 B' @3 N0 w( {
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)# ~$ C6 x9 w$ A4 {1 U, m! P
$timeoutseconds = 300;取当前时间。
$ U3 o6 h. `- O; |7 Q/ M3 k" S$timestamp = time();上面的完整代码:
7 `" d7 p6 D% d9 Y<?php4 c4 t, M) T, P) r
$server = "localhost"; //your server
. e, _0 E* F# v  R+ [' x$db_user = "root"; //your mysql database username
3 V7 H2 |# D( O/ q1 t! k% P' g# K$db_pass = "password"; //your mysql database password if any, Y$ [/ C4 h+ z, B' x
$database = "users"; //the db name& S4 P. ^" q6 ]0 p- Z- Z5 I
$timeoutseconds = 300;//timeoutseconds limit
  a, i2 e' u8 j9 j6 P& v//get the current time
5 A8 `! D8 Z0 r. G6 n2 Q$ D0 \$timestamp = time();
0 k# X, h1 k2 S% F& b% B+ r* }//calculate the lowest timestamp allowed
5 n- g5 f, N, `* K' [' f$timeout = $timestamp-$timeoutseconds;
' Q$ e5 v, O( `8 @?>连接mysql  T. {/ P$ h0 Z; O( K3 O
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
5 Z1 m# X' D) m+ k) b7 [& j  [2 hmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
/ C! D# D  S6 {* Tmysql_connect($server, $db_user);查询数据库的代码:
0 B; E; [5 a4 Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 G) W' ^, X- c% i1 a1 R$ t, ?$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# p: X+ {) S3 P
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& @$ Y+ A* P% A  O( ]5 r7 C
如果用户用错误信息的话,这样处理。1 {5 @* J9 V  e
if(!($insert)) {
" c0 f6 ?6 v* n; {+ @print "Useronline Insert Failed > ";+ ?; P% |# ^8 A2 ?8 a: y. ]
}然后实现当超过设置的时间就删除该用户记录。
, ]3 ~2 N. z! t1 k$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。! l' ]5 Y: x- t6 K
if(!($delete)) {4 N% B, R2 w9 R! {
print "Useronline Delete Failed > ";
  A' E+ n: \: u! ~0 u0 S7 f1 s( x}下面我们解决数据库中不同IP的问题
8 A% f. \3 T4 L. n$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用9 b1 d: B7 [; A# _
mysql_num_rows(query);来统计用户,代码如下。; T$ [- x3 b, b
$user = mysql_num_rows($result);最后关闭数据库。" A4 \" M* N% v8 }# n
mysql_close();显示在线的人数。
6 Y) {/ j3 q% A# g/ B. \) d" Nif($user == 1) {
' W1 I7 k6 a# s4 `+ O& \print("1 user online\n");
7 N' _) X* v" Z# k; ]5 [  l} else {
4 r( c+ Q' s  s2 p3 m, o9 fprint("$user users online\n");- c6 ?' U+ Y! n0 Y: Z# `
}最终把上面代码写成一个PHP文件如下。
. A8 C: _, _; k0 `. \0 M6 S<?php
8 t# h6 P; m; j0 R6 k2 T//Put your basic server info here& K9 l* H" E3 r+ R' z6 b, x
$server = "localhost"; //normally localhost
& C# d8 b) u; [6 L/ U" e$db_user = "root"; //your MySQL database username; b+ T% s1 x; s& j( v# }" k
$db_pass = "password"; //your MySQL database password
0 x" y5 f/ y0 a$database = "users";
4 q3 u2 S: q4 a$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are) l  \% P& l- Y% h$ @- X* [4 K* Q
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
6 D5 z1 `4 i1 Z, [' a- y6 J# X// $timeoutseconds seconds)( X) c! e% Y+ J2 S' M7 K9 N
//this is where PHP gets the time6 X3 L! c' w% R/ s
$timestamp = time();* l) ^$ ^8 a( t7 T
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed* W- J; t. E; f; B
$timeout = $timestamp-$timeoutseconds;# T% ]) w! b! g  G0 b( J  T( s
//connect to database
  x- [2 I0 P2 ^* o8 Hmysql_connect($server, $db_user);/ l/ `5 d$ L& p- A0 L2 J
//add the timestamp from the user to the online list
# B9 ~& U9 a( y: @0 l$insert = mysql_db_query($database, "INSERT INTO useronline VALUES' j4 B: l# J, ^# w+ [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
- W  C) c0 b+ e# xif(!($insert)) {6 L' Q. o/ _2 @0 r0 }0 H8 Q+ g
print "Useronline Insert Failed > ";
  \6 `( ]- ~: r$ r}1 ^9 B+ n9 J4 t
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
3 y7 f4 q: K7 Q$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");4 c3 u: a+ d+ y! e' l9 Q6 I
if(!($delete)) {7 D) A5 N/ _( @" J3 }
print "Useronline Delete Failed > ";& f9 M$ K. U/ T2 C1 n5 E9 W
}
8 x# N. v( c- q1 B; {/ A//select the amount of people online, all uniques, which are online on THIS page
: I/ R! q3 v. |1 o3 b! ~$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
' b2 E. }% `$ E4 sif(!($result)) {
# [1 {! ]; B! S( \0 i! Mprint "Useronline Select Error > ";3 k& n* D6 E+ d/ a+ e& ^0 k$ X
}
# a1 f* c) z: {( G//Count the number of rows = the number of people online  O+ b1 z9 G7 e) C  U/ v' E
$user = mysql_num_rows($result);
/ M7 |. L8 S& @//spit out the results2 b  J! S0 `8 c
mysql_close();; j3 r3 y/ o* Z1 i" p
if($user == 1) {
/ v+ m" Q  V. i  w0 j$ f0 Zprint("1 user online\n");
5 p% U7 l) f8 B5 F} else {
' H* z/ B, p- M  Mprint("$user users online\n");
- a0 T4 u( Z5 m( F) S) }; m}
- H: E8 [/ R) G9 }. S. k1 s?>9 j# b. q/ I$ o  f# k9 v
# J" P. |, `" f; H4 L
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* z! N9 b* U: H: I- r时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。: o# p5 N  F+ ~! T  T3 p+ i1 G5 V! J
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
+ f5 u7 u0 Y* C( s) h- J当然啦,这两款主机也是相当不错的。. k& n/ H* U* h% y' D6 D
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
8 q0 z6 D" `5 |' w5 O' O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
) U6 E8 [9 e& V- c提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
+ T3 v- B5 J, ?; ~空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
3 v7 O' Z5 q; Z& M: n- l7 ~自己加QQ去问吧。

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