大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> CGI专区 -> CGI教学:第三章 计数器的编写方法

CGI教学:第三章 计数器的编写方法

时间: 2021-07-31 作者:daque

一、记载(log)文献1、grep2、page-stats3、wusage二、创造本人的计数器1、运用dbm文献2、文本文献3、文献锁定4、输入计数截止5、www homepage access counter6、运用gd图形库计数器(access counter)不妨记载网页被考察的度数,在万维网上的运用格外一致,其编写本领很多,节俭单的ssi吩咐到用cgi步调天生内嵌图像等。计数器除去记载点击度数外,还不妨记载考察者的ip、os、欣赏器典型等实质,使你对本人网站的考察情景有个所有的领会,本章重要引见点击度数的统计和表露本领。一、记载(log)文献1、grep对于web效劳器而言,都有记载文献记载着精细的考察消息,其称呼常常为access_log,底下是一个例子:01: dialup-9.austin.io.com - - [02/oct/1995:20:18:05 -0500] "get /phoenix/ http/1.0" 200 233002: crossnet.org - - [08/oct/1995:19:56:45 -0500] "head / http/1.0" 200 003: dialup-2.austin.io.com - - [09/oct/1995:07:54:56 -0500] "get /leading-rein/orders http/1.0" 401 -04: onramp1-9.onr.com - - [10/oct/1995:11:11:40 -0500] "get / http/1.0" 200 152905: onramp1-9.onr.com - - [10/oct/1995:11:11:43 -0500] "get /accn.jpg http/1.0" 200 2034206: onramp1-9.onr.com - - [10/oct/1995:11:11:46 -0500] "get /home.gif http/1.0" 200 133107: dialup-3.austin.io.com - - [12/oct/1995:08:04:27 -0500] "get /cgi-bin/env.cgi?08: savedname=+&first+name=eric&last+name=herrmann&street=&city=&state=&09: zip=&phone+number=%28999%29+999-9999+&email+address=&10: simple=+submit+registration+ http/1.0" 200 126111: dialup-20.austin.io.com - - [14/oct/1995:16:40:04 -0500] "get /leading-rein/index.cgi?unique_id=9658-199.170.89.58-813706781 http/1.0" 200 1109 注;当网页在srm.conf中被定名为welcome.html、index.cgi、index.shtml等时,对其的考察记载,大概只含有目次名而不包括该文献名。咱们不妨用unix吩咐grep来统计网页被考察的度数,grep吩咐常常输入每一条龙配合截止,但不妨加上参数-c以输入配合行的数量,grep详见unix扶助。底下是一个大略的例子grep.cgi:1: #!/usr/local/bin/perl2: print "content-type: text/html\n\n";3: $num = `grep -c 'get / http' /your-server-root/logs/access_log` ;4: $num += `grep -c 'get /index.shtml' /your-server-root/logs/access_log` ;5: $num += `grep -c 'get /index.html' /your-server-root /logs/access_log` ;6: print "$num\n"; 此刻就不妨在网页中加上ssi训令来表露计数了,比方:01: <html>02: <head><title>grep test</title>03: <body>04: <hr noshade>05: this page has been accessed06: <!--#exec cgi="grep1.cgi" --> times.07: <hr noshade>08: </body>09: </html> 别忘了把此文献扩充名改为.shtml。在grep.cgi中,grep吩咐中掩盖形式的单引号报告unix shell不变换该串的实质以透彻配合。这种本领有很多缺点,开始是功效低,用grep来配合花功夫较长,大概要几秒钟的功夫,这对一个大略的文本计数器而言太长了。其次,对每一个须要计数器的页面cgi文献均不沟通。结果一个对某些人来说不算是个题目,即是要把web效劳器树立成承诺ssi实行,行将其目次映照略加窜改。2、page-stats有一个叫page-stats的步调较好地处置了grep的题目。它察看http daemon的access_log并探求在标识文献中指定网页的考察,而后计划其数量并天生一个html情势的统计页面。如许,你既获得了页面包车型的士精细统计消息,同声又获得了可表露的截止页面,如许的例子可在http://www.nease.net/tppmsgs/msgs0.htm#35找到。还不妨用grep吩咐在统计页面中搜索所需消息并天生本人的表露情势,如许速率就快多了。提防不应在创造本人的统计时运转该步调,要不会引导辩论。该当把它放到工作列表顶用unix吩咐cron准时实行,每天、每钟点以至每几秒钟运转一次。cron详见unix扶助。3、wusage其余一个广为运用的效劳器统计步调是由thomas boutell(boutell@boutell.com)编写的运用于所有效劳器的wusage,它天生很精细的消息,囊括效劳器还好吗、何时及从何处被考察之类。它每周运转一次,不妨天生美丽的图表截止,格外直觉。运用wrsage诉求运用ncsa或cern的web server或任何有规范记载文献方法的效劳器,还须要有c编写翻译器,wusage可在http://www.nease.net/tppmsgs/msgs0.htm#36获得。跟着功夫推移,access_file会越来越宏大,必需按期扣留,这时候先察看迩来一周wusage能否已天生了完备的报表,决定统计中断功夫,而后把access_log中该功夫前的考察记载删掉,并把wusage天生的截止生存在一个目次中,再不wusage不妨天生往日考察情景的图表。二、创造本人的计数器除去运用access_log记载文献外,咱们不妨创造本人的计数器。这时候开始必需确定用何种情势存贮计数截止,是用文本文献仍旧用dbm文献,而后要确定能否举行文献同步考察的养护,这是用文献锁定来实行的,结果即是决定数据的存贮方法了。1、运用dbm文献对dbm文献而言,常用的因变量有dbmopen()、dbmclose()、reset()、each()、values()和keys(),用来计数器时,重要运用前两个因变量。dbmopen()因变量把dbm文献与关系数组绑定,挪用语法为:dbmopen (%array_name, db_filename, read_write_mode);即使这时候指定的数据库文献不生存,则机动创造两个名为db_filename.dir和db_filename.pag的文献,只有把读写形式设为undef值。 缺省的,惟有64个记载被读进外存,不妨经过给%array_name调配巨细来变换此缺省值。即使你不过给本人的网页做计数,缺省值仍旧充满了,但即使是给所有效劳器创造计数器,普遍须要更大的值。此刻看看这三个参数。当挪用dbmopen时,%array_name原有的值都被废除(即使有的话),用dbm文献中的值替代掉,给之付与新值很大略:$array_name{'new_key'} = value; 当挪用dbmclose (%array_name);语句时绑定被废除,关系数组中的实质被写如dbm文献,也不妨不封闭文献而将实质写入,本领是挪用reset (%array_name);语句,提防此语句并不是重置dbm文献,而是将外存中的数据写入文献。第二个参数db_filename是不包括扩充名的,至于读写形式详见本教程的谈话局部。底下是个运用dbm文献的计数器的大略例子:1: dbmopen(%counters, $document_root/dbm_files/counters,0666);2: if(!(defined($counters{'my_counter'})){3: $counters{'my_counter'}=0;}4: $counters{'my_counter'})++;5: $count=$counters{'my_counter'};6: dbmclose (counters); 2、文本文献即使不必dbm文献而用文本文献,除去翻开、封闭文献外,还要波及到数据的读写题目,必需决定符合的数据方法,基础办法如次: 1)翻开文献2)读取计数3)自增4)写入新值5)封闭文献 3、文献锁定当革新文献实质时,该文献大概同声被另一个过程窜改。对计数器步调而言,即使两个或多部分同声考察页面挪用了计数器步调,就会展示多个过程同声窜改同一文献的情景,如许有的过程的窜改就会作废。固然这并不是太大的题目,不过遗失少许计数罢了,然而计数器就不精确了,考察的人越多,这个题目就越大。处置方法即是窜改时报告其它试图翻开该文献的过程等候,或叫文献锁定,窜改完再开释,承诺其它过程翻开文献并窜改。有两种本领,一是创造本人的锁定体制,一种是运用体例因变量flock()。1)创造本人的文献锁这种本领简直实行是创造和简略一个一定称呼的文献,这在资源共享体制中常常称作semaphore。底下是个例子:01: while(-f counter.lock){02: select(undef,undef,undef,0.1);}03: open(lockfile,">counter.lock);04: dbmopen(%counters, $document_root/dbm_files/counters,0666);05: if(!(defined($counters{'my_counter'})){06: $counters{'my_counter'}=0;}07: $counters{'my_counter'})++;08: $count=$counters{'my_counter'};09: dbmclose (counters);10: close(lockfile);11: unlink(counter.lock); 开始查看锁定标记文献能否生存,即使生存,就证明另一个过程正在运用该文献,所以等候直到该文献(此处定名为counter.lock)不生存为止。此处用select()的特出情势轮回等候,此语句使步调加入睡眠状况一段功夫,该功夫段由结果一个参数设置。之以是不必sleep()因变量是由于其基础单元为秒,对这种文献锁定而言太长了,几个微秒就充满了。当锁定标记文献不复生存,就创造本人的锁定标记文献并发端窜改计数,实行后封闭该文献并用unlink因变量将之简略,如许其它的过程又被承诺窜改计数。锁定标记文献并不是特出的文献,其文献名也不妨由你本人随便采用。 2)运用flock()本来锁定文献是很普遍的编制程序办法,体例因变量flock()供给了这一功效,即使在你的体例上不供给的话,不妨运用前方引见的本领本人实行。flock()的语法为:flock (filehandle, lock_type);参数filehandle为用open()因变量翻开的文献句柄,lock_type不妨为底下四个值之一:1:设置共享锁。对计数器而言不实用。2:设置排他锁。3:设置非遏止锁。此处亦不必。4:废除锁定。 运用flock()实行的文献锁定规子如次:1a: dbmopen(%counters,"filename", 0666);or1b: open(counters,"<filename")'2: flock(counters,2);3: if(!(defined($counters{'my_counter'})){4: $counters{'my_counter'}=0;}5: $counters{'my_counter'})++;6: $count=$counters{'my_counter'};7: dbmclose (counters);8: flock(counters,8); 4、输入计数截止此刻十足停当,只剩下输入咱们的计数截止了,有三种输入本领:1)用上头提出的ssi本领输入。2)创造百般文本方法输入。3)天生百般美丽的图形截止输入,本教程的《动静创造图像》一章报告了基础道理并供给了一个x-bitmap方法的小例子,底下引见两个更完备和美丽的步调/库,这两个例子均须要c编写翻译器。 5、www homepage access counter这是一个广为运用的网页计数步调,运用已有的gif图象贯穿起来天生一个gif图象,此步调是用c谈话写的,有实用于百般操纵体例的本子,不妨在http://www.nease.net/tppmsgs/msgs0.htm#37载入。它供给了很多参数,功效比拟完备,天生的图象截止也很美丽,不妨采用图像方法,其自带了少许数字款式,但你不妨减少本人的数字图像天生百般想要的图像,cervantes.comptons.com/digits/digits.htm供给了很多gif数字图象。其参数经过query_string传播,且必需是小写假名,底下是个较搀杂的挪用例子: <img src="/cgi-bin/count.cgi?ft=9|frgb=69;139;50|tr=0|trgb=0;0;0|wxh=15;20|md=6|dd=a|st=5|sh=1|df=count.dat" align=absmiddle>; 其参数精细证明和运用本领详见上述载入网址。即使有需要的话,接洽并窜改一下其源步调不妨使你天生更符合于本人须要的图象。6、运用gd图形库www homepage access counter运用现有的数字图象简化了一局部的处事,其手段即是用来图形计数器。gd图形库的功效越发宏大,不只不妨用来创造图形计数器,还不妨天生百般统计图表,还供给了perl接口库。gd及其派生的步调详见本教程《动静创造图像》一章。 鄙人载的步调中有一个名为gddemo.c的步调演练了其运用本领,在sparke.cs.nyu.edu:8086/cgi.htm有其用来计数器的例子。底下是一个经过gd.pm挪用gd图形库天生图像的perl步调例:#!/usr/bin/perluse gd;# create a new image$im = new gd:image(100,100);# allocate some colors$white = $im->colorallocate(255,255,255);$black = $im->colorallocate(0,0,0);$red = $im->colorallocate(255,0,0);$blue = $im->colorallocate(0,0,255);# make the background transparent and interlaced$im->transparent($white);$im->interlaced('true');# put a black frame around the picture$im->rectangle(0,0,99,99,$black);# draw a blue oval$im->arc(50,50,95,75,0,360,$blue);# and fill it with red$im->fill(50,50,$red);# convert the image to gif and print it on standard outputprint $im->gif;

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.