|
¡¡
|
¡¡
|
|
µÚÈýÕ ¼ÆÊýÆ÷µÄ±àд·½·¨(䶨¸å)
by chinacode
Ò»¡¢¼Ç¼(log)Îļþ
1¡¢grep
2¡¢page-stats
3¡¢wusage
¶þ¡¢´´½¨×Ô¼ºµÄ¼ÆÊýÆ÷
1¡¢Ê¹ÓÃDBMÎļþ
2¡¢Îı¾Îļþ
3¡¢ÎļþËø¶¨
4¡¢Êä³ö¼ÆÊý½á¹û
5¡¢www Homepage Access Counter
6¡¢Ê¹ÓÃ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 2330
02: crossnet.org - - [08/Oct/1995:19:56:45 -0500] "HEAD / HTTP/1.0" 200 0
03: 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 1529
05: onramp1-9.onr.com - - [10/Oct/1995:11:11:43 -0500] "GET /accn.jpg HTTP/1.0" 200 20342
06: onramp1-9.onr.com - - [10/Oct/1995:11:11:46 -0500] "GET /home.gif HTTP/1.0" 200 1331
07: 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 1261
11: 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/perl
2: 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 accessed
06: <!--#exec cgi="grep1.cgi" --> times.
07: <hr noshade>
08: </body>
09: </html>
±ðÍüÁ˰ѴËÎļþÀ©Õ¹Ãû¸ÄΪ.shtml¡£ÔÚgrep.cgiÖУ¬grepÃüÁîÖаüΧģʽµÄµ¥ÒýºÅ¸æËßUNIX shell²»¸Ä±ä¸Ã´®µÄÄÚÈÝÒÔ¾«È·Æ¥Åä¡£
ÕâÖÖ·½·¨ÓÐÐí¶àȱÏÝ£¬Ê×ÏÈÊÇЧÂʵͣ¬ÓÃgrepÀ´Æ¥Å仨ʱ¼ä½Ï³¤£¬¿ÉÄÜÒª¼¸ÃëÖÓµÄʱ¼ä£¬Õâ¶ÔÒ»¸ö¼òµ¥µÄÎı¾¼ÆÊýÆ÷¶øÑÔÌ«³¤ÁË¡£Æä´Î£¬¶Ôÿһ¸öÐèÒª¼ÆÊýÆ÷µÄÒ³ÃæCGIÎļþ¾ù²»Ïàͬ¡£×îºóÒ»¸ö¶ÔijЩÈËÀ´Ëµ²»ËãÊǸöÎÊÌ⣬¾ÍÊÇÒª°ÑWeb·þÎñÆ÷ÉèÖóÉÔÊÐíSSIÖ´ÐУ¬¼´½«ÆäĿ¼ӳÉäÂÔ¼ÓÐ޸ġ£
2¡¢page-stats
ÓÐÒ»¸ö½Ðpage-statsµÄ³ÌÐò½ÏºÃµØ½â¾öÁËgrepµÄÎÊÌâ¡£Ëü²é¿´HTTP daemonµÄaccess_log²¢Ñ°ÕÒÔÚ±êʶÎļþÖÐÖ¸¶¨ÍøÒ³µÄ·ÃÎÊ£¬È»ºó¼ÆËãÆäÊýÄ¿²¢Éú³ÉÒ»¸öHTMLÐÎʽµÄͳ¼ÆÒ³Ãæ¡£ÕâÑù£¬Äã¼ÈµÃµ½ÁËÒ³ÃæµÄÏêϸͳ¼ÆÐÅÏ¢£¬Í¬Ê±Óֵõ½ÁË¿ÉÏÔʾµÄ½á¹ûÒ³Ãæ£¬ÕâÑùµÄÀý×Ó¿ÉÔÚhttp://www.sci.kun.nl/thalia/page-stats/page-stats_sci.htmlÕÒµ½¡£»¹¿ÉÒÔÓÃgrepÃüÁîÔÚͳ¼ÆÒ³ÃæÖвéÕÒËùÐèÐÅÏ¢²¢Éú³É×Ô¼ºµÄÏÔʾÐÎʽ£¬ÕâÑùËٶȾͿì¶àÁË¡£
×¢Òâ²»Ó¦ÔÚ½¨Á¢×Ô¼ºµÄͳ¼ÆÊ±ÔËÐиóÌÐò£¬·ñÔò»áµ¼Ö³åÍ»¡£Ó¦¸Ã°ÑËü·Åµ½ÈÎÎñÁбíÖÐÓÃUNIXÃüÁîcron¶¨Ê±Ö´ÐУ¬Ã¿Ì졢ÿСʱÉõÖÁÿ¼¸·ÖÖÓÔËÐÐÒ»´Î¡£cronÏê¼ûUNIX°ïÖú¡£
3¡¢wusage
ÁíÍâÒ»¸ö¹ãΪӦÓõķþÎñÆ÷ͳ¼Æ³ÌÐòÊÇÓÉThomas Boutell(boutell@boutell.com)±àдµÄÓ¦ÓÃÓÚÕû¸ö·þÎñÆ÷µÄwusage£¬ËüÉú³ÉºÜÏêϸµÄÐÅÏ¢£¬°üÀ¨·þÎñÆ÷ÔõÑù¡¢ºÎʱ¼°´ÓºÎ´¦±»·ÃÎʵȵȡ£ËüÿÖÜÔËÐÐÒ»´Î£¬¿ÉÒÔÉú³ÉƯÁÁµÄͼ±í½á¹û£¬Ê®·ÖÖ±¹Û¡£
ʹÓÃwrsageÒªÇóʹÓÃncSA»òCERNµÄWeb Server»òÈκÎÓбê×¼¼Ç¼Îļþ¸ñʽµÄ·þÎñÆ÷£¬»¹ÐèÒªÓÐC±àÒëÆ÷£¬wusage¿ÉÔÚwww.boutell.comµÃµ½¡£
Ëæ×Åʱ¼äÍÆÒÆ£¬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ÊDz»°üº¬À©Õ¹ÃûµÄ£¬ÖÁÓÚ¶ÁдģʽÏê¼û±¾½Ì³ÌµÄÓïÑÔ²¿·Ö¡£
ÏÂÃæÊǸöʹÓÃ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);
or
1b: 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ÓïÑÔдµÄ£¬ÓÐÊÊÓÃÓÚ¸÷ÖÖ²Ù×÷ϵͳµÄ°æ±¾£¬¿ÉÒÔÔÚwww.fccc.edu/users/muquit/Count.htmlÏÂÔØ¡£ËüÌṩÁ˺ܶà²ÎÊý£¬¹¦ÄÜ±È½ÏÆëÈ«£¬Éú³ÉµÄͼÏó½á¹ûÒ²ºÜƯÁÁ£¬¿ÉÒÔÑ¡ÔñͼÏñ¸ñʽ£¬Æä×Ô´øÁËһЩÊý×ÖÑùʽ£¬µ«Äã¿ÉÒÔÔö¼Ó×Ô¼ºµÄÊý×ÖͼÏñÉú³É¸÷ÖÖÏëÒªµÄͼÏñ£¬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/perl
use 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 output
print $im->gif;
ÉÏÒ»Õ ÏÂÒ»Õ Ŀ¼
|
|