返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
$ U6 v, X2 K0 `) L8 g3 ?- j我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。) H" Z. d! y. R# W
首先我创建MYSQL数据库表。' {$ E# r/ Y0 ^, ~
CREATE TABLE tablename (
) ^! ^- y% o6 T$ \field type(max_length) DEFAULT 'default_value' (NOT) NULL
7 [% P0 s4 x2 W1 X+ ?( F: P}可以使用的SQL语句。
% f) {; F8 @( Z* x9 oCREATE TABLE useronline (( k9 @" m2 H$ m& u
timestamp int(15) DEFAULT '0' NOT NULL,, x6 |: o* c' t5 n* Y
ip varchar(40) NOT NULL,; @! Y6 s" o, q5 D' g5 v. c* z
file varchar(100) NOT NULL,
! X( b+ {5 r# M% }* zPRIMARY KEY (timestamp),; }8 p# v7 V# ^; M0 }
KEY ip (ip),
1 S8 H% y% u/ c+ F5 b3 D. M$ yKEY file (file)" n8 J* r& m% {" W3 c9 {
);下面我们是PHP脚本,首先我定义MYSQL的信息。2 M- {! p0 t7 }4 o$ `
$server = "localhost"; //你的服务器
7 P  }5 Y! ~4 l9 b$db_user = "root"; //你的mysql的用户名
( `$ q1 v: i1 E: B1 J4 L  Z$db_pass = "password"; //你的mysql的密码, ~  q8 A  U" `2 E+ G/ a
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)1 r& b, g. m: O' E" j. q% \
$timeoutseconds = 300;取当前时间。
" u* w1 c! G4 Y  e/ V$timestamp = time();上面的完整代码:
" O5 W$ `/ h" N8 e- q8 N8 J<?php
% c) g+ }& L/ G! I6 d' K5 l$server = "localhost"; //your server
9 j0 K: h" K, K% ~$db_user = "root"; //your mysql database username2 ~2 K3 ^6 ~; K# S# s  @, E
$db_pass = "password"; //your mysql database password if any
' g1 e' N, |4 E+ q$database = "users"; //the db name
+ O; K8 D/ ?5 H6 b$timeoutseconds = 300;//timeoutseconds limit: ^/ z3 a" l, g# h! k6 A
//get the current time5 b0 H. d. C! b
$timestamp = time();
+ }! z3 O$ L' |" U" y( u# j- P//calculate the lowest timestamp allowed& p' x" p+ F* ]
$timeout = $timestamp-$timeoutseconds;/ v0 o: }3 Q- [% d( q( u( o& h6 s* u
?>连接mysql" i3 k6 I1 [5 t7 P3 U
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。! l2 y5 ?2 C) Y. ^! H6 ?* F
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接; e& J& B, G& Y6 [. N. I  s
mysql_connect($server, $db_user);查询数据库的代码:
1 q+ \5 u4 J6 E3 Z! |mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
6 _* j" }/ n8 R, |$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" a) ]' `( ]! _  C' E
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");, G, S  s$ }4 X! [% K" Q
如果用户用错误信息的话,这样处理。
9 M$ ~3 K+ D4 S6 p+ `if(!($insert)) {
* N2 q" ~/ t4 g  w% }% o0 A* K0 Wprint "Useronline Insert Failed > ";! n: I$ L, J2 _% P
}然后实现当超过设置的时间就删除该用户记录。
# }( |' K" y; i( v$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
, a% z0 j+ N% E! u4 |* J# Z" `# hif(!($delete)) {
) e( q& I% s# H4 k* Aprint "Useronline Delete Failed > ";
* C; c- `6 A# D, C0 N0 L* b}下面我们解决数据库中不同IP的问题
. f4 c* K  D) H& f6 A$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
. w7 f: p  T  N& w* a, g. Kmysql_num_rows(query);来统计用户,代码如下。
0 s8 o. r5 S3 v3 x$user = mysql_num_rows($result);最后关闭数据库。
4 _& ]$ C6 C  x' zmysql_close();显示在线的人数。
& o: d3 g# c# b  ~" sif($user == 1) {* a! B7 Y2 B9 `  J1 g0 I) d0 p
print("1 user online\n");
" G# H  X4 t, f4 @6 S+ i$ X. {} else {7 q+ G0 t* T2 H5 k2 F1 ?$ W5 h# y( u
print("$user users online\n");- ?, f6 v0 a: D8 V  l! q. E6 H: r
}最终把上面代码写成一个PHP文件如下。
$ K1 G1 [, u7 `4 h3 k* L* l<?php4 }5 C+ h, P! [  S: I5 n( w* S1 C
//Put your basic server info here3 O1 c3 i+ \" N& _  I; q* e
$server = "localhost"; //normally localhost# J  S) T3 v; Q8 Z
$db_user = "root"; //your MySQL database username7 \3 M- F! w5 O0 ]
$db_pass = "password"; //your MySQL database password) [- w& S& ?9 X. q1 v* N
$database = "users";* T' c9 l3 n: e$ ]+ f
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
3 r3 Y8 ~# j- R- n5 Y// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last! ]: K( ^( x  H* ~: W
// $timeoutseconds seconds)
2 i0 d' a$ S0 s1 Z2 V( \9 g//this is where PHP gets the time% h) S; m$ K: g) l
$timestamp = time();( q- z1 t, W7 M8 Q
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1 C) v, t* x7 P9 u0 @: ?9 Q6 z$timeout = $timestamp-$timeoutseconds;
7 H, g7 i* o3 d4 Y: I) D2 N//connect to database
( V7 U' a( t5 \2 {6 L( i# x# Mmysql_connect($server, $db_user);
6 Q3 w! t3 I" U1 }7 a% u//add the timestamp from the user to the online list: t( r. T6 B- p# l+ W+ e2 v2 f; B
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES+ U3 i8 r! O4 p0 Q7 [
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
  r# ]( G0 t- ]9 x2 Wif(!($insert)) {
0 N9 ?: t' b0 jprint "Useronline Insert Failed > ";( k' J8 \  t' Z' `8 x2 a
}
/ N) }" u6 G9 N. O* N4 w//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
( g! r  d( w) T* y9 E+ z$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");2 o6 x/ ^+ t$ p; z: W
if(!($delete)) {
7 k; g$ J- L0 Kprint "Useronline Delete Failed > ";
$ a# ^. ?+ c& h# L1 Y}
0 g3 f% y- \. O. _3 {7 A' l. w//select the amount of people online, all uniques, which are online on THIS page$ y( v3 r7 I' D8 v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");3 r+ J3 u" U1 X! \. `) u5 E, \' `) Q
if(!($result)) {
  ^/ D* r7 d# M8 i" s% w- nprint "Useronline Select Error > ";9 \/ n# Q3 t2 g
}
/ r: o, W, C3 |) R//Count the number of rows = the number of people online
& [0 U0 o3 k2 i3 \9 G$user = mysql_num_rows($result);
& E! W; E4 t7 n0 R5 Q4 V//spit out the results7 w/ u* g0 K# n& \+ i# W
mysql_close();: g- B& ~1 m2 o2 g
if($user == 1) {" k1 Y. O' [4 \- ?8 p9 F6 H
print("1 user online\n");
+ s/ s6 E5 G& v& M9 Q} else {
7 V- W2 D6 @9 S5 V! ^print("$user users online\n");' A, P$ o2 M: ~  ?- _6 L8 \
}( S0 I, a2 w3 b* i* X
?>  G9 m6 R+ [( y3 G. E: f
  ^, G& m' X7 q' @. V4 i# `; p
以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
* L$ P  {$ {+ C4 J8 o3 ?时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
# ^* h% H3 t* E0 c- V我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。! G9 R3 R: p+ a, L. N
当然啦,这两款主机也是相当不错的。
6 x& \3 J6 e1 \3 P, C* A智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
' F% B0 l  l) U) v标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
  v2 V7 q/ H; n$ q/ Q  X提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/
" T5 B5 o' q$ N6 A" \" ~空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=557 R; ~' ]7 t; F% z' O/ k
自己加QQ去问吧。

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