获得本站免费赞助空间请点这里
返回列表 发帖

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!! t4 t( d' H+ |; F2 P. H1 i" g. t
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。/ Z: H  H' ^" M  t: R
首先我创建MYSQL数据库表。3 r2 p1 z. f2 y6 a
CREATE TABLE tablename (
* p& i0 Y9 I' N) d$ l4 n  D/ {field type(max_length) DEFAULT 'default_value' (NOT) NULL
& s# t/ R% R3 \- d* v# H}可以使用的SQL语句。) N6 K# `) F7 M# M
CREATE TABLE useronline (4 F3 B: b. l5 k
timestamp int(15) DEFAULT '0' NOT NULL,
5 [8 O) I+ T$ sip varchar(40) NOT NULL,
% p/ C: D+ t$ g: k% e% A% ifile varchar(100) NOT NULL,
4 V/ C$ P9 @; J! ?1 ~7 RPRIMARY KEY (timestamp),
7 M9 }6 k( \( `- V4 BKEY ip (ip),
5 N( b! P+ h8 l, SKEY file (file)$ P+ F/ O7 Z, O
);下面我们是PHP脚本,首先我定义MYSQL的信息。
& E$ t  w5 ]* V# c' _$server = "localhost"; //你的服务器% U0 a% F/ R" v6 y2 W+ V
$db_user = "root"; //你的mysql的用户名: G4 b/ R; y( \
$db_pass = "password"; //你的mysql的密码
2 p$ H( @3 t  v2 C; L+ F1 b$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
# @) {: }" E2 g5 z8 m. E$timeoutseconds = 300;取当前时间。. d" K' z# I/ |
$timestamp = time();上面的完整代码:/ y+ w  S# e4 F1 y! E2 c* B  F
<?php2 ]$ m$ e! r$ M( ^, p
$server = "localhost"; //your server) v  y2 G% k. R
$db_user = "root"; //your mysql database username" R8 a& W5 a) p- l
$db_pass = "password"; //your mysql database password if any
5 Z& K" D6 b5 Z( J6 ]$database = "users"; //the db name8 t: y3 R7 @. U) A2 B6 O
$timeoutseconds = 300;//timeoutseconds limit( h; s3 |* j4 F! e7 s2 t
//get the current time9 F- s3 g0 F6 V2 h" H4 q- c
$timestamp = time();& }3 P1 r& G! d
//calculate the lowest timestamp allowed
) ?* l2 l( S. b1 l$timeout = $timestamp-$timeoutseconds;
9 B- v- g+ H  l6 [# h0 |  c8 l  d?>连接mysql
- p% \8 N& c, L, O0 ^$ omysql_connect('localhost', 'username', 'password');也允许使用变量形式。
! f" T( k; p5 V+ y% \- wmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接4 p- z  M8 n; w  [" [0 V
mysql_connect($server, $db_user);查询数据库的代码:
* y. f: F% M/ tmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
4 M7 z3 A" x+ g. B4 `; t$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
* q  r  D& A% i7 g3 v('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");9 J( V* J) F+ K( m3 L
如果用户用错误信息的话,这样处理。
. D6 [, U# {: b; c0 Aif(!($insert)) {
7 N; n8 U! n; M4 l' Mprint "Useronline Insert Failed > ";
7 l( E- |; a* s5 h}然后实现当超过设置的时间就删除该用户记录。. j# Y; P8 r: t$ e
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。/ n  {7 m5 \; }6 x2 z
if(!($delete)) {
$ Q3 k1 V" m* u- ^4 h. Z( L; Qprint "Useronline Delete Failed > ";& D0 |. {1 o% O  d4 q7 L" h( v% e
}下面我们解决数据库中不同IP的问题3 \* e5 l7 g% H! T8 m
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用) r7 |3 c/ F- t" w$ v
mysql_num_rows(query);来统计用户,代码如下。% u6 Y$ {, \, O. [' G5 r' I
$user = mysql_num_rows($result);最后关闭数据库。9 z5 a1 g2 t1 F, O1 V" b
mysql_close();显示在线的人数。
# k% N! q& F5 u: Kif($user == 1) {
# E# z+ e, O0 D% b2 \print("1 user online\n");
% V+ P$ ?% G8 P. g/ @; R% F} else {
" s$ a3 N$ M1 {- fprint("$user users online\n");0 q; f) f2 h+ a
}最终把上面代码写成一个PHP文件如下。
6 ?" b( f5 G" ^% @, q* h<?php
. X3 h3 P" Q! G' v( d. i! j//Put your basic server info here. p8 I) O- N' `6 s, T7 Q2 Q4 Q
$server = "localhost"; //normally localhost; n/ \, g& g/ |/ C4 v2 `, B
$db_user = "root"; //your MySQL database username
. x8 {9 r9 N( r, {1 B: |$db_pass = "password"; //your MySQL database password2 {1 i7 I& j; ~7 @& M: n9 T
$database = "users";
0 f7 w) x. `/ P5 V. J/ {& l6 Z3 R/ O$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
! p7 Z. o- {) n// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last/ G# {  f7 _4 P, C8 }
// $timeoutseconds seconds)8 T- A( n+ r, J
//this is where PHP gets the time% t0 u7 D; e: Y6 x6 M. Z7 H
$timestamp = time();
( |4 ?# Z! Q" R6 r, t8 d1 h! a9 W//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
  R( Z! G, F0 m1 d/ L$timeout = $timestamp-$timeoutseconds;/ @, q* {% `. E7 B$ c/ k0 M
//connect to database
/ }# K. B+ i% H3 I/ e& m1 v: |, Qmysql_connect($server, $db_user);
) N& w& S, k6 e/ ~& {% @7 y* n$ ^6 s//add the timestamp from the user to the online list
( Y( Z4 r2 _  z' T  p. |$insert = mysql_db_query($database, "INSERT INTO useronline VALUES
3 E% _% v( R2 |$ J: Z('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");% `- k# ^  R7 }. G
if(!($insert)) {
# o4 E6 p2 Y7 fprint "Useronline Insert Failed > ";
7 J+ `2 }  K  C& j% G9 m}
* [8 O% c' F6 X//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.$ }* N" l2 _" T* s' L8 o' B
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
0 J: H/ r+ Z+ D# B! A6 E/ Gif(!($delete)) {2 {  X; G6 ?+ {! A$ U
print "Useronline Delete Failed > ";4 l- G& ^7 C" p: N
}
* a: t3 h* V2 u0 ]//select the amount of people online, all uniques, which are online on THIS page6 V3 n  f! A' n: F5 C+ l# b
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");8 y) v/ |/ W6 g" g. b, Y6 F7 T
if(!($result)) {8 P& }) Q4 L1 k* Y# Z) Q3 W
print "Useronline Select Error > ";
. \! T) C/ x8 @}
: u. {" I" W, o7 W! k1 |: s//Count the number of rows = the number of people online6 k4 L3 U5 M+ w& e- T+ {/ K2 E1 }0 b
$user = mysql_num_rows($result);
! R3 S1 I6 o* A  Z//spit out the results& e+ ~6 b8 l/ y) b( P
mysql_close();
- S1 G( L) K, L0 T# E* B) Bif($user == 1) {1 P$ ^$ w1 H. h
print("1 user online\n");
+ A( v' o6 k* u* x' [} else {
) E% V  x$ j: G. _print("$user users online\n");
( x1 W, k0 z$ q4 z  Y}
5 u1 z- G, U! ]  k+ I2 T?>
5 j0 J. N9 e" H7 }2 f( Q% F
$ d# f% d) k1 |# K' E* R以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。+ R' w6 o, Q* ]0 K- h
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。6 {% a$ n( \. q/ O$ M: y
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。* ]* E/ ^# |, e+ _5 c! p) \
当然啦,这两款主机也是相当不错的。& v; J' t% |" ]# t6 p) p, [3 K
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
, z- c% R: E% z% `' n标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
" M6 |2 }8 }$ ?3 a- \& [! N提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ ! Q* z5 t) N' I* m' I% z
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55# S, H* F6 u; Z
自己加QQ去问吧。

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