返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!1 s5 x8 J8 K$ ]
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。' j; b1 B9 }- d4 b& V9 ?  \
首先我创建MYSQL数据库表。0 g, H7 m1 X, j
CREATE TABLE tablename (  t9 X* C9 Q: Q' ~" R
field type(max_length) DEFAULT 'default_value' (NOT) NULL4 i( g; t) @" r( o7 T7 O# |
}可以使用的SQL语句。" @: ?* M' u  g, ]; K) u+ @
CREATE TABLE useronline (
( g5 v7 o7 V* U' e+ Htimestamp int(15) DEFAULT '0' NOT NULL,
. U; e; f  y/ m- pip varchar(40) NOT NULL,
2 T% u  {) Q6 mfile varchar(100) NOT NULL,# P+ }, L  h( ?# R* @% |
PRIMARY KEY (timestamp),) e" n' m9 g+ t# H3 F* S7 p# g
KEY ip (ip),
( s0 S1 ]# F/ @+ N$ F- zKEY file (file)% g9 r* {9 U, k/ |4 Y
);下面我们是PHP脚本,首先我定义MYSQL的信息。
: W, X* P) Z# x1 f0 l6 C9 U! k" s$server = "localhost"; //你的服务器3 @  u) Z6 k; ]3 H+ @
$db_user = "root"; //你的mysql的用户名
% N$ W0 M0 O6 D+ u$db_pass = "password"; //你的mysql的密码
0 y6 w5 `3 o6 r( {) U. G/ m$database = "users"; //表的名字设置统计的时间(多少秒内在线人数): g5 c; k: Y  S- r3 d8 t* {
$timeoutseconds = 300;取当前时间。' M3 ?3 Q. r& `4 k8 H1 I
$timestamp = time();上面的完整代码:, F% n5 ]+ `' d% \$ H6 |! \
<?php$ _& A1 h! F6 s( f7 g+ ?
$server = "localhost"; //your server1 Y9 b- y6 u  n8 o. t/ L: ~* d
$db_user = "root"; //your mysql database username) t2 f. f% J% J# s2 |4 @# ~  n
$db_pass = "password"; //your mysql database password if any" J" a9 B- G& z! r- U& _' n
$database = "users"; //the db name' b8 X" b0 ~4 H7 Z0 r3 Q5 k
$timeoutseconds = 300;//timeoutseconds limit
9 L" \' u  c1 u) L0 g//get the current time$ u% X% ~+ D3 S3 ?- {
$timestamp = time();' C- z+ \) @- e) S; w* `
//calculate the lowest timestamp allowed
  F' ^, n. v- S. g. s5 s/ N$timeout = $timestamp-$timeoutseconds;
9 Z0 _7 {  d2 m6 s4 r?>连接mysql
# Q9 t) Q' F& b( T+ j* R  J) smysql_connect('localhost', 'username', 'password');也允许使用变量形式。6 [' O1 T( a5 |% a& }5 u# m) F
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接. d( N! H/ o4 H! K
mysql_connect($server, $db_user);查询数据库的代码:$ ?  v$ W+ |( }! c2 F
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
7 V3 p6 `6 u6 E; I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES0 w5 `) w. L2 N- f- l* G
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");: x1 R" [3 `( T8 R. X: P
如果用户用错误信息的话,这样处理。
! F( j* [6 D5 ^6 oif(!($insert)) {
2 Q# m: x: m8 @. {) ]2 Eprint "Useronline Insert Failed > ";9 m; X) \7 D* P9 r5 ?
}然后实现当超过设置的时间就删除该用户记录。5 I" Q( C$ J3 C- n5 R9 g
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, `. x& @! ]+ c, Pif(!($delete)) {. w3 A8 }5 S9 u/ ~" e, s
print "Useronline Delete Failed > ";
6 c- j9 a, y3 w! j0 @$ P}下面我们解决数据库中不同IP的问题
# z& M/ L8 q8 d; [$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
6 O8 R( @8 I, U& xmysql_num_rows(query);来统计用户,代码如下。# R) `2 j) [1 X
$user = mysql_num_rows($result);最后关闭数据库。
( S& q9 F2 u/ }: m; wmysql_close();显示在线的人数。- @" I  P' D! B
if($user == 1) {
* Z  D) C: c4 e( jprint("1 user online\n");
3 D8 k; I  N7 ?0 x} else {
" U8 B4 a* m& P4 Eprint("$user users online\n");1 ]3 L  g; f; a, Y
}最终把上面代码写成一个PHP文件如下。
' r. @) J4 w6 f7 y' I4 h- {<?php
# t$ m3 Y; i4 l1 S//Put your basic server info here, Y# ]1 _1 }) C: u+ V- G
$server = "localhost"; //normally localhost
7 ^' p# u" G3 g  n$db_user = "root"; //your MySQL database username3 h# b( l2 Z  u2 i- ]- T# t2 j0 v- P% F
$db_pass = "password"; //your MySQL database password" y) j' @) Q( E6 r. @- A
$database = "users";* o6 W+ R% G% ]# d
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are- j0 Y+ o+ k' ~5 O8 y6 I
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
  P9 a2 S# _) Q1 F// $timeoutseconds seconds)
; Y" h! K' R& L; v: f3 Y//this is where PHP gets the time
+ Y4 d8 M/ H* A- t1 e$timestamp = time();" M! A7 ]' _/ U4 E  L# F
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
* q8 D8 S2 p1 A1 ?, L) [3 b% |% A$timeout = $timestamp-$timeoutseconds;5 t, L7 W: ]+ B2 X. ^9 |3 d* Z. J
//connect to database
* |) Z' H4 I5 y7 _8 }mysql_connect($server, $db_user);  x0 t+ k0 z% j1 z5 a
//add the timestamp from the user to the online list4 [+ T+ Y  S, L5 O! o0 g" X, F3 G
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
7 ]" ~" _* i( P('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");2 Z* _2 O2 r' b, I9 x
if(!($insert)) {
1 a9 S$ [- v6 y% Mprint "Useronline Insert Failed > ";
' k# [( i/ r( `}+ k: i/ n1 q, w$ [/ E
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
7 W% J' D7 O8 p+ L( b7 D5 X$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
2 t# F; C. n4 m& \/ f1 Vif(!($delete)) {
, u) l6 `. r; E- ?6 r4 C8 U, Yprint "Useronline Delete Failed > ";6 [1 q! s) N: n& v2 d3 L, V
}/ W9 w0 R* d3 ]1 b- u
//select the amount of people online, all uniques, which are online on THIS page9 s" U" j# b4 [
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");2 K  _( s3 x5 c; \& p6 U
if(!($result)) {
2 ?. p. m. P& u! ?print "Useronline Select Error > ";# T- {& @8 y: D% G6 t
}& ]5 }% ~- c- x, p
//Count the number of rows = the number of people online
' W& {4 b% m) q3 e$ k( t$user = mysql_num_rows($result);# J" Y) X  Y8 n- T$ K
//spit out the results
( @  u/ F1 n5 Z: ^mysql_close();0 G$ ]2 \( J- n0 c
if($user == 1) {
. ^, \+ U3 I6 C  t, L# gprint("1 user online\n");! O) B8 E5 B: |: Y4 n
} else {' Y3 R/ A( \/ y9 L( Z
print("$user users online\n");) V; y8 X) a2 B/ m! U* o
}
" @: }* a# U& a( J( Y0 l$ l?>1 w) Z8 k9 \+ T8 ~2 ~  R; D

5 D3 ^2 s6 ^5 g以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
" c+ [9 V2 e6 E1 w$ I( X时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
; l$ g/ b0 C5 S0 t7 [( d% r我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
' A: u) V6 q- X( H3 P' S; T2 R% z" o当然啦,这两款主机也是相当不错的。
3 k# X' v/ W& X  x智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
- a) e) t0 a% S8 \7 O标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
! P9 S$ I1 W  U  v3 Y提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
- Y. ?" e% b% ~# A空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=555 H* U) Y0 x+ Y" t7 z; t+ k) I
自己加QQ去问吧。

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