返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!$ F" F, j# Z. f/ _8 o
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。; H, e, z, O( r8 N/ f+ w6 r
首先我创建MYSQL数据库表。+ `: B0 B1 Y3 J3 `  Y
CREATE TABLE tablename (0 e& r& ?9 W2 d7 H2 ^
field type(max_length) DEFAULT 'default_value' (NOT) NULL2 S5 O- E4 r* r0 [9 k5 W' M
}可以使用的SQL语句。
( I9 X! S8 S5 |# aCREATE TABLE useronline (
% B) R7 G) [4 V  P# q. X* Ktimestamp int(15) DEFAULT '0' NOT NULL,
7 ?" K* h+ c1 k. Bip varchar(40) NOT NULL,& R1 q7 h0 A- j- S! q! C+ [1 o
file varchar(100) NOT NULL,9 P* l3 y! O2 N# i+ R
PRIMARY KEY (timestamp),; w8 N% v* D6 n$ V' n* R
KEY ip (ip),
# E6 m  m2 U* o$ `; k$ o2 I) [KEY file (file)
- @& O0 z/ _! ~9 ?);下面我们是PHP脚本,首先我定义MYSQL的信息。
; r4 V; u3 J6 e1 ]! P6 t$server = "localhost"; //你的服务器
) }6 Z8 Q/ n7 X9 b$ u$db_user = "root"; //你的mysql的用户名
: }3 a  t2 {8 R6 Z: @$db_pass = "password"; //你的mysql的密码
6 r* p  V. E0 g& ~9 x1 G% K* A$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)) Z' a9 I- }. y% {) B% T& K
$timeoutseconds = 300;取当前时间。; G1 h% y8 n: ]8 K. @+ {
$timestamp = time();上面的完整代码:
3 z* g3 C  E! b& y1 J4 R8 }<?php
* h- L; u- A2 {, w+ c3 W$server = "localhost"; //your server6 p  B7 V7 @8 }
$db_user = "root"; //your mysql database username
# ~* b5 X$ c0 O3 e$db_pass = "password"; //your mysql database password if any
8 P# ~9 L" `& G$database = "users"; //the db name
" m' c' {1 z0 ]$ K6 f+ [8 o1 x$timeoutseconds = 300;//timeoutseconds limit% D9 r6 @( e: {8 H2 K- U# T
//get the current time, |, O/ x" r) J& {  j
$timestamp = time();
4 r; ?; Y1 S; f2 h//calculate the lowest timestamp allowed: G6 q# B; B! n9 ]  C5 I
$timeout = $timestamp-$timeoutseconds;! R+ [$ V* @( y
?>连接mysql
! ]8 C: @! Y9 S. a+ A5 t! gmysql_connect('localhost', 'username', 'password');也允许使用变量形式。4 d1 A7 v9 Y& }% n- v1 d
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
, q3 Q/ e/ K, M! s3 E/ |4 kmysql_connect($server, $db_user);查询数据库的代码:* l% u8 u4 Y; q% w/ o3 l0 Z
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。# s* x# E) f) @3 x' B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES* W/ ]7 ~6 \$ _: p( o
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");& Y! v0 v9 E8 W# m5 `6 B/ h
如果用户用错误信息的话,这样处理。
& a6 X+ A4 q" \& o7 ~5 yif(!($insert)) {& X7 V& j* O$ i, E
print "Useronline Insert Failed > ";
8 H" U. N0 q/ h1 \: U}然后实现当超过设置的时间就删除该用户记录。. r3 M* q6 g- p# u- a# u% `' c; Z
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, Q4 F, Q% }+ [  c' x0 y; Iif(!($delete)) {
/ ?6 _  f5 C; S4 ~print "Useronline Delete Failed > ";% p5 r8 ^0 v' X* _$ ]  b
}下面我们解决数据库中不同IP的问题
! A  t" V7 ^+ Z3 b5 [$ o+ E" `$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
! p8 }, f" B+ E0 B' mmysql_num_rows(query);来统计用户,代码如下。
+ W2 H+ M2 J/ F; l8 I) N. z* F$user = mysql_num_rows($result);最后关闭数据库。
# T7 v7 S- ^, h" t) W) E; X% ]mysql_close();显示在线的人数。
0 C) D4 l0 }' z) ]9 e7 ^if($user == 1) {; C/ R& s: I4 \0 K2 j
print("1 user online\n");1 E$ V  N# d1 U% \; ^1 O. o6 x  }
} else {- f5 |! Y0 {. f) C
print("$user users online\n");0 ^1 j# Z: E6 o$ C
}最终把上面代码写成一个PHP文件如下。: v4 [) R, W5 W$ w" Q, B2 O1 y
<?php/ I6 n# o- C: R, X3 c6 l: n/ ~) _
//Put your basic server info here5 m. G) ]$ H9 R. O/ K; a/ E
$server = "localhost"; //normally localhost+ X& O4 d( D8 Q  m- ?5 }+ F1 F
$db_user = "root"; //your MySQL database username& c* K* h4 ~* w, J
$db_pass = "password"; //your MySQL database password
$ g  |. x( ?; \8 @4 l8 N0 X$database = "users";
, b# O2 L, ~  H: n. m0 n* d$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are& C: W& Z7 t6 Q! C$ ?1 E
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last4 n6 o/ X; s5 g0 T6 N4 s/ q1 }
// $timeoutseconds seconds)8 d- G3 [+ Z+ c. f& C9 k7 j
//this is where PHP gets the time
$ M- i# W$ S5 I4 W) `- i. M/ g" |$timestamp = time();( y/ J9 ]- v$ ^1 j, O
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed0 @9 M  i4 o3 u  o; g9 M7 s
$timeout = $timestamp-$timeoutseconds;
* _8 S7 d7 n+ e1 M//connect to database
( k3 j' ~4 Z: B" }mysql_connect($server, $db_user);, e! {4 c0 W) V& m$ T
//add the timestamp from the user to the online list, Q# f) O  y  W0 N/ @
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
6 I, Y; P* j/ n5 B  h+ j('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");+ X; h( q. I5 k+ l3 J
if(!($insert)) {8 K+ E5 c' G/ U
print "Useronline Insert Failed > ";  e) O3 W7 ~2 B
}& a) T+ h. D5 ^( ?/ M! b; p5 I1 G; i
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6 O- M. j* B$ R$ r! H  |1 P
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
8 p5 ]$ k( r4 }! b3 U  Aif(!($delete)) {: U; f4 C" G( _5 x( s- C% |
print "Useronline Delete Failed > ";
2 ^2 ?0 _  a( l}
5 s* v& b# g! ~" j0 g2 ~; |//select the amount of people online, all uniques, which are online on THIS page
" g; d8 d5 W2 y- L6 ?$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");( J' A% h: p- y" L0 F) S! m! ]# H
if(!($result)) {
& M& Y% J  T8 _$ a# X; p  D1 j. Dprint "Useronline Select Error > ";" o& A. |+ _  ^
}
2 a' ]7 T2 b% e/ j  z- e3 T( b6 S//Count the number of rows = the number of people online4 F7 k8 O+ }1 A* \8 t5 O
$user = mysql_num_rows($result);' m; T' d( ~+ C7 j+ X* Q) B
//spit out the results; q, H0 H9 ~. S* ]! j
mysql_close();
' j, E4 u. s1 Wif($user == 1) {
' o; M  Z2 r' I: F7 c/ Vprint("1 user online\n");
( @: Z9 `# A4 x9 |} else {
- b1 ^% M0 r4 ?2 }; q  [- Pprint("$user users online\n");6 c! e: K# c( r( ]; H" y4 S
}
. w! ^1 M9 E; \0 i7 \7 L4 {?>
) w4 O/ S7 c- ]! @4 S5 t5 J/ g% c
( T4 N) A" @, Z; ]以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。' Q1 {$ e# N  h( g9 ]/ U! H5 W' t
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。& v) _. F( a& D- t0 ]
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。  D* c6 m: d4 p, J! h1 E. h' Y, H
当然啦,这两款主机也是相当不错的。/ o* O! k; a5 w$ e/ X' F
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年# D. v  v2 G# r
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
4 M8 }' i0 g+ h. t8 h提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
; R! ?; l% b; s: \6 D; J空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=554 t! g- Z) N8 r1 |7 d
自己加QQ去问吧。

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