返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!- c+ C( h+ p0 K9 R/ n) y# c
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
; m& E: h  C  q6 I8 t9 O首先我创建MYSQL数据库表。- R6 o: W8 ]2 o: z; g5 s' x
CREATE TABLE tablename (% t" J1 |3 X% M  \& W
field type(max_length) DEFAULT 'default_value' (NOT) NULL9 `4 T4 F. b, T% d4 M- t
}可以使用的SQL语句。/ i* a9 J' m( Q
CREATE TABLE useronline (
4 T( M( o( R9 ?( p7 ~timestamp int(15) DEFAULT '0' NOT NULL,% T$ Q4 j5 R; g: _
ip varchar(40) NOT NULL,5 U5 p* X* P4 {( [7 b" _' X
file varchar(100) NOT NULL,
0 N% {: F4 ]( Y! ^8 VPRIMARY KEY (timestamp),
- s* L! P" F; m% v! lKEY ip (ip),
5 R' U( l  x( V8 \! OKEY file (file)
. @. d8 E, c% b);下面我们是PHP脚本,首先我定义MYSQL的信息。
  i9 H- M9 i" f$server = "localhost"; //你的服务器
0 }! f- H2 u; v2 W$db_user = "root"; //你的mysql的用户名6 N2 m5 y. p: U6 O6 W& U
$db_pass = "password"; //你的mysql的密码
0 K8 Z9 H. L- T1 f( V1 \$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
( k: Z! F* @1 Y5 M; D7 `) k$timeoutseconds = 300;取当前时间。
& O: G+ I) i9 ]5 P4 R2 Y/ R. w$timestamp = time();上面的完整代码:
: l" E. i1 m1 W! X( V/ i9 b<?php  R  O$ O/ ^) s/ ?! |4 }
$server = "localhost"; //your server- G4 E4 {" U% m" _0 c
$db_user = "root"; //your mysql database username' p) n& t. W+ B; B& o
$db_pass = "password"; //your mysql database password if any
7 L. I& `3 g# y) I/ H. e( j) t$database = "users"; //the db name; ^  @4 T% n0 i/ r
$timeoutseconds = 300;//timeoutseconds limit
0 u3 L+ c: y/ p% m* M//get the current time7 n* _9 ^* ]: ^+ r$ F1 P
$timestamp = time();
' j/ @5 G# i# `//calculate the lowest timestamp allowed
- m! ?0 G8 _* l) o, C6 t$ Y$timeout = $timestamp-$timeoutseconds;1 |& t* \0 X3 O( F+ P9 H
?>连接mysql
" [6 M( h* ~; b# W/ nmysql_connect('localhost', 'username', 'password');也允许使用变量形式。
6 o4 u( R" z! L: t; smysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
$ x3 ^( G# p/ t8 l6 [& h; T. ~4 Omysql_connect($server, $db_user);查询数据库的代码:
7 [. n3 F- O# s' R/ Mmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。3 Y7 |/ Y! d7 A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
+ ^+ B% {$ b9 Z1 ?('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, |9 b; z7 T) z- `4 C# ?
如果用户用错误信息的话,这样处理。
& y6 Z" @3 |2 P' g# D% e  Sif(!($insert)) {
. s. _; r; c0 M8 J) hprint "Useronline Insert Failed > ";
3 B/ z2 W# Z" O, s}然后实现当超过设置的时间就删除该用户记录。( L# w" {( f% a, ^$ i" z/ m; _, c% ~
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。9 F6 X0 `* u& g. J# u5 U4 B1 z
if(!($delete)) {0 v3 L9 z4 e; \( Z7 X% }: c
print "Useronline Delete Failed > ";
* h* X3 u$ h- t: z: ^}下面我们解决数据库中不同IP的问题) _1 J* V5 U$ ~' }
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
9 C& U& y" g0 Y! m4 P: T, m2 ]mysql_num_rows(query);来统计用户,代码如下。: J9 A. Q$ @% H2 v) V0 x7 v/ E) w& e
$user = mysql_num_rows($result);最后关闭数据库。8 B5 ^# }7 `2 B1 \0 X/ Y; Y
mysql_close();显示在线的人数。
* k; z& N! j6 p& E' F1 e4 Iif($user == 1) {
  a8 A, ?" }. Yprint("1 user online\n");
9 ]8 H. z9 w7 _% }; c. Y} else {! \4 X& F# S9 N" L
print("$user users online\n");# _6 M* Z6 h, W- Q7 H. n
}最终把上面代码写成一个PHP文件如下。
* o- n# O6 o4 q( r; P<?php( e6 U$ x* Q! M  m
//Put your basic server info here7 {; c. n9 Z# I. y) ]
$server = "localhost"; //normally localhost
9 @$ I5 t5 G( c, {3 w5 V$db_user = "root"; //your MySQL database username0 x  E/ o5 ^* a# Z$ ]6 e- g
$db_pass = "password"; //your MySQL database password
- r  u# Z& G1 l9 `) }6 M$database = "users";
% A3 S& u2 X1 h8 F% s' s9 u$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are/ K5 {* S, y7 Y3 ~# f8 R
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last5 E7 F" @& x+ ]- z
// $timeoutseconds seconds)8 U' [2 p+ t2 _
//this is where PHP gets the time
, [' q. M0 o' @; q( B$timestamp = time();
0 j3 S' e& }4 Y' {, E//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 m( G+ n  R# D3 _5 ~$timeout = $timestamp-$timeoutseconds;
! w' I: _6 q* F% c' ^# S( T& {2 p//connect to database
: G: i5 Q6 G. B- G6 Bmysql_connect($server, $db_user);* s, V+ {. k8 v
//add the timestamp from the user to the online list
: d) V7 K7 X4 O- Q! I/ Y/ l$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" d0 J; h# A$ A
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
* Y0 W; @# h4 ]3 b9 eif(!($insert)) {
1 `/ g" ~; @, a0 R9 y# Kprint "Useronline Insert Failed > ";
6 i" ]+ g' o  o" _5 |. g& p3 r}( N) t0 r& ]+ o) {, ^
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.. J+ _0 O# k. |4 R' G0 u! m
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
( i* u0 B5 P9 E- iif(!($delete)) {/ v% H, U0 H; u2 `, H. F
print "Useronline Delete Failed > ";
+ b: m0 Z7 f1 H0 F0 K. X}
/ A; Q, d# q/ G' j( `, K: ]//select the amount of people online, all uniques, which are online on THIS page) ~" Q' X) I; q0 n8 O0 N/ R+ f9 X
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");7 k# l, r& |$ N. R! G* j
if(!($result)) {2 K) M2 ?  W8 @6 e
print "Useronline Select Error > ";
! o% g, G( l2 f5 [6 r0 h/ |( K( N}
# j1 _) ]+ Q( b3 l( Y//Count the number of rows = the number of people online: x* m" ]# a9 U4 v  U9 {2 m
$user = mysql_num_rows($result);
. S0 L$ d7 k* z7 G+ C8 p- {: i//spit out the results9 j* J+ m! R& a- y
mysql_close();
" [: V5 o, m$ R9 ?7 K" yif($user == 1) {9 m, @! S% Y) v& d4 q( p0 r
print("1 user online\n");2 q3 @3 \& Q5 v' N, p4 r
} else {
' U+ ~: O/ f) v& Q, V5 O; m7 Wprint("$user users online\n");9 d' l& `. X  I  E
}
& ^3 ~* F) ]7 y?>3 ~8 l0 o6 ]" s! N; @9 E/ \

$ r# r- n; a6 c' B  r以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
. w8 U& b/ N- o1 j$ |6 b时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
( y$ S$ N1 z6 S  @我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。+ D. M. J) b# O' E) T
当然啦,这两款主机也是相当不错的。- |5 q4 E0 p1 d; P; R. \- N
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年, L$ e7 P, ~1 E3 {
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
+ Z/ _0 n7 N8 G- p  \2 K提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
9 M9 O( X' D' L* z. X空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
7 Z  f6 a& R3 ]' M* W2 c; ]. a; Z* J自己加QQ去问吧。

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