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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
! q# V; q, ]) M$ o0 `' J- T0 \我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
) J, h' H& n! W% W) s" w7 u, b0 V首先我创建MYSQL数据库表。
9 v8 b+ k# X" Q! y3 LCREATE TABLE tablename (3 z" m# |: p' S) a9 Q0 C; X
field type(max_length) DEFAULT 'default_value' (NOT) NULL
7 W4 b8 v- B6 V. U0 D& @4 y}可以使用的SQL语句。9 i. ^" V, L& b8 [4 @0 G; [5 K  k
CREATE TABLE useronline (
7 x7 @: p( {$ q' Htimestamp int(15) DEFAULT '0' NOT NULL,9 P( i1 C% P3 Y" I  T  y3 `. {7 l
ip varchar(40) NOT NULL,
7 d& T+ z2 o' _1 _! i/ ffile varchar(100) NOT NULL,: n2 N1 e6 }' H/ g
PRIMARY KEY (timestamp),
& S% u9 u" M+ P* A& x! A# LKEY ip (ip),
' a' f$ a" m2 T* H. l9 \) IKEY file (file)
; s- @  l( {* ^+ U3 ]% w( @6 O9 |);下面我们是PHP脚本,首先我定义MYSQL的信息。* o4 o" n1 n( d9 |! r- M' {5 |
$server = "localhost"; //你的服务器
2 R4 e4 t7 {& i2 T5 c% l, [. q+ e6 z$db_user = "root"; //你的mysql的用户名& y& S* J4 C7 H4 `$ \4 q) H
$db_pass = "password"; //你的mysql的密码
/ L7 |4 }% @0 F3 M5 h* V$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
5 g) h) P# u! ?; ]6 C2 H5 Y$timeoutseconds = 300;取当前时间。/ P  j8 f. V+ N% z/ k, D
$timestamp = time();上面的完整代码:
) F5 G6 `- g+ q' F# b8 e<?php
4 W. ~2 l: S, H6 ^9 X+ s$server = "localhost"; //your server& f. I+ i) C4 y, b, T9 I1 g) H" N4 n
$db_user = "root"; //your mysql database username
- R" E( u& e% [- d& t5 T- b$db_pass = "password"; //your mysql database password if any3 A5 ~' W* {( w* E( Y. ?
$database = "users"; //the db name
& M3 n8 E( `7 _' R$timeoutseconds = 300;//timeoutseconds limit
7 G4 V+ e& V& I5 [* B# s9 z6 {3 A& t//get the current time
; [' g7 j. ~: y( N$timestamp = time();3 A2 j2 a$ F6 g: t9 N' T' X0 G
//calculate the lowest timestamp allowed8 d! H" r& e' c5 G* O' b5 s
$timeout = $timestamp-$timeoutseconds;
  u& {# k5 @+ Q( F  Q" t" P?>连接mysql/ c, \' D5 i  S2 [. [
mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
# c. Q( C/ y' S: w7 zmysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
2 s6 d0 s& }8 j6 o3 {5 P% n/ w+ S$ Xmysql_connect($server, $db_user);查询数据库的代码:
" M; V. W( f0 l2 R" L  K) y" Xmysql_db_query('database', 'query');我们只要有访客就要增加一条记录。& u9 a0 Y  L) R% p% {
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" l0 C7 H7 R- X$ F
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
5 ?5 q. g2 _. M/ y7 ]如果用户用错误信息的话,这样处理。
6 j8 I' {1 q* j. rif(!($insert)) {
# P, n! Y) s5 @0 q. m5 x' \print "Useronline Insert Failed > ";5 G- z) V( v/ u# u
}然后实现当超过设置的时间就删除该用户记录。
7 D6 L/ c. M8 g3 Y1 j1 v! w9 b2 z) a+ _$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。" f8 g3 `4 @2 B6 W! x
if(!($delete)) {
  v* p* h( M7 p+ r2 z) \7 Zprint "Useronline Delete Failed > ";# J3 a7 U; @! G6 I$ H( @# K: U
}下面我们解决数据库中不同IP的问题
' Z1 [, s. E! o3 {' d, k: P$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用/ O) @0 j2 p; m
mysql_num_rows(query);来统计用户,代码如下。6 H0 n& B: Z0 j7 M; |
$user = mysql_num_rows($result);最后关闭数据库。
# {/ W0 C5 [' b6 I4 @mysql_close();显示在线的人数。
' K. @$ G, p3 T1 M- b# D) B" mif($user == 1) {
7 ]6 j7 e8 J: ]+ g5 L3 vprint("1 user online\n");
/ w4 l8 u# `8 {5 s* e: t} else {
' b& @  K) b: J0 ?0 `  Hprint("$user users online\n");7 e* J( e) r" a# L: {1 z8 V' v5 U
}最终把上面代码写成一个PHP文件如下。
$ x' |0 [& C8 p: c( K4 U- c<?php
  r6 d" Y6 W: q! {: x7 d2 t7 s//Put your basic server info here
$ M6 f* e; G/ A' J8 g$server = "localhost"; //normally localhost4 A0 _$ k; V) {: g2 s  p8 Z1 s
$db_user = "root"; //your MySQL database username
$ H5 h+ u" r* }/ [* k+ r" o$db_pass = "password"; //your MySQL database password/ e2 ]  e* Q8 u/ Q, j2 [
$database = "users";
, |: F$ d, y0 d8 m& o3 r! C$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably are
+ @" [* ~/ L+ {9 j0 h// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
; v' A& n1 V: Z4 o9 q1 c// $timeoutseconds seconds)% L1 I! L& J' ~1 D) X0 l
//this is where PHP gets the time" b& R" B. k2 O- i' ?
$timestamp = time();
/ [) r7 d( ~0 B' P//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed8 ?  G" p9 G& g% B0 l
$timeout = $timestamp-$timeoutseconds;
' l3 L! a; h2 Y+ ]: l//connect to database
+ g, w& G# T/ y& I1 O# [mysql_connect($server, $db_user);
1 I- J: O3 d# H8 U+ }8 ^4 J" s' b* n//add the timestamp from the user to the online list
7 @/ w6 G* v/ I$insert = mysql_db_query($database, "INSERT INTO useronline VALUES" i5 H" [5 D5 O; @  D1 V6 y& q1 s
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
0 ^$ `9 a( q' J; Tif(!($insert)) {( q2 k& X* d3 D  N( g
print "Useronline Insert Failed > ";
: ^0 y9 Z% n7 v! J}2 K' _5 z# F5 _3 B6 ?/ O7 m
//delete the peoples which haven't been online/active in the last $timeoutseconds seconds.
+ \% j6 j* }. B9 r3 `3 k& s$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
- I* Z; E  T% L% D2 @; p6 J1 fif(!($delete)) {
/ c* W( T0 H8 Z( y  {' Wprint "Useronline Delete Failed > ";
: f" d9 S) J2 T7 z3 O}
4 L  V3 q% l- P. v! q1 q//select the amount of people online, all uniques, which are online on THIS page2 H0 Q. E' T8 Z/ \4 t* L3 {" e
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");
& U% T/ C% s! {% r0 zif(!($result)) {
& t* b2 h  V1 c; G" H/ kprint "Useronline Select Error > ";! c% Q/ P2 Z( Q
}
' z) i! j; L/ e  u. O' y//Count the number of rows = the number of people online! t8 W. X( K( n  G/ l
$user = mysql_num_rows($result);
0 H6 c) z$ @$ Y6 H//spit out the results4 [: ^- q; H3 }+ n2 t
mysql_close();
9 L/ Z1 m7 Z- K1 O& L  v, kif($user == 1) {+ o/ {: T" l0 `* `
print("1 user online\n");
8 v! s+ J( U: X. g1 `3 b& T} else {
: K# _" j: u9 v2 j" o" a6 z3 ^# gprint("$user users online\n");
0 U) k1 \5 c( B( k$ j2 W7 y- Q5 F- V}7 V% E- J2 A, z  ~6 n, |, T. a
?>
& g4 X3 k' R4 d  O3 _3 r/ h5 n
1 v, @' R. f! k2 `以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
4 z2 }( ~  M$ `5 K时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。. {+ i4 a/ M  S9 A- Y  F
我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。
% Q4 s' l) w' \, X$ L4 b9 y当然啦,这两款主机也是相当不错的。( |. e" M; I5 _3 n; Y
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年
& n0 E- B& }: b# M+ ]标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年
5 W7 l7 R& Y7 o# e$ \& [提供一下这个公司的联系方式:请见:http://www.now.cn/vhost/ # a, o. {: `3 c  B1 l, R
空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 http://www.now.cn/callcenter/call.net?LineName=55
# D, U. g; t, z4 L! J  v+ l自己加QQ去问吧。

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