捌玖网络工作室's Archiver

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

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

刚用PHP写了一个网站在线人数的程序,请大家进来指点下! d9mGM5Oj1?R X
我是用PHP+MYSQL来写的,原理:网站在线人数的程序代码+后台有MYSQL数据库支持,可以直接统计出网站当前的在线人数。
JA;e'A{ \{ 首先我创建MYSQL数据库表。
1D!o5G x` \G%@ CREATE TABLE tablename ("z3^J+vo&?+sV
field type(max_length) DEFAULT 'default_value' (NOT) NULL
h)\r-Fj"K)_:p }可以使用的SQL语句。
!P-M9{I ])GL CREATE TABLE useronline (+P'y:D,w{wA
timestamp int(15) DEFAULT '0' NOT NULL,%C9AD,E$RP5`
ip varchar(40) NOT NULL,
3\?*V7\XT r file varchar(100) NOT NULL,
r W v.e ~%b4} PRIMARY KEY (timestamp),
:h7G9{0Hwj H KEY ip (ip),
tV+V8m \z KEY file (file)4j3d [EAQ
);下面我们是PHP脚本,首先我定义MYSQL的信息。
p&?t~M4O1o4q5m$Mn $server = "localhost"; //你的服务器
5j+N1k.i'}e $db_user = "root"; //你的mysql的用户名
5X[WyF(x4c $db_pass = "password"; //你的mysql的密码;F$ep+RBcA)Aw Y$_7T8\
$database = "users"; //表的名字设置统计的时间(多少秒内在线人数)
:~+D#`| Z?k $timeoutseconds = 300;取当前时间。e/z FetI D]h}
$timestamp = time();上面的完整代码:
/y_{2Sk _fY <?php-z2w$\#C qp&G$J
$server = "localhost"; //your server"VH:[4[$a
$db_user = "root"; //your mysql database username%[ IHzc
$db_pass = "password"; //your mysql database password if any0P-P M6oTnH'n9F
$database = "users"; //the db name ox:qs4S4W9[-N:[
$timeoutseconds = 300;//timeoutseconds limit
+k-h Q-br*e!G //get the current timey6Ey.{b*n1J
$timestamp = time();
#S R1pK.K BfXhw F8_ //calculate the lowest timestamp allowedF!K4fC8Q0_x]
$timeout = $timestamp-$timeoutseconds;&hC+xH%a1C,Vn
?>连接mysql
,Pf J%B o1~v5g mysql_connect('localhost', 'username', 'password');也允许使用变量形式。
i!F$v9Ut)xkc#n~ mysql_connect($server, $db_user, $db_pass);如果mysql数据库没有密码的话可以使用下面代码连接
#u@.C N!VSaL6x U'S mysql_connect($server, $db_user);查询数据库的代码:
.X1~E(j6Q:HL mysql_db_query('database', 'query');我们只要有访客就要增加一条记录。
*B)L+pg$[U Ke(Q $insert = mysql_db_query($database, "INSERT INTO useronline VALUES
2lgY9ZO/LU` ('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");%eb3`|;ru%f-X
如果用户用错误信息的话,这样处理。
`v(MJfkJ-pX-aj` if(!($insert)) {
Z!x\|A[ print "Useronline Insert Failed > ";f[,V$H,N X)s
}然后实现当超过设置的时间就删除该用户记录。r4F[LMT
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");同样给出删除记录出错的处理。g9N!|]~x L-e+TX
if(!($delete)) {
e2x$qJ rY;xR print "Useronline Delete Failed > ";
G+Oc.r`w }下面我们解决数据库中不同IP的问题
(u.d1X5|7Y4T6l8e_8z $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");使用
{h!N1H(b)Jl} E mysql_num_rows(query);来统计用户,代码如下。rT/RC0Jn+M+~op
$user = mysql_num_rows($result);最后关闭数据库。
O'g1~ pY*WZ6C mysql_close();显示在线的人数。
lq|l6N(m if($user == 1) {HDP:`F P2M
print("1 user online\n"); C ~t,|t"jM9L
} else {
:hKM;JW|d_ print("$user users online\n"); |8~-s6Q!a0Yiy*V)^
}最终把上面代码写成一个PHP文件如下。D[8E Ix
<?php bAw*CJj9TVE
//Put your basic server info here
x^P/vtU $server = "localhost"; //normally localhost
{!h:T5_'E9x $db_user = "root"; //your MySQL database username
%]{,yB-up T$B $db_pass = "password"; //your MySQL database passworda&]b'Le_Y
$database = "users";NNb6J)W n$O N
$timeoutseconds = 300; //it will delete all people which haven't refreshed(so probbably areO8i{9P"o9S
// offline or inactive) in $timieoutseconds time (so it actually checks the people that are active in the last M(lhOR sW6q
// $timeoutseconds seconds)s~n8s#bdl[
//this is where PHP gets the timeio2|9o)[d R|
$timestamp = time();
$y5C tMH //counts the timeout, all people which have been seen last online in earlier than this timestamp, will get removed
EC$[t2oGw9e $timeout = $timestamp-$timeoutseconds;.N1H?^h9m%t6rWY
//connect to database3o)m/lC*dg~@$G
mysql_connect($server, $db_user);)Pr0mqyK nm)o1~
//add the timestamp from the user to the online list
,E Rb"R2\Qj $insert = mysql_db_query($database, "INSERT INTO useronline VALUESuJB$Jp;C
('$timestamp','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['PHP_SELF']."')");,w&m|)Zmb
if(!($insert)) {
sC-O n.y[ print "Useronline Insert Failed > ";1I$G}%w~ |$`
}
1w$@Zq,V.`:b //delete the peoples which haven't been online/active in the last $timeoutseconds seconds.0sb+@!T,v8X
$delete = mysql_db_query($database, "DELETE FROM useronline WHERE timestamp<$timeout");
f0I\NiyRW if(!($delete)) {
4O'rm&y Q'nZ]!KCv print "Useronline Delete Failed > ";
&B U8vy2s9yW Cm }SSF0t.vy&i/o
//select the amount of people online, all uniques, which are online on THIS page
.O BN1m:[ $result = mysql_db_query($database, "SELECT DISTINCT ip FROM useronline WHERE file='".$_SERVER['PHP_SELF']."' ");j2b&pJ:OD/?
if(!($result)) {
A LDiM(S@{V!I t print "Useronline Select Error > ";
J1b+Uh&i A \Uk/`I }GW#n*W/Mp&jgd5j
//Count the number of rows = the number of people online
u-j"q/feW $user = mysql_num_rows($result);
&x'iQ(CsF \c //spit out the results5z8b)G9_6PuO;Sq$C
mysql_close();
4m"v/OpL!eU x:` if($user == 1) {*IhA4^*q2m
print("1 user online\n");,@9U @o+C+[8v0CM
} else {
pDcJH$TS#l print("$user users online\n");G9UZ0m/k3g#H1H+m _
}
^Y+h ]4fWI ?>8{r5JY~8R)Q
[url=http://www.now.cn/vhost/][img]http://b.todayisp.com/bbs/760x90h.gif[/img][/url]
HK?NF;tw&\;R 以上代码我是在时代互联提供的免费试用主机上测试的,感觉效果还不错,性能很稳定,不信的话你也可以去试试。当然,记得指出我这个程序中的不足先哦。
[-la`p;lblJJ 时代互联是行业内最早开始提供PHP 虚拟主机的公司之一,现在已经是的金牌域名注册商和中国互联网客户满意度十佳单位,产品功能已经非常完善 ,特别提一下几个特有用的功能:数据库自动备份、免费集成繁简通简装版、多域名绑定、多子网站支持、GCDN 网站加速器、镜像加速、高级访问统计系统、支持WAP、可选电信/网通/香港机房。
d`5z"Q#v QI 我之前建站的时候选的是他们公司标准商务E型,因为这款机型还特别支持ASP.NET3.5(3.0/2.0/1.1)/ASP。9]!HN'D;xj(}
当然啦,这两款主机也是相当不错的。b pL4O\\uU/r4|
智强商务B型:Unix /Linux 操作系统+独立网页空间1000MB+送1000MB邮局空间+100MB MySQL数据库空间=1869元/年 qEw q*gR0J%JJ
标准商务B型:Unix /Linux 操作系统+独立网页空间500MB+送800MB邮局空间+60MB MySQL数据库空间=1365元/年6N/|[ b2j#n@WY,a
提供一下这个公司的联系方式:请见:[url=http://www.now.cn/vhost/]http://www.now.cn/vhost/[/url]
9{ [m T%_#O%Cw 空间专线: 0756-2623871  QQ:168075865,好象还有全球免费网络电话:全球免费咨询电话 [url=http://www.now.cn/callcenter/call.net?LineName=55]http://www.now.cn/callcenter/call.net?LineName=55[/url]\{.U+?5e8t
自己加QQ去问吧。

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


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