返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!( T0 `  p0 h3 P* D
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。" Z; D9 E( Y" ^/ b$ l! F- X
首先我创建MYSQL数据库表。
# l- {7 q. W8 W8 J. }4 c/ HCREATE TABLE tablename (
9 K; A1 [" ~- @) P9 @field type(max_length) DEFAULT 'default_value' (NOT) NULL& w1 _9 m$ a3 X
}可以使用的SQL语句。+ s& \( m4 X2 K8 s  A9 D% _8 K
CREATE TABLE useronline (3 v+ o! r7 x6 b! _# @$ f
timestamp int(15) DEFAULT '0' NOT NULL,( f7 w7 A6 G4 |3 F% _" Q% M
ip varchar(40) NOT NULL,
6 o; W+ d' a+ g8 L" dfile varchar(100) NOT NULL,
) @6 _$ T+ [) z0 ?3 j. [* p# IPRIMARY KEY (timestamp),
* f6 ^+ {  p8 d" A1 gKEY ip (ip),
  |0 g; C; e+ ~% q: sKEY file (file)% \) @9 [  D3 J. o. D$ x! ~* k% @
);下面我们是PHP脚本,首先我定义MYSQL的信息。9 O" t. ]0 I$ a0 n6 k; p/ L& K. y
$server = "localhost"; //你的服务器+ L9 f* w- D6 T1 u
$db_user = "root"; //你的mysql的用户名
+ L+ F) e' X* J6 G$db_pass = "password"; //你的mysql的密码
# K- s; U: Y" c: a$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)- h3 j/ x7 O, c3 a
$timeoutseconds = 300;取当前时间。. T) o) a/ \. D5 h
$timestamp = time();上面的完整代码:7 H9 p$ R) V" o; M, Y/ g; u; {
<?php. u) u" Q9 `3 f! c& S6 d
$server = "localhost"; //your server
7 D! z  m% l6 C# _  s  [% r: }0 R& F$ t$db_user = "root"; //your mysql database username
7 Y. N; S) v1 G# \- D$db_pass = "password"; //your mysql database password if any0 E2 ]1 y  e& \1 V; p8 ~% Y
$database = "users"; //the db name
! L: ]) B5 i" P! l9 K$timeoutseconds = 300;//timeoutseconds limit' [2 Z2 Y# n: s9 A8 R6 W
//get the current time5 a8 z, R+ c  F0 ~
$timestamp = time();, U: q' }" b# e& z
//calculate the lowest timestamp allowed* @3 W! O, h. n8 J
$timeout = $timestamp-$timeoutseconds;
0 w) g6 S% L8 l( s4 P$ |! S?>连接mysql
% u7 Z& v' \0 S4 F, A2 a7 i; ^mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
4 {9 y8 M+ T% L) i! Gmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接# o6 Y) X4 O  Z- O  f
mysql_connect($server, $db_user);查询数据库的代码:/ o; `! B  _6 c. @4 m+ ~1 ?
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。1 q% N% c! c6 z" @" @. M! Z
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( f+ X7 D- P/ T2 v" k1 b('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
. W/ }7 o; o- J; B7 b如果用户用错误信息的话,这样处理。8 y/ |' g$ H* i5 o
if(!($insert)) {
, J0 n! a; A; jprint "Useronline Insert Failed > ";' R5 q- ~) j0 f, J' w
}然后实现当超过设置的时间就删除该用户记录。; y- O( e3 O& d4 E' ]- w, T
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。& |4 N; Z  L3 y2 C0 U
if(!($delete)) {
. X2 I$ w7 q* \6 R. k5 |  Aprint "Useronline Delete Failed > ";
* ?0 C+ f/ ~' r; p  f}下面我们解决数据库中不同IP的问题) x' c! J/ l* E& f
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用4 J& `7 M# ?8 K1 h
mysql_num_rows(query);来统计用户,代码如下。
5 K" Z7 i2 B5 v9 E/ N: |$user = mysql_num_rows($result);最后关闭数据库。# ~. p; C1 `) L9 C! j& ?, e3 Y
mysql_close();显示在线的人数。: S$ ]- Y6 h+ c- [+ E
if($user == 1) {9 |+ q" n% E! ^6 B7 x3 N/ C! S
print("1 user online\n");, f- @/ Q* a9 @2 x
} else {8 Z, ]8 J3 h: N! e
print("$user users online\n");1 u1 Z! U% N3 t0 t
}最终把上面代码写成一个PHP文件如下。2 t; A' U( n' u
<?php; P- _( o: z$ Y, q$ P
//Put your basic server info here6 x' R& ~" e) d: g  [4 p
$server = "localhost"; //normally localhost
4 E: X) `. h( E% g4 [! \" y# S$db_user = "root"; //your MySQL database username5 b) t  i# X: D$ |6 t5 g; z: R7 X
$db_pass = "password"; //your MySQL database password
; d+ [9 t6 m. ~8 E$database = "users";) A8 X5 i+ j  A6 f
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
. T# b2 [* b( R; R// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
. [* p( I; z$ e( \% D// $timeoutseconds seconds). E% d5 H! f6 o6 |4 T+ k$ l
//this is where PHP gets the time
# J! q3 X. n  m$timestamp = time();
; C& s: i" _5 h) p' |/ R* y//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
8 B; x; l. V( _$timeout = $timestamp-$timeoutseconds;
5 W1 S, n( z- K; o* i( w% [//connect to database
# s2 O$ s7 f8 r2 ]+ n: \mysql_connect($server, $db_user);
  c7 G* Q! H7 ?/ s7 N' z//add the timestamp from the user to the online list/ b- ]/ l( w. A
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# w1 z4 O- l; N! N7 o' j
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");1 ]( a! Z3 f! ]
if(!($insert)) {3 k; K! K$ p( ^# s7 B. E
print "Useronline Insert Failed > ";# B6 {0 a* h8 [% }' P
}
4 ]* e# c: G4 ?# X; a6 s. ]//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
- Z% x7 Y! t8 x: s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");& a7 C) A/ {. y6 }3 ~  Z
if(!($delete)) {
8 h$ ^  ?! |( B4 `6 W& W) Xprint "Useronline Delete Failed > ";
% C8 X' G: G* X}, b: O9 W) }  u
//select the amount of people online, all uniques, which are online on THIS page
2 B7 d; \& |% p1 i" f, `4 W$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
$ C' r$ k" q: u: nif(!($result)) {
% Z  J% i) T" ~" L) [( J* Rprint "Useronline Select Error > ";
9 R' i. [5 C7 F1 X}6 C& k! l/ F1 D# P! m/ H; h( n6 w& w
//Count the number of rows = the number of people online
& j! E- v& C0 F' w# w$user = mysql_num_rows($result);
! c% H; Y; a2 J; b//spit out the results
: \, [  ?$ N1 w+ E- Z  z/ Hmysql_close();+ {: ]; O/ C" Z$ z9 I  Z) o
if($user == 1) {
# ]) m( P# ~" M7 S2 y5 \print("1 user online\n");
* P1 R3 O6 r$ d3 w. g3 N) u5 r5 ?} else {
' \* r7 l6 ^, B! T/ xprint("$user users online\n");
* P0 Y  r  x, \3 j' g( u}
* L& |, h0 Y3 o  Y0 O  P?>& {1 D" q2 X& ]/ h+ Q

0 t3 {: k+ o( G; W# }6 M以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
5 {9 M0 b$ [& F+ [, ^( C. X0 `时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. f# {; T6 _. c& ?; L- |
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。7 }/ k' R, t% G/ R* L
当然啦,这两款主机也是相当不错的。5 ?  R- T! ^- E" d8 a. V* R
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
  A2 `( L0 g6 O5 Q* G& k5 {3 {9 E' ?标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 l3 E8 [0 p1 b- W
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ & ?6 I: k7 Y( G3 @7 ]# m
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
1 r! v8 W; ^+ Y3 Z* F自己加QQ去问吧。

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