捌玖网络工作室's Archiver

lilcy88 发表于 2008-5-28 10:40

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下!
y,Y,hC w(_,Q] 我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。Rk`8z%^(UNE
首先我创建MYSQL数据库表。
8rML:P)|5l'uX"y9G CREATE TABLE tablename (.n)Y,i;O(y|0Vm"qi:[
field type(max_length) DEFAULT 'default_value' (NOT) NULL5H0rHa2{.J9Uz
}可以使用的SQL语句。p$q8\+@+Kh'CK
CREATE TABLE useronline (&i P!g^ R-E(U0z
timestamp int(15) DEFAULT '0' NOT NULL,/pp6f$hxt#Y
ip varchar(40) NOT NULL,@*kmlgfe
file varchar(100) NOT NULL,A&{fK7n$`o
PRIMARY KEY (timestamp),
_ k(KnOX/]K KEY ip (ip),;ON Y1h9^1]XG
KEY file (file)"m#`{#M.W wT
);下面我们是PHP脚本,首先我定义MYSQL的信息。
$e%]0]/A3{5HHe $server = "localhost"; //你的服务器Lh-cS!px-lDq
$db_user = "root"; //你的mysql的用户名i?p5O^i
$db_pass = "password"; //你的mysql的密码)h%u"p\6`:h$e
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
y5^8{9D(@;H)I $timeoutseconds = 300;取当前时间。$?MuW%V7OrP
$timestamp = time();上面的完整代码:
:JyZ&EOb0K <?php
X4B6Mm;sEu $server = "localhost"; //your server
.fQ5W5f2_j $db_user = "root"; //your mysql database username
V;iz6~}h n $db_pass = "password"; //your mysql database password if anye%U^mKY8Y#j
$database = "users"; //the db name%X5L/@2a(g9Qe7R'k
$timeoutseconds = 300;//timeoutseconds limitA_NQ8CG4V`}
//get the current timew!S*[Pdy
$timestamp = time();;i5wd.U'?#hdR9f
//calculate the lowest timestamp allowed)v1W/B&JR6mv!|CKh
$timeout = $timestamp-$timeoutseconds;
@d0e |m$s[ ?>连接mysql
ep;TAF5|T mysql_connect('localhost', 'username', 'password');也允许使用变量形式。mt2iI;V+dz#w j
mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
D;b`8E ^8b:v K X mysql_connect($server, $db_user);查询数据库的代码:;Gid%gL7c
mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。]an5l:q%J9G{
$insert = mysql_db_query($database, "INSERT INTO useronline VALUES:]xy7PuwZ(a
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')"); dNf\_
如果用户用错误信息的话,这样处理。jv}.Q P2_1f
if(!($insert)) {J.["P:I&Xg
print "Useronline Insert Failed > ";&EI-y R!^
}然后实现当超过设置的时间就删除该用户记录。
/uj w$Jc$p*|'n4D $delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。
p:o-bn|#X ZbK if(!($delete)) {$Uc T3b8z/Ts|#q
print "Useronline Delete Failed > ";
I\r#\!T H }下面我们解决数据库中不同IP的问题UAsda,P3u.wa}q-E+v
$result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
yvZ F~hcj mysql_num_rows(query);来统计用户,代码如下。p_|;Op9rM
$user = mysql_num_rows($result);最后关闭数据库。v(X8`SXp
mysql_close();显示在线的人数。'Du!N~ s)^9Hsz
if($user == 1) {
&h*r.PC3~aJer print("1 user online\n");
a^H c!]&v8t1F } else {k1PH[;H2G_
print("$user users online\n");
\&` om9M-mN3}JoM"F }最终把上面代码写成一个PHP文件如下。
u-d])E3t2a_'kN9Oj <?phpo6QNM X
//Put your basic server info here`T%oG8h ^ |8hB
$server = "localhost"; //normally localhost
`9RK,p JB $db_user = "root"; //your MySQL database username
u*j5sUF6[ $db_pass = "password"; //your MySQL database password
V0^3Po @)a^ $database = "users";
6M-eg U2S1j*jW $timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably area"qS8B R
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last
RI { \k:YEF Ic // $timeoutseconds seconds)
E:H G&u7Nk!c i5~ //this is where PHP gets the timeR|LP9[
$timestamp = time();@s%{9n1D4GaO&X1I
//counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
1F*z w {p*]&])h8S $timeout = $timestamp-$timeoutseconds;(u,oe:c,o
//connect to database#\:\Cvc"U[`
mysql_connect($server, $db_user);-_7zVC@/x f6y @X
//add the timestamp from the user to the online list
rxN0N iW}Um&z $insert = mysql_db_query($database, "INSERT INTO useronline VALUES&Z?K }r3a U
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");
3aEk&u Jd;VS if(!($insert)) {H6ap'? ^dSLi
print "Useronline Insert Failed > ";
0U!cwz\+vIU }
o.smy6zT7[PM //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.6]sIA h
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
aU4}st3b%t,St if(!($delete)) {
X4m0_i'h#V print "Useronline Delete Failed > ";
-f;H)e/juy;T7f iw }!FC D$[/[3g4gA
//select the amount of people online, all uniques, which are online on THIS page
A\n)JHc $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");^'c&@"E2\KKK
if(!($result)) {
H:|#cb4P.W,^0M print "Useronline Select Error > ";
2x&aO o7c:g }ak'I8_/GE$Av V
//Count the number of rows = the number of people online` Z/Xs-Yo~;Q
$user = mysql_num_rows($result); q#V%Ws6W+tte
//spit out the resultsZ@RZ@&^L
mysql_close();K{/CA7jU)tk
if($user == 1) { ?$rbD7EW3g
print("1 user online\n");
P,?VbszR8h DV;y } else {
.qE3y"[ v&\ V)U print("$user users online\n");(U |C:I+fR w0{ o$E
}
M!Vo [G ?> k3ZxH X#PF
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
(^A[,tn#Gg2oUG*F 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。)YoH`'U^
时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
/NX%W"Go-s:zR 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。3o6t]!H#r4AA HP
当然啦,这两款主机也是相当不错的。7w:|'vZR+Q
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年x$qW&th0R3e
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年 t8COl!H@P%y
提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
W$x4Kl qF_q k 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]
L#rbx5x 自己加QQ去问吧。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.