返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
$ D& ^: x/ W: j  W; s6 m- w5 |5 s* V我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
7 A7 e* R  l1 V3 M6 {! Q4 X首先我创建MYSQL数据库表。
, G. S/ c( i) J) iCREATE TABLE tablename (
( n7 \6 \4 T7 P+ h3 }# ]field type(max_length) DEFAULT 'default_value' (NOT) NULL
- i- r! w5 V3 t0 k}可以使用的SQL语句。" N! Z( m& d8 f  s" P0 U7 C4 V
CREATE TABLE useronline (
! y1 `6 I4 h) Q  g, U' [2 ptimestamp int(15) DEFAULT '0' NOT NULL,
6 T$ E1 c; ]  Qip varchar(40) NOT NULL,( j. y# T  ?7 u( w
file varchar(100) NOT NULL,' h9 Y8 i$ q1 \9 Y2 S( j# c7 K* I
PRIMARY KEY (timestamp),, ]. Y/ E8 r: u
KEY ip (ip),5 x8 \$ D* X, G
KEY file (file)- L8 m, l( i) R6 T' }- U$ z' {
);下面我们是PHP脚本,首先我定义MYSQL的信息。
% X1 K+ u2 P( }3 z. L/ Q$server = "localhost"; //你的服务器3 ?. a  _( u0 [0 v
$db_user = "root"; //你的mysql的用户名  e- R- u. ]" x1 `" v
$db_pass = "password"; //你的mysql的密码
* D) L$ J; y# G0 g; A- z$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)+ \' k1 O* N. b7 C0 ]: V& `
$timeoutseconds = 300;取当前时间。: d. ?* X6 }( W
$timestamp = time();上面的完整代码:3 l$ U1 A* _! x+ Q
<?php
  b; V1 w) V5 H4 m4 ~; F* j! [. ?7 |$server = "localhost"; //your server$ q9 x& w) C' B, F+ y0 D; }) h
$db_user = "root"; //your mysql database username
' z$ |' x- q. x4 [8 R6 X$db_pass = "password"; //your mysql database password if any
; ~0 j' C; j1 t; l$database = "users"; //the db name
; ^) F1 d, k$ Z8 f/ `$timeoutseconds = 300;//timeoutseconds limit- p2 F/ x: ]! L* j$ \) s* F
//get the current time
( ?' F1 e5 z* y3 J& ]8 F$timestamp = time();
. S# t5 [0 ]$ V- G6 y$ \) A//calculate the lowest timestamp allowed
& w8 r% F1 [' Y3 |+ |( A2 z8 J$timeout = $timestamp-$timeoutseconds;
( \/ ]  B! G$ ^7 n' P?>连接mysql
; ?8 }$ _1 H+ g$ P& G2 ?3 l8 w' ]$ Tmysql_connect('localhost', 'username', 'password');也允许使用变量形式。, ]2 x0 k4 V- q/ [; n
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接9 f" g  G3 I6 p8 H- p& w
mysql_connect($server, $db_user);查询数据库的代码:" v) k& n1 s. \1 f' s
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。* K3 ^2 G  ~) F  D
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
# R8 ^& {5 @" {3 ?. q('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& F9 j+ Q$ F: H% \' S8 K/ x& p
如果用户用错误信息的话,这样处理。3 O* h+ O9 s& A% J
if(!($insert)) {. N9 t- V  n6 J% [
print "Useronline Insert Failed > ";& b* O! ?  T9 [+ C) G
}然后实现当超过设置的时间就删除该用户记录。
7 ^# }$ v6 E  p3 K- j$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
& U' r4 C! u1 A# E3 z: K  _; |if(!($delete)) {
/ r5 |0 s. a  Y) c% x. x+ n* K" _print "Useronline Delete Failed > ";
. f8 B. c  }" ~3 i2 J}下面我们解决数据库中不同IP的问题( i5 m9 v! P. Y! ?! C: f5 u# c
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用& N: b) x; J$ V) U
mysql_num_rows(query);来统计用户,代码如下。$ d5 z$ i7 @( ^+ P' \* S) ]8 G' h3 w
$user = mysql_num_rows($result);最后关闭数据库。
9 W# @. P3 f7 y% M' kmysql_close();显示在线的人数。
# A; ~1 O$ _2 fif($user == 1) {
6 x: m7 g8 ^9 E" ]print("1 user online\n");
6 _/ B: _) t, s% k2 T  X} else {4 Z8 i* e$ u4 y7 W9 ]. k' Q( d
print("$user users online\n");
* E2 J/ ?7 m8 V8 D0 Q/ U5 o) W}最终把上面代码写成一个PHP文件如下。; ?# t+ T7 `: _; L  W
<?php8 V* s; R3 V4 Y. v4 ^
//Put your basic server info here
& }% e# O* f  [" L$server = "localhost"; //normally localhost# V: z) h7 C* q' ~0 {
$db_user = "root"; //your MySQL database username
+ E1 {* W" U# x8 u, [8 x, \$db_pass = "password"; //your MySQL database password
" ~" P/ n2 g$ X1 |  y. {4 e7 r$database = "users";7 e* q& |+ y+ p) A
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are" x3 R; k4 r* k
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last5 v8 y% K. O& N' Z! m
// $timeoutseconds seconds)5 R( t/ N. u4 ?. U# S9 A9 P2 k
//this is where PHP gets the time! n1 f7 G3 I! n! M# @
$timestamp = time();# L6 ]6 Q( M. Z: E0 h
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
5 C& B& C3 Z9 v4 O- G$timeout = $timestamp-$timeoutseconds;! a$ m5 l( r8 J, h2 v6 l
//connect to database
' _/ H' H2 J7 a1 a0 q& a9 t1 jmysql_connect($server, $db_user);' C- J+ k" C$ h+ C2 S
//add the timestamp from the user to the online list  E; G6 T- I* i+ Q, j5 ?- k
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES7 f6 P: J1 v7 k  |
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* z+ k* d/ ]: F; U: Y0 H+ T/ \9 Pif(!($insert)) {
5 ?/ W1 d+ I' F2 c, C6 W1 M) m% w* Tprint "Useronline Insert Failed > ";5 n2 @) \0 e0 g2 c( v6 |
}$ c! R: j( t9 {! C0 E, l% N6 j
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
' j+ h% t. K9 e7 N" s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
  y! W! ~  b  R& Q# a( ?* aif(!($delete)) {8 D! H$ w, M8 N( N7 U0 p
print "Useronline Delete Failed > ";
* j( r0 l2 Y0 N: z}
4 r  K& G- m+ N" W//select the amount of people online, all uniques, which are online on THIS page
; }4 A6 r/ D8 N8 i6 ~/ ^$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
8 X* C* l& r, H# Q  R; {0 d3 Pif(!($result)) {8 |+ Z' |2 t" U8 l$ d/ @
print "Useronline Select Error > ";
/ k; X9 ?1 C& `8 d% p}: ^9 o2 F+ w6 }* D/ @; s  U
//Count the number of rows = the number of people online
. e6 c0 l8 l( ~$user = mysql_num_rows($result);
  S1 U# Z4 J$ k5 i, h: P//spit out the results, b; I2 y( I. N& o- a9 I
mysql_close();. r' A9 @2 Y1 w- v1 U% H* E
if($user == 1) {7 G6 d3 T; l8 O- |% r
print("1 user online\n");: ]6 ~. v9 S! h8 h
} else {& Y  w& q5 C# E% _$ O- [4 |
print("$user users online\n");
# K! M! t8 B8 Q; m1 i+ R% L8 ~5 j+ @8 d}( ^$ c8 O4 P4 Z. n+ n1 e
?>
" B5 D7 X/ A3 ^5 M& v' q% \4 s8 F$ B" z& Z6 u
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
! W7 j5 K/ l0 j时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
) S8 q8 M# }# R  U0 c9 H我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
7 H$ V! y9 G+ Q8 l! k& n5 M当然啦,这两款主机也是相当不错的。8 s2 g5 J0 F1 _. o0 w
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
; j% t# C2 `- p3 t标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
' Q5 z6 E* ]& ]' L1 [) g7 {6 X提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ; f, P$ ^4 A: c8 `1 `' _- ]
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55) l# l# A0 F% n; R
自己加QQ去问吧。

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