返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
4 Y  X' Z- ?* X  ~! m, x: T我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' L5 K0 @. k( t
首先我创建MYSQL数据库表。# ~) h) O! _; h
CREATE TABLE tablename (
+ H2 q! n6 j3 C6 Q% V: h, Vfield type(max_length) DEFAULT 'default_value' (NOT) NULL
; H+ V. G. ?) S. K' _}可以使用的SQL语句。3 h2 T8 x# c8 W) T% t; V$ H* F
CREATE TABLE useronline (
' B. t& w3 O6 ]timestamp int(15) DEFAULT '0' NOT NULL,# Q# O% l+ c, E3 F2 B  M
ip varchar(40) NOT NULL," ~% l6 H: a5 M- i  ?7 a+ S
file varchar(100) NOT NULL,
: r: f0 ?; z% I- ^( a, ]3 d" W; QPRIMARY KEY (timestamp),
5 I6 B" E* n. x" B! K  _) FKEY ip (ip),/ V1 Y/ J( S4 l# f9 {4 i' q. D
KEY file (file)
2 @9 v/ @- }' [);下面我们是PHP脚本,首先我定义MYSQL的信息。) i, e- @5 y' H) x  k
$server = "localhost"; //你的服务器4 h9 y' a$ t# R8 `! F3 F0 {
$db_user = "root"; //你的mysql的用户名- a0 K2 r2 G4 K* ^1 I. G
$db_pass = "password"; //你的mysql的密码
+ z# k+ e( x3 {& e$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)7 X) w- x; s% X( n  X( C+ @
$timeoutseconds = 300;取当前时间。
( H* }9 z4 G5 t$timestamp = time();上面的完整代码:/ T2 N6 D/ L4 P8 u& S- T
<?php. {/ O1 s0 K; G4 m$ N
$server = "localhost"; //your server
% ~4 r! a& H4 X  j9 y2 a$db_user = "root"; //your mysql database username/ M5 z; N8 E& b" I; n
$db_pass = "password"; //your mysql database password if any
) {- m$ u; a/ m' T9 ^+ |$database = "users"; //the db name
! ~% J$ \$ {/ G4 Z9 c2 ]4 D$timeoutseconds = 300;//timeoutseconds limit
3 [. g8 _1 v* Y//get the current time) E6 q$ x3 _8 e5 e0 s! Y3 z" c) f
$timestamp = time();9 c/ h* D4 ^. ?2 x
//calculate the lowest timestamp allowed( i+ \+ ]. u% w/ L
$timeout = $timestamp-$timeoutseconds;
* v) ]5 h; n1 d! F/ D. C& d?>连接mysql/ m5 l( n2 U/ s1 Y# E* S
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。+ x2 ?4 {& k' k0 U& E! e& c% Y5 Z# s
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
8 P5 U/ L. ^0 I- b1 ^9 M5 |mysql_connect($server, $db_user);查询数据库的代码:  C4 m" h5 Q4 K8 R2 H
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
( W6 u" Q' k( a9 Y$insert = mysql_db_query($database, "INSERT INTO useronline VALUES# i- {5 G2 Q) o  L7 ^
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
% l: x, A' v* A如果用户用错误信息的话,这样处理。8 x( [8 m( r9 b0 [6 @
if(!($insert)) {
: C% U" T- _, t' Nprint "Useronline Insert Failed > ";! @- L, q3 E9 l: U' y
}然后实现当超过设置的时间就删除该用户记录。$ x* T/ M& `# M
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。0 [5 a5 [! v- u! k8 `4 J0 M' s: R
if(!($delete)) {& f6 i# Q, E. x, ]+ g: f4 P; O7 {
print "Useronline Delete Failed > ";
& N3 B8 `+ V# W* m& `}下面我们解决数据库中不同IP的问题# x3 U# ~) |2 Z2 g# i! l* {
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用6 Z: F% W. A5 P7 a( f* E1 N
mysql_num_rows(query);来统计用户,代码如下。. d% F9 ~1 Q4 D4 r- r
$user = mysql_num_rows($result);最后关闭数据库。. c5 S! O' `3 b, J2 V
mysql_close();显示在线的人数。8 D8 n3 r) g: `% U
if($user == 1) {% F% f" b! V" i
print("1 user online\n");5 |+ e" I! h% O1 ?4 P
} else {8 N) Q/ Q- W* t9 Z
print("$user users online\n");( i; s. c% Z# o3 u5 ?$ p( P
}最终把上面代码写成一个PHP文件如下。
! E7 Y. X4 f9 l<?php; W7 g/ l$ N! G) E0 e* Q  j3 u
//Put your basic server info here
/ P( F5 t, w4 M) g/ A0 i$server = "localhost"; //normally localhost# l/ _2 |) h$ W( U- @, s# y
$db_user = "root"; //your MySQL database username
* h1 M6 [$ h5 ]+ j" Z6 U$db_pass = "password"; //your MySQL database password
" P4 |2 l1 u/ i. l+ N  c# @$database = "users";
) \( }7 z& h6 |. U2 [  A+ B$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
& x% o( |5 X6 w: S// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 l; U4 O- v( A  Q; N
// $timeoutseconds seconds)7 b1 N) M- U) D5 ]7 b5 l
//this is where PHP gets the time# g' |% b# R( R1 t2 x6 j0 S* H# c
$timestamp = time();8 n" w. b3 H" ^
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed- y; U4 [  R  q2 A
$timeout = $timestamp-$timeoutseconds;
. Z6 N- ^4 C$ f8 s/ ^//connect to database
3 F9 \1 A% W7 Z* k7 A8 j7 Ymysql_connect($server, $db_user);
+ U8 Y3 \6 E" D1 `5 v7 D//add the timestamp from the user to the online list
6 `0 C9 I. |/ s$insert = mysql_db_query($database, "INSERT INTO useronline VALUES( d; q3 t  t7 A8 J' J
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3 ~% a  i" a2 L1 \( Yif(!($insert)) {
# x8 A3 a0 ^4 u: T" iprint "Useronline Insert Failed > ";* Z/ e8 _. J) e4 C7 b" l, ~' C2 s8 z
}) N1 V* Q1 a! p* Q6 a7 a
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
: m+ a( e9 x; G6 V* N7 r; V) p$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");* b# b7 m5 S; p8 `
if(!($delete)) {
9 c- G8 ~/ k# Tprint "Useronline Delete Failed > ";
5 r/ u: r& i, B" R' W7 h9 }}
5 }0 w& \/ C, I% ^//select the amount of people online, all uniques, which are online on THIS page4 |3 a" h) _* u6 b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
  Z" I& D2 X' m% a2 a/ Cif(!($result)) {4 B8 {6 a3 `, \7 A0 S/ C, o
print "Useronline Select Error > ";
+ K; U! g& Q9 M5 ~}7 N9 ?" l% E0 w9 \2 |4 r
//Count the number of rows = the number of people online
# Q( z4 b& T( \( f$user = mysql_num_rows($result);
# O! y6 t" t+ V! v' Y2 `//spit out the results
# t! S, a: t  B  ~) U' r& nmysql_close();
4 C& b& N  `& R; b0 o5 lif($user == 1) {+ r/ g7 \3 h. E' z
print("1 user online\n");: l4 e. y! _7 J( |/ x' t; c9 k3 _
} else {9 }" o9 z" G3 z" r, o
print("$user users online\n");" V4 L" u) p& z) O9 w
}
$ U# n3 {. M# w) H* E7 M0 Z?>. L9 u, `' R& J9 Y
5 i6 M, U/ p' Z" V3 c
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。' J. e, y! O; N9 K
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。0 D8 t; S9 |2 p+ A
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。) x% r$ W$ ^  D7 M# S# c+ z0 D% U
当然啦,这两款主机也是相当不错的。
* @; S$ K) H( m& L$ e智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# p9 p" o( |" m$ _- @0 E; n8 j
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
+ i, ?4 r1 m& W7 W提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ 5 r6 G: g( P8 ~) ]  [
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 Y& O1 {& Z- O! W
自己加QQ去问吧。

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