返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!; ~7 h4 |6 e+ d
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。9 m' J+ F% u# @) D- Q/ d) T! o3 f* `
首先我创建MYSQL数据库表。6 s! O& h8 H) g' P
CREATE TABLE tablename (4 C# @- O( K0 e+ j' q/ s3 T
field type(max_length) DEFAULT 'default_value' (NOT) NULL
) C. \' l# w3 \3 z, S- E9 t3 M6 E}可以使用的SQL语句。
  }& }5 h7 [1 j' x$ M% Q. C: iCREATE TABLE useronline (
) r# `0 i- m% @6 I; ~" g! p) y8 vtimestamp int(15) DEFAULT '0' NOT NULL,) t; H! @# n( V  Y6 J- s
ip varchar(40) NOT NULL,4 H2 @* k( T5 [
file varchar(100) NOT NULL,' \0 j+ E1 u8 W4 Z6 n+ o) H- o
PRIMARY KEY (timestamp),! z  `4 B) D' R. ]7 n
KEY ip (ip),. G/ p& A4 H. Q1 f2 j% x
KEY file (file)
6 v& d5 y$ c  o* a, Y) Z);下面我们是PHP脚本,首先我定义MYSQL的信息。6 A; _( q/ |2 R4 h; @' R) D; R- B7 e
$server = "localhost"; //你的服务器
' i8 p3 \5 U, F$db_user = "root"; //你的mysql的用户名
" X) z# K" [7 c$ Z) F$db_pass = "password"; //你的mysql的密码
2 X4 c) o9 W4 P0 ^7 |$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 C" U4 z" f7 w+ J8 J  T4 }. Z2 e5 u
$timeoutseconds = 300;取当前时间。( ?) Z/ q2 [0 d- Q9 H% F4 K! n
$timestamp = time();上面的完整代码:( v  p& V! _9 C& k# _
<?php
) T& j# e* E% Q2 A" [$server = "localhost"; //your server
7 j: m2 S6 N4 l, q; @$ e9 y7 j- s$db_user = "root"; //your mysql database username  A, c) d( p* T9 O( A3 p; y) ]; J& f# \
$db_pass = "password"; //your mysql database password if any0 h! R. \2 |  [
$database = "users"; //the db name, U  p8 O& a5 t
$timeoutseconds = 300;//timeoutseconds limit4 u* U4 G9 o5 t) w# I
//get the current time! O# X9 j( J: P
$timestamp = time();
* u) c, U$ Z8 Z: D  l, {//calculate the lowest timestamp allowed
- c+ ~  I; g5 o4 W) ?2 p0 m$ X$timeout = $timestamp-$timeoutseconds;+ M; P( s' T; G( C
?>连接mysql" z  k; f0 F( I; x; h1 r- U
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
+ r1 B7 g" q% t* W3 e5 n  Umysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接+ ~# e8 ]; V+ t& S! x  P
mysql_connect($server, $db_user);查询数据库的代码:
/ j5 r( t) r% e! C+ w: Zmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
+ r3 C1 t0 T4 d9 u. M, ]" `$insert = mysql_db_query($database, "INSERT INTO useronline VALUES2 h& t' P. t7 \( w. r
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
# ^. W; n; ^9 K! L+ W+ c如果用户用错误信息的话,这样处理。& e( l8 X! T* N9 o
if(!($insert)) {0 e) n+ L3 O% T4 q1 J/ E1 y- [
print "Useronline Insert Failed > ";& T( z( W. ~+ x$ F1 C( d+ W5 t
}然后实现当超过设置的时间就删除该用户记录。2 B$ q% ~, I' `( a0 A' d: [
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
+ I: g* J0 J2 c" [; Q0 Qif(!($delete)) {) ?9 l7 m0 A. {; I, Z, }2 R
print "Useronline Delete Failed > ";
" ?; `- T! X* @3 ~; A) P}下面我们解决数据库中不同IP的问题
* U1 U+ G, N1 U" `( ?/ V& R. g: K$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
- F, X5 p# B5 r, ?' a% P; Dmysql_num_rows(query);来统计用户,代码如下。
1 @" H: I1 k' m- |0 d8 v6 C; @6 b$user = mysql_num_rows($result);最后关闭数据库。) M' T/ h+ g. C9 V
mysql_close();显示在线的人数。
, r" o3 C5 b$ Rif($user == 1) {% T$ a8 u  M5 D6 W3 a
print("1 user online\n");
: t! D; ]; Z1 n} else {
, i" F6 k) |, X3 y" e/ H( J# rprint("$user users online\n");1 {( {- M) L2 S3 ?6 Z0 x- ~, o9 `0 e
}最终把上面代码写成一个PHP文件如下。
2 i4 B; e. z' Z8 p<?php+ n8 a3 r2 k; {" J# E8 H
//Put your basic server info here" Y0 U7 S7 I, `9 T0 X1 F
$server = "localhost"; //normally localhost, b) Q( `" U: j$ C# {5 d) u* G
$db_user = "root"; //your MySQL database username6 O. B; f3 w1 ]  Z- ?: ~/ V
$db_pass = "password"; //your MySQL database password6 S& i4 {  j: R( C. x
$database = "users";
, y* {& g! K9 K1 m/ s$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
" @* [) H. Z: j// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last7 S$ L" [. [1 }8 V$ Z, i  |
// $timeoutseconds seconds)
! X5 c/ y& n% h- }6 f7 N2 m6 i//this is where PHP gets the time8 }9 E; @2 N  Q5 B8 m
$timestamp = time();
( b2 e$ [  I- v; }3 ]//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed5 K! t$ P/ T( C: S* ?* O
$timeout = $timestamp-$timeoutseconds;+ v7 R, b5 h! G5 {- i
//connect to database
5 ?6 D8 b0 w9 ~% K, {' O3 Bmysql_connect($server, $db_user);
2 X# K( n9 l: E7 R2 H6 V6 a" j//add the timestamp from the user to the online list5 \" p/ z$ [9 d  u8 b! X4 {1 h
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
$ f9 O. |0 d* l# w6 s9 Z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% |8 R( p9 T- |. P* b* m& a: Pif(!($insert)) {1 B0 n) R- O+ |3 L) {! _% p. Z
print "Useronline Insert Failed > ";5 c+ N6 l7 j# R5 T7 s# @5 C+ R
}
$ n) W3 u" |- n6 O: t) b1 |7 m//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ t3 I: n: J- F! l
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
4 H7 l8 _, w2 _) k# Q% t* _if(!($delete)) {
6 R: F/ D, f6 i" X0 r, D/ N& ]" f  Aprint "Useronline Delete Failed > ";+ i% X& n" T; R; j; L# T
}6 _5 O- q" s  T7 ?2 A5 v7 D
//select the amount of people online, all uniques, which are online on THIS page) b1 C0 q, X( a/ ^% m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
  D' h& M7 s4 M, s9 U6 ^- I3 zif(!($result)) {
, C: L) v' h9 @1 t/ hprint "Useronline Select Error > ";
. C0 k6 F# m: o6 ]5 u}1 x8 x: f7 H* \1 B8 z/ {
//Count the number of rows = the number of people online
, W. Q9 b% v+ Y$user = mysql_num_rows($result);
( j  |# j3 O$ _7 u* w1 X//spit out the results2 _- E# \3 ?" W6 w0 x
mysql_close();
, d! p5 D  A5 b$ Y$ i; u1 W7 `if($user == 1) {+ q% L- ]$ u: p$ e; G
print("1 user online\n");, ^$ {- W: m6 f. t& ~& K5 q
} else {
& z7 @6 L/ J3 Aprint("$user users online\n");, m9 X  E# m. G! M+ `
}
  b) u2 d, u9 w) j* c?>+ _& X' M+ t+ S& L: y
5 A# m! s( H) {3 u. |+ a% s
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。6 H' o) |$ p  |1 O# r5 [+ e# H8 g
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
4 e/ r8 D  p% Q" S$ E1 W3 f我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。- O- R1 U/ s! Y. ^) K6 H1 E
当然啦,这两款主机也是相当不错的。
5 f( w% F; o9 E6 Q* E' B0 {智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年; t; t! f( |) }
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年; Z2 C1 {& h7 f$ O9 i
提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ % D* C; O- K! ?
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
, x+ L. ~/ ?/ A) s  |+ p自己加QQ去问吧。

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