返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!* p" U  c2 l! {: Z% ^& ?' J
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
3 Q6 J& R9 k3 F/ Z$ F% A首先我创建MYSQL数据库表。
' o5 w% f) D) Q+ ]CREATE TABLE tablename (3 ?3 P! `4 e' X' |
field type(max_length) DEFAULT 'default_value' (NOT) NULL: F6 ~# w" w  C# d
}可以使用的SQL语句。. @# S+ ^& g2 K; P' U
CREATE TABLE useronline (! L) B$ J) L- S4 I5 p2 l' k" M
timestamp int(15) DEFAULT '0' NOT NULL,
3 a( D4 B9 v6 o/ R) tip varchar(40) NOT NULL,
6 C4 T6 w2 g% L; B3 rfile varchar(100) NOT NULL,) T. d9 j" Z2 A
PRIMARY KEY (timestamp),4 g% i( F& E3 t( E8 w. u& d& `
KEY ip (ip),
+ l+ M! ^# F+ K; o. fKEY file (file)
+ k$ f- l, j6 S& D, B- O);下面我们是PHP脚本,首先我定义MYSQL的信息。
: Q' r8 S9 a; [6 w3 i% O$server = "localhost"; //你的服务器5 y7 |, P/ v7 @1 l4 m, c/ F) u
$db_user = "root"; //你的mysql的用户名
/ ^, D! b' i- C' K5 B) i6 |$db_pass = "password"; //你的mysql的密码
/ J2 z3 ^6 E7 H" E& t$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)! Q0 l9 S' V% L* ?
$timeoutseconds = 300;取当前时间。* X; F- w6 b. }- X
$timestamp = time();上面的完整代码:* d( t6 G2 K0 r1 @1 L0 o
<?php* Q: x' H1 {$ T' ~# K) J
$server = "localhost"; //your server
" R8 b0 U& A% k$db_user = "root"; //your mysql database username* S* g. c9 J. q6 e$ B
$db_pass = "password"; //your mysql database password if any6 k% r  ~2 Y: E  q3 R
$database = "users"; //the db name
% Q- A& k! o' _3 c2 t: m2 ^3 m$timeoutseconds = 300;//timeoutseconds limit" J6 F! x+ [) g
//get the current time  c8 s+ j; m7 `. B
$timestamp = time();4 c' e& U/ ]4 A* p; {! A# i5 K
//calculate the lowest timestamp allowed
+ }3 V: k" d3 r+ r+ Q$timeout = $timestamp-$timeoutseconds;+ ?% h( _0 p, _& I! x1 F
?>连接mysql" u& i2 l. }, F; N
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。. {. d  C5 S2 L
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接: N0 L( T  i( C/ ]
mysql_connect($server, $db_user);查询数据库的代码:
- w; Z! }' `3 ?" tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。+ i+ x1 L1 S. V+ U" H; R  |+ I, E+ A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES- B/ ]6 G2 L4 C9 D0 t2 B; d
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");4 \3 p3 a1 X, J; w0 x, A
如果用户用错误信息的话,这样处理。
; s$ b2 L5 f  E$ {& o: ~if(!($insert)) {" ?+ H7 D( G/ V+ A
print "Useronline Insert Failed > ";4 |  M9 |2 `: Z; j; E" k/ M6 U3 _
}然后实现当超过设置的时间就删除该用户记录。
9 o6 d, }; p* c* K  \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 M0 _" t4 a6 X; c2 w! h; ]
if(!($delete)) {6 A" B& w% Y' m, Q' P
print "Useronline Delete Failed > ";9 @) h$ C6 Q, X( W/ O. y
}下面我们解决数据库中不同IP的问题' `6 p; v9 p( u8 d& w3 v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用$ `8 o, h5 L6 u) \
mysql_num_rows(query);来统计用户,代码如下。! f% e) F, N( [) R* C
$user = mysql_num_rows($result);最后关闭数据库。
8 e* F) C: t4 E' U7 c- C( |$ ]mysql_close();显示在线的人数。
! r* W+ Y9 I' f$ ?: I* N- {' ^if($user == 1) {
4 U: U% Q3 L, g1 P  Y/ yprint("1 user online\n");$ U- g, e- x- `
} else {
5 j% ]5 Y# ?) z$ k! eprint("$user users online\n");
0 v+ A# ^7 N, f' i' b}最终把上面代码写成一个PHP文件如下。
% z/ q7 \% C$ U$ Y! o) n<?php
/ y" G# G* h! D1 ^( N8 `//Put your basic server info here& ~) ?8 T: y( }3 D1 s/ {- h
$server = "localhost"; //normally localhost
! k7 b: F" v% B8 e$ Q$db_user = "root"; //your MySQL database username
# Z+ F9 K$ v/ ^5 y' T$db_pass = "password"; //your MySQL database password
' @2 z- o1 q& F# S8 c! R& n' V' n$database = "users";7 |  Y  ]1 T3 y
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are; Q" b( W. W; Q1 ?
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last* U: c. C9 u' B$ h% y
// $timeoutseconds seconds)( t5 K* c' K8 Y: L4 i1 p. |
//this is where PHP gets the time0 m# \4 {9 Q5 s/ ^8 W$ z& R
$timestamp = time();3 k& h: i% d; n  L) H" L& k
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed9 m5 p1 A  ~$ D- I8 P
$timeout = $timestamp-$timeoutseconds;
  j0 `  b) ~# e# C% e//connect to database
$ u" Q0 ~) s, c% f  Z# _mysql_connect($server, $db_user);7 H# d1 h; q) ?" z, D
//add the timestamp from the user to the online list
9 }- }4 _! Y4 f$ ~% B, W3 C$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ |  g8 U0 S0 F' X# Z, P('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");! r4 M$ q2 n! b: N! G( Y
if(!($insert)) {# t0 V' p; f4 H7 z
print "Useronline Insert Failed > ";
8 ~: b% h) A; V}
' m7 e! H3 e2 ?$ w# D) Z//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.- b% l  H: y9 }' |( ?* U
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
: |( Q' K- b' H4 U  z/ Oif(!($delete)) {
1 p  q, P+ a1 K  U/ bprint "Useronline Delete Failed > ";
6 p4 A* Y5 ]1 ?5 L0 I7 N3 c) Z}; D) Z/ A' C4 A
//select the amount of people online, all uniques, which are online on THIS page4 ?0 F, Z: ^% H/ t8 D# D5 ~$ v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
+ e5 I9 A: o& i; \+ q2 R% dif(!($result)) {/ V* t% w8 n8 w, }0 b
print "Useronline Select Error > ";( g0 S$ ^, z1 e: i. m. p2 F
}5 i9 `3 d& j+ l
//Count the number of rows = the number of people online5 ]& E" I0 p0 C
$user = mysql_num_rows($result);: ?2 T' y0 R; Z
//spit out the results
  Y0 [5 x6 |4 G. e: wmysql_close();
% h4 P  C! k, X- d3 L/ q6 mif($user == 1) {
, C+ u, D+ b8 f2 q8 _5 x8 O* i9 Jprint("1 user online\n");
! r! r9 Y3 f! }} else {
% g+ h9 u' V2 _. w9 uprint("$user users online\n");) e1 S' p9 i' E# D4 z
}/ L- l( j' A2 e
?>
6 O# U; a8 c, H
: N( t4 c( p' |0 Y以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
+ v* H- \/ Z- J5 T4 k# n时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
  c; n  I3 a0 K8 _( r" r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
& `" ]2 z% B1 Y5 O' P当然啦,这两款主机也是相当不错的。$ m! M% D8 C: F
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( _" i: \; T& o3 ~9 }1 P
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年1 ]. O% K/ i8 r5 w
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! h6 ^, N% K  e7 C/ N7 {2 Z5 X7 _
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
" G  B$ y1 v: v自己加QQ去问吧。

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