返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!) x; U/ k; q5 g) @1 j& ?/ N
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。, m, i; v& f4 b# x& J' C$ n( x( p
首先我创建MYSQL数据库表。# j7 _+ }6 f$ _" `0 e, e& {
CREATE TABLE tablename (( |! @% D% c. c  f, c
field type(max_length) DEFAULT 'default_value' (NOT) NULL
2 a! `% y* a' A9 Y' L& e}可以使用的SQL语句。
3 Z! e1 R- ^& l, {" ECREATE TABLE useronline (
& @* x8 |) E+ R: ~timestamp int(15) DEFAULT '0' NOT NULL,
, s/ X1 ?+ A3 [+ \ip varchar(40) NOT NULL,
, Z$ e* }- M% Q  l- m, ifile varchar(100) NOT NULL,% z& D3 v+ N; ~0 {1 d$ R
PRIMARY KEY (timestamp),
( d- l# \" Q) {1 P* I9 h; I. j0 ]+ ^! ~KEY ip (ip),! E) y' j6 h+ s& v3 e
KEY file (file)5 ?2 o) J" ~# ^$ Q$ d) Z4 n$ N
);下面我们是PHP脚本,首先我定义MYSQL的信息。( o! O9 f$ R* i' o8 @
$server = "localhost"; //你的服务器' C* b8 ^! P1 v+ J
$db_user = "root"; //你的mysql的用户名+ _' c) y" G9 I
$db_pass = "password"; //你的mysql的密码0 @7 S# V3 u( D/ H5 r. z
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)  I) E/ U# M2 g3 o9 e
$timeoutseconds = 300;取当前时间。$ ?0 z! O' E/ }
$timestamp = time();上面的完整代码:
  @* l- k! ]+ p. ?9 A<?php
( R2 G! J$ J# I9 m( j% @( [+ v3 G$server = "localhost"; //your server' t5 o) q2 t! u
$db_user = "root"; //your mysql database username
! N% ?4 @- K6 r, m- G4 g$db_pass = "password"; //your mysql database password if any( \2 N8 t+ U; Q. i8 `1 Y2 }% G
$database = "users"; //the db name7 {' P" s7 Y* n' V9 P
$timeoutseconds = 300;//timeoutseconds limit
2 c+ d0 w1 W; x//get the current time6 K# d. I' y2 C8 s$ s6 [
$timestamp = time();
; h  Q2 `: i5 h//calculate the lowest timestamp allowed
: T  ?% X# N5 y+ {5 E* ?$timeout = $timestamp-$timeoutseconds;
% S$ o; ]2 F5 t1 N% h" @?>连接mysql
/ z8 `7 v5 ~, i( f- i( ^mysql_connect('localhost', 'username', 'password');也允许使用变量形式。/ Y6 s5 o2 |( d1 f6 u1 @
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接: ~3 A- \, O0 ]
mysql_connect($server, $db_user);查询数据库的代码:
/ m- ]% I- l  q5 Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。- W8 A5 R" v# _! K. B0 @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
( ^* p; Y5 c) a2 e+ c('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");6 o, m" i( {7 T! o) |) v% p
如果用户用错误信息的话,这样处理。
3 g9 X6 j9 Z! _+ k4 vif(!($insert)) {
* v) k- s+ i! K+ ]# t3 [6 j0 }- cprint "Useronline Insert Failed > ";
# T3 |5 U: E3 f1 [9 D. V}然后实现当超过设置的时间就删除该用户记录。
9 f" f, J2 T) a7 n3 H! L4 \$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
4 U) R6 p5 o+ c3 S% b. ~3 qif(!($delete)) {3 k# h* M' h8 w. q
print "Useronline Delete Failed > ";
' f" i) W. U% J5 x8 S5 r% `1 {0 @}下面我们解决数据库中不同IP的问题
2 S1 I4 [7 M: `$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 U1 W! [* s6 T' w7 Z3 Q
mysql_num_rows(query);来统计用户,代码如下。; k: V9 y$ {. r2 U0 j, y0 q' O' V: r' n
$user = mysql_num_rows($result);最后关闭数据库。& u" {- m7 i( f. q" O/ k
mysql_close();显示在线的人数。
& P$ q* j6 w. d" fif($user == 1) {+ t" J! b9 d5 e. y
print("1 user online\n");& J/ D, r* M/ e: O
} else {  P8 P! b# U' r
print("$user users online\n");
! Y& f. b3 D  z}最终把上面代码写成一个PHP文件如下。% [. D& U+ C5 l( A
<?php8 p& ]" _2 b! e* ~0 U
//Put your basic server info here2 {7 `2 H: y( s+ A3 y. p
$server = "localhost"; //normally localhost" y0 t3 |. P8 X" r$ x
$db_user = "root"; //your MySQL database username( y# ^& W! Z! V% ]
$db_pass = "password"; //your MySQL database password7 g9 w: f5 R8 _1 Z
$database = "users";: @8 F6 P0 _4 l5 V
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are6 t6 }, e) @# V* m  Z. W
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
3 z0 I2 i# V3 Y9 I7 o# N) @9 v// $timeoutseconds seconds)$ Y7 a* }6 z' F8 e1 d" y
//this is where PHP gets the time) r! c/ W% g$ A! l7 ?9 z
$timestamp = time();
* d% Y& m4 H6 |8 U/ s! f//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 O) P) ^' W& Y* [' z1 d, x
$timeout = $timestamp-$timeoutseconds;
1 ]$ Y6 w$ c" q3 B' U" w( k7 W3 b4 a//connect to database
( J/ ?" r5 t8 M0 k* |5 R- `. Tmysql_connect($server, $db_user);
- ?7 c/ I# E, Z% q5 g//add the timestamp from the user to the online list
! J8 C, Z5 W* k3 t3 C4 e/ g9 A$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 y: z2 y9 ?" o$ ?' D1 {2 y('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
7 E& j6 v- [5 O' O1 B3 O2 ^if(!($insert)) {
# \  w7 r  f* \: {4 l1 q3 Bprint "Useronline Insert Failed > ";+ P3 @. ~! B  d# q# R5 j
}, g0 F/ b! m4 ?/ b1 m7 A; _! X
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.3 b! |& Z. U: N% Y; `
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
) S5 j1 T' e  Pif(!($delete)) {
+ N2 K8 L0 Q6 l9 }& Z6 sprint "Useronline Delete Failed > ";3 C7 _% \! A% B" [
}
4 m: S) Z. h1 X; @$ I* a+ M//select the amount of people online, all uniques, which are online on THIS page) f9 J8 ?3 \! r4 j, L% L
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");  T: ~( n6 t) y
if(!($result)) {
8 t! R  r9 a. mprint "Useronline Select Error > ";( B# V- Z+ @: @: N
}* c# w, x, A) O0 a( ?5 I2 S0 E
//Count the number of rows = the number of people online
4 Z& J* W- F9 K: r0 @+ m$user = mysql_num_rows($result);
1 Z1 `7 h. m. ?/ A# _' O% i+ R/ v. A//spit out the results
  O2 M/ C/ f! n! u- Nmysql_close();8 I" E5 p  s; `" `* u( H  m+ C0 }
if($user == 1) {6 K. H$ k; {" G( V: y. _# r
print("1 user online\n");
4 e3 _. p/ Z. m- G6 P1 z, z} else {; g+ v2 ^1 W. x: U- P9 u
print("$user users online\n");* e: H, k( U# i$ ~" v' c
}( X3 i/ y5 c6 S0 E, H
?>
% i% r! j9 ^1 N2 o$ o& ~0 [: J  A# m' [, h+ S% e2 s3 ^
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。% _3 x4 d/ K( [5 j/ `& {
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
3 [6 [" _4 z, D2 M* s5 ]我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。0 X, v$ ^6 t7 G
当然啦,这两款主机也是相当不错的。% Y6 y3 d" k8 e- F& H; L
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年( c0 [- h. s: N% U, M& E; w% l) F
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年5 b  c5 |' w9 B. G8 t  D9 z: I- v
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 0 F- {) F. p. |, E4 g
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
9 ~0 _' Y+ I% b9 F6 _- W自己加QQ去问吧。

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