返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!2 v: d  s' w. d0 j5 m: y* W
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。& q- J! @3 t8 U6 k
首先我创建MYSQL数据库表。
' o' l0 W9 T' \  `. O8 zCREATE TABLE tablename (( R3 A% T( O1 A& v
field type(max_length) DEFAULT 'default_value' (NOT) NULL
* g+ A# c0 Z: [. `: O# F( i}可以使用的SQL语句。
5 ~/ `0 F8 D' E9 d6 ~CREATE TABLE useronline (
* H$ A4 j7 N2 ptimestamp int(15) DEFAULT '0' NOT NULL,, H8 d5 v7 v1 m1 X  g9 ~2 [
ip varchar(40) NOT NULL,$ B7 v- j" l1 N4 v3 c& G
file varchar(100) NOT NULL,
* C0 ^' H; f3 i" H& x- U. L9 RPRIMARY KEY (timestamp),
0 N8 L' }' N  E7 vKEY ip (ip),+ }% [0 l4 ]* P0 Y/ z+ A/ K- h
KEY file (file)
% O: t. X' {) Z4 f# y);下面我们是PHP脚本,首先我定义MYSQL的信息。, g" V& Q  _/ r( Q
$server = "localhost"; //你的服务器) l3 q) c8 |4 \; d( o
$db_user = "root"; //你的mysql的用户名- U! i9 g, J% ^/ v7 _& _% X6 F
$db_pass = "password"; //你的mysql的密码
3 x# q9 {8 ?& x; I9 |5 z2 I$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
  V0 }6 j2 r; j7 N) Q4 `. ~' u) T$timeoutseconds = 300;取当前时间。6 S. E3 ^" D8 ]5 x  ?
$timestamp = time();上面的完整代码:
. q' H+ I0 J2 x/ {4 u8 A<?php' }9 G+ ~" G1 C
$server = "localhost"; //your server
* P4 a! m$ y$ C: {$db_user = "root"; //your mysql database username
9 J0 ?  Q# S$ p, D$db_pass = "password"; //your mysql database password if any
3 m( h1 E( u. ~$database = "users"; //the db name
' r6 ~' }' d6 W- h& @- Q% v$timeoutseconds = 300;//timeoutseconds limit4 Z) S2 N% T( o; b( \
//get the current time
! _$ o! o. H1 y) {9 o- A$timestamp = time();
) E- Z6 d/ l! n3 x5 ?//calculate the lowest timestamp allowed6 P1 F) q1 P. u: S  z" _
$timeout = $timestamp-$timeoutseconds;% G$ I  _3 W) g
?>连接mysql. m6 l7 x" S$ o
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
  ?3 B( I* m0 A& ]7 O/ f+ S4 _' ?mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接% w  ?" X2 ~, G. @: L
mysql_connect($server, $db_user);查询数据库的代码:- {* g6 L5 n! y  j! C* `
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。  Z6 y" A7 l0 e
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
1 ^; O4 ]: R7 ]; Q# p6 z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 J$ |4 d) I- K
如果用户用错误信息的话,这样处理。
( U' }9 B/ L  z3 b, tif(!($insert)) {( K) b$ N$ o- [
print "Useronline Insert Failed > ";
+ E9 L, `/ Z# I2 e6 S9 W}然后实现当超过设置的时间就删除该用户记录。
: B2 R7 e  U( U# [. Y$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
- _6 a# {; {! I! y  R- v0 Q3 o& a( z4 iif(!($delete)) {! _8 r5 F  M" V, Q2 M1 Q" S
print "Useronline Delete Failed > ";+ n. ]! c  p- t7 U. O1 H  g% T
}下面我们解决数据库中不同IP的问题
/ U" \" m4 R: Y: K5 R3 x$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用( Z6 ]3 r( i0 M! P/ M% f9 b! u
mysql_num_rows(query);来统计用户,代码如下。
$ S4 t* c, J4 d, W5 O7 r$user = mysql_num_rows($result);最后关闭数据库。
+ v% t. ^7 e9 b; y7 A" Y2 Nmysql_close();显示在线的人数。
! X( w0 y: A3 d7 G2 y' ]if($user == 1) {, c0 R  C! `6 ~/ `  l
print("1 user online\n");  R; z$ @  z" H" @
} else {
5 Z4 t$ Q! u' d% Q2 l# x- wprint("$user users online\n");
- a* a4 T9 G0 N0 m# ~}最终把上面代码写成一个PHP文件如下。
3 q* M/ `5 g/ a+ h<?php
* S% L3 f; y% R//Put your basic server info here/ m% Y! R7 t' c: S
$server = "localhost"; //normally localhost& R9 M4 G$ g6 b3 X/ e# S5 C$ g
$db_user = "root"; //your MySQL database username8 G0 S, Q, y; b" P
$db_pass = "password"; //your MySQL database password
, }# l1 |* b" h8 |$database = "users";6 b6 `  U" }/ F9 K+ P
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" o( K8 A8 a' C$ j+ ^( B( @' N6 W0 H
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last  I* R; A+ C$ n/ r, w1 F0 C8 \/ y, w+ n
// $timeoutseconds seconds)2 x5 \) d) B% q0 A& H- `/ {7 x
//this is where PHP gets the time5 x+ u+ G& k' I
$timestamp = time();
; @' p% K# Z" r  G/ A//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
/ g( B8 b: \3 ]; H; i$timeout = $timestamp-$timeoutseconds;
7 R- S6 t$ c+ Y% j: A5 U//connect to database! i! \9 [0 ]/ c7 ^2 v
mysql_connect($server, $db_user);
& K& N& x; v  s  L//add the timestamp from the user to the online list
6 Q! H% n& U  O) m0 ?  y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- T+ k! J% u" v  D# s# m6 x/ P2 ^
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
' [" C* Y5 T3 r% P1 p2 L" eif(!($insert)) {
/ l8 X# p  P+ pprint "Useronline Insert Failed > ";$ ^* b, [! I. K4 f' S4 D" o
}( N) O$ H: }" O" M" M
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
4 X% o6 A4 M6 ]" H8 s: m" B$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& B/ F9 l6 i1 ?% C- `3 I# i  p$ y
if(!($delete)) {
- ^. A& J. B" ?" @% S& z$ ~  Wprint "Useronline Delete Failed > ";6 b/ c( v  A. {1 X5 Z/ G5 v/ l
}
! ?4 d" t3 G" _! T, ^//select the amount of people online, all uniques, which are online on THIS page
7 ^4 g: a, p, K0 |$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");1 x, Q3 w0 [( L" A( M( }- [
if(!($result)) {
/ f4 b; ~' A; y6 |* Aprint "Useronline Select Error > ";! w. C& o# m% ~8 h1 B% b1 x9 P9 u/ y
}
4 l( h+ N% K0 i8 C//Count the number of rows = the number of people online
7 ^4 n9 o6 d0 J3 |3 t$user = mysql_num_rows($result);
; |; n( k; ^$ Y* T8 |. s//spit out the results8 W5 z' l6 ]* `( E
mysql_close();
# M4 V  x/ x6 O0 F. y4 Dif($user == 1) {+ D0 z0 Q9 z: ~/ E& f
print("1 user online\n");
7 Y7 A/ K% \) d. `5 d6 B5 X0 ]} else {
! |; [& v$ b% O# aprint("$user users online\n");
8 c* g' a  t# ?" Z1 T: u2 V}% \: \1 H8 }6 B' ]! W; ^9 w0 b. e
?>
& R; v0 j" X4 X2 z* l/ M5 J  D! b8 P6 g' H2 y
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
% q: ^. Y$ p) q: a时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。% i6 D* C! S5 o! F0 r; W
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。, A" E# m' x2 X( X  p! S* z, V
当然啦,这两款主机也是相当不错的。
+ a9 G! l! e8 H( Z( R( \7 Y& S智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
$ x% m6 y9 p4 |$ e/ x! ^3 a4 |5 @标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
; K/ z8 i: R. h& q: y2 ^- N提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 }& R6 T! s8 J1 D
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
- P% `& C0 I% E1 l/ r自己加QQ去问吧。

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