ÖÐÎİæ Perl CGI ³Ìʽд×÷³£ÎÊÎÊÌ⼯
°æ±¾£º 1.0
ÔÎÄ×÷Õߣº
Shishir Gundavaram <shishir@ora.com>
Tom Christiansen <tchrist@perl.com>
ÖÐÒë¡¢²¹³ä£º
Ïô°ÙÁä <pailing@2Ti.com>
ÎÄÌå˵Ã÷£º
| 1.0 £ ÈëÃżò½é | |||
| Q1.1: | Ϊʲ÷áÎÒµÄ HTML page/form ÐèÒªÓà script£¿ | ||
| Q1.2: | CGI ¸÷´ú±íʲ÷᣿ | ||
| Q1.3: | µ½µ×ʲ÷á½Ð script£¿ÎÒÄÜÄÃËüÀ´ÄÜ×öʲ÷᣿ | ||
| Q1.4: | ʲ÷áÊÇ Perl£¿ÎªÊ²÷áÓÐÄÇ÷á¶àÈËÓÃËüÀ´×ö CGI£¿ | ||
| Q1.5: | ÓÐûÓÐ½Ì CGI »ò Perl µÄÊé»òÊÇÏßÉÏ×ÊÁÏ£¿ | ||
| Q1.6: | ÊDz»ÊÇÓÐÕâ·½ÃæµÄÓʵÝÂÛ̳ (mailing lists) »òÐÂÎÅÌÖÂÛȺ×飿 | ||
| Q1.7: | ÍøÂ·ÉÏÊDz»ÊÇÓÐרÃÅÊÕ²ØÓʵÝÂÛ̳»òÐÂÎÅÌÖÂÛȺ×éµÄ posts µÄÕ¾£¿ | ||
| 2.0 - Modules £¨Ä£×飩 | |||
| Q2.1: | ÎÒÊDz»ÊǸÃÓà Perl CGI modules À´Ð´ CGI scripts £¿×Ô¼º×ö²»ÊDZȽÏÈÝÒ×Â𣿠| ||
| Q2.2: | ÈçºÎÖªµÀij¸ö module ¸ÃÔõ÷á¸öÓ÷¨£¿ | ||
| Q2.3: | ÓÐÄÄЩ Perl4 µÄ CGI »ò WWWµÄ libraries £¿ | ||
| Q2.4: | ÓÐÄÄЩ¸ø Perl5 ʹÓÃµÄ CGI modules£¿ÎÒ¸ÃÓÃÄĸö£¿ÎªÊ²÷᣿ | ||
| Q2.5: | Ϊʲ÷áÕâ÷á¶à perl CGI libraries ¶¼ÊÇ object-oriented £¨Îï¼þµ¼Ïò£©µÄ£¿ÎÒ¶ÔÓÃÎï¼þµ¼ÏòÀ´Ð´³ÌʽһÇϲ»Í¨¡£ÄѵÀ¾ÍûÓмòµ¥Ò»µã£¬¸ø²»»áÎï¼þµ¼ÏòµÄÈËʹÓÃµÄ libraries Âð£¿Îï¼þµ¼ÏòÓжàÄÑ£¿ | ||
| 3.0 - CGI Óë WWW Server | |||
| Q3.1: | ÎÒµÄ Perl CGI ³ÌʽҪ·ÅÔÚÄÄÀïÖ´ÐУ¿cgi-bin Õâ¸öĿ¼ÊÇ×öÉõ÷áÓõģ¿ | ||
| Q3.2: | ʲ÷áÊǵµ°¸Ê¹ÓÃȨÏÞ£¿ÔõÑù¸Ä£¿ | ||
| Q3.3: | Perl Ó¦¸Ã°²×°ÔÚÄÄÀï²Å¿ÉÒÔÖ´ÐÐËü£¿ | ||
| Q3.4: | ÎÒΪʲ÷áÒ»Ö±µÃµ½ ``Server: Error 500'' µÄѶϢ£¿ | ||
| Q3.5: | ÎÒÊÔ×Å´ò¿ªÒ»¸öµµ°¸£¬Ïë°Ñ×ÊÁÏ´¢´æÔÚÀïÍ·£¬µ«ÊÇ open() µÄÖ¸Áîʧ°ÜÁË¡£µ½µ×ÊÇÔõ÷á¸ãµÄ£¿ | ||
| 4.0 £ ³ÌʽÉè¼ÆÒÉÄÑÔÓÖ¢ | |||
| Q4.1: | ÎÒÏëÈà user ÌîµÄ form ×ÊÁÏ×Ô¶¯¼Ä¸øÎÒ£¬¸ÃÔõ÷á×ö£¿ÓÐûÓз¶Àý£¿ | ||
| Q4.2: | ¸Õ²ÅÕâ¸öÓà form ËÍÐÅµÄ script ¿´ÆðÀ´ÓеãÄÑ¡£ÎªÊ²÷᲻Ǭ´àÓà ``mailto: URL''£¬ÕâÑù user ÌîÈëµÄ×ÊÁϾͿÉÒԼĸøÎÒÁË£¿ | ||
| Q4.3: | ÎÒÒªÈçºÎÔÚ UNIX ÒÔÍâµÄƽ̨ÉÏ×ö Perl-CGI£¬Æ©Èç Mac¡¢MS-DOS¡¢ Windows ¼° NT£¿ÎÒµÄ Perl CGI ³ÌʽÄܲ»ÄÜÔÚÕâЩƽ̨֮¼ä»¥ÏàÒÆÖ²ÄØ£¿Äܲ»ÄÜ ºÜÖ±½Ó£¬Ã»ÓÐÂé·³£¿ÎÒÔÚ UNIX Ö÷»úÉÏÓÐÕʺţ¬µ«ÊǶ¼ÊÇÏÈÔÚ Windows/Mac ÉÏ×ö¡£ ÎÒÒªÈçºÎÔÚÎÒ×Ô¼ºµÄ»úÆ÷ÉϲâÊÔдºÃµÄ CGI scripts£¿ | ||
| Q4.4: | ÔÚ Perl CGI ³ÌʽÖУ¬STDERR £¨±ê×¼´íÎóѶϢ)¡¢STDIN (±ê×¼ÊäÈ룩£¬ºÍ STDOUT £¨±ê×¼Êä³ö£© ¸÷ÊÇÁ¬µ½ºÎ´¦£¿ | ||
| Q4.5: | ÈçºÎд¼ÆÊýÆ÷£¿ | ||
| Q4.6: | ÒªÈçºÎÓÃÒ»¸ö Perl µÄÈ¡´úÖ¸ÁËùÓÐ HTML ±êÇ©´ÓÒ»·ÝÎļþÖÐɾ³ý£¿ | ||
| Q4.7: | ÒªÈçºÎÖªµÀÊÇË£¯ÄĄ̈»úÆ÷£¯Äĸöä¯ÀÀÆ÷Ö´ÐÐÁËÎҵijÌʽ£¿ | ||
| Q4.8: | È˼ҿ´µÃµ½ÎÒµÄ Perl CGI ³ÌʽÂð£¿Èç¹ûÊÇÕâÑùµÄ»°£¬ÄDz»¾ÍÈÃËûÃÇÖªµÀÎҵijÌʽÊÇÔõ÷áÔË×÷µÄÁË¡£ÕâÊǸö°²È«Â©¶´Âð£¿ÎÒÒªÔõ÷á°ÑËüÒþ²ØÆðÀ´£¿ | ||
| Q4.9: | ÎÒÐèÒª½«Õû¸ö Perl library ¶¼¸´ÖƵ½ÎÒµÄ htdocs Ŀ¼µ×ÏÂÂ𣿠| ||
| Q4.10: | ÎÒΪʲ÷á²»¸Ã½ÐʹÓÃÕßÊäÈëËûÃǵÄÃÜÂë»òÉí·ÝÖ¤×ֺŻòÐÅÓÿ¨ºÅÂ룿ÓÐÒ»¸ö TYPE="password" ²»ÊǾÍÊÇÄÃÀ´×öÕâ¸öµÄÂ𣿠| ||
| Q4.11: | ÎÒÒªÈçºÎ²úÉúרÃÅÌæ Netscape Éè¼ÆµÄÍøÒ³£¬ÒÔ±ðì¶ÊÀÉÏÆäËûµÄä¯ÀÀÆ÷£¿ | ||
| Q4.12: | Ϊʲ÷áÎÒµÄ system() Ëù²úÉúµÄ×ÊÁÏÊä³ö˳Ðò²»¶Ô£¿ | ||
| Q4.13: | ÎÒÌý˵ Netscape »áÖ§Ô® Java¡£ÕâÊDz»ÊÇ˵ ÎÒÏÖÔÚµÃÆú Perl£¬¸ÄJava ÁË£¿ÊDz»ÊǸÃÕâ÷á×ö£¿ | ||
| Q4.14: | ÎÒÒªÈçºÎ¶ÁÈ¡»·¾³±äÊý£¿ÎªÊ²÷áËüÃÇÓÐʱºò»á²»Ò»Ñù£¿ | ||
| Q4.15: | Ϊʲ÷áÎÒÊä³öµÄ×ÊÁϱ»½ÁÂÒÁË£¨Èç ``b | Q4.16: | Ϊʲ÷áÎÒµÄPerl CGI ³Ìʽ¿ÉÒÔÓÉÖ¸ÁîÁУ¬È´ÎÞ·¨´Óä¯ÀÀÆ÷È¥Ö´ÐУ¿ |
| Q4.17: | Ϊʲ÷áÎÒµÄ Perl CGI ³ÌʽÄÜÅÜ£¬µ«ÊDz»»á°Ñ×ÊÁÏдµ½µµ°¸ÖУ¿ | ||
| Q4.18: | ÒªÈçºÎ×öÒ»¸ö»áάϵ״̬£¬»òÔÊÐí¡¾Í¬Ò»Ê¹ÓÃÕß¡¿¶à´ÎÁ¬ÏßµÄ form£¿ | ||
| Q4.19: | Èç¹û²»´Óä¯ÀÀÆ÷È¥Ö´ÐÐÎÒµÄ CGI ³Ìʽ£¬ÒªÈçºÎÌæËü³ý´í£¿ | ||
| Q4.20: | Èç¹û²»¿¿<FORM>±êÇ©£¬ÒªÈçºÎ½Ð³ö Perl CGI ³Ìʽ£¿ | ||
| Q4.21: | ÒªÈçºÎ±ÜÃâÅÔÈ˲»ÏÈÌîÀ¸Î»¾ÍÖ´ÐÐÎÒµÄ form£¿ËûÃÇΪʲ÷áÒ»Ö±²»¶ÏÕâ÷á×ö£¿ | ||
| Q4.22: | ÄÇЩ server »ØÓ¦Âë (server response codes) ÊǸÉʲ÷áÓõģ¿ÓÐʲ÷áÒâÒ壿 | ||
| Q4.23: | Ϊʲ÷á print "Location: http://host/page.html\n"
²» work£¿ÓÖΪʲ÷áËüÖ» work Ò»´Î£¬µ«ËæááµÄתÏò¾Í¶¼Åª´íÁËÄØ£¿ |
||
| Q4.24: | ÒªÈçºÎÈà server ÔÚÿ¸ö HTML ÍøÒ³µÄµ×²¿¶¼×Ô¶¯¼ÓÉÏÒ»¸ö£º¡¸×î½ü¸üÐÂÈÕÆÚ£º ...¡¹µÄ¸æÊ¾£¿»òÕߣ¬ÊDz»ÊÇÖ»ÓÐ SSI µÄÍøÒ³²ÅÄÜÕâ÷á×ö£¿CGI ³ÌʽµÄÈÕÆÚÒªÈçºÎÈ¡ µÃ£¿ | ||
| Q4.25: | ʲ÷áÑùµÄ³¡ºÏÏÂÒÔ Perl д CGI ³Ìʽ»áÏÔµÃ̫СÌâ´ó×÷£¬ÒòΪÓà shell ¾Í¿ÉÒÔ×öµ½£¿¶øÊ²÷áÑùµÄ³¡ºÏ¶Ô Perl À´ËµÓÖ¹ýì¶À§ÄÑ£¿Óà C++ ×öÕâÀàµÄʲ»ÊǺõöàÂð£¿ÄÇÓà C ÄØ£¿ | ||
| 5.0 £ °²È« | |||
| Q5.1: | ÒÔ Perl д³ÉµÄ CGI ³ÌʽÊDz»ÊDz»ÈçÒÔ shell »ò C дµÄÀ´µÃ°²È«£¿ | ||
| Q5.2: | ÎÒ¸ÃÌØ±ðÁôÒâÄÄЩ°²È«ÊÂÏ | ||
| Q5.3: | Ϊʲ÷á´ó¼Ò¶¼Ëµ http://bigidiot.abuse-me.com/perl.exe?foo.pl
ÕâÑùºÜΣÏÕ£¿»áÓжàÔ㣿 |
||
| Q5.4: | ÒªÈçºÎÔÚ³ÌʽÖа²È«µØÊ¹ÓÃÄæÏòƲºÅ£¨backticks£¬"`"£©£¿Õâ÷á×ö£º@ans = `grep'$user_field' some.file`; ÊDz»ÊÇÕæµÄ²»°²È«£¿ |
||
| Q5.5: | /$user_variable/ Õâ¸ö¾ä·¨ÊDz»ÊÇ Perl 5
ÖеÄÒ»¸ö°²È«Â©¶´£¿ |
||
| °æÈ¨ÊÂÒË | |||
1.0 £ ÈëÃżò½é
Q1.1: Ϊʲ÷áÎÒµÄ HTML page/form ÐèÒªÓà script£¿
ÒòΪÓеÄʱºòÄúÐèÒªÔÚ HTML ÎļþÖÐʹÓö¯Ì¬×ÊÁÏ£¨·Ç¹Ì¶¨²»±äµÄ×ÊÁÏ£©¡£ Õâ°üÀ¨ÁËÈÕÆÚºÍʱ¼äÕâÀàµÄ¼òµ¥×ÊÁÏ£¬»òÊÇÒ»¸öÏÔʾ¡¸ÄúÊÇµÚ xxx λ·Ã¿Í¡¹µÄ¼Æ ÊýÆ÷¡£µ«ËüÒ²¿ÉÄܰüÀ¨¸ù¾ÝʹÓÃÕßÊäÈë¶øµÃ³öµÄ´ó±ýͼ£¯Ìõͳͼ¡¢×ÊÁÏ¿âËÑѰ²ú ÉúµÄ½á¹û£¬»ò¶¯»µÈÕâÀàµÄ¶«Î÷¡£Òª×ö³öÏñÕâÑùµÄ¶«Î÷£¬ÄúΨһµÄ·½·¨ÊÇʹÓà CGI scripts £¨¾¡¹ÜÄúÒ²¿ÉÒÔÓ¦Óÿͻ§¶Ë³Ìʽ£¬Èç Java ºÍ JavaScript À´´ïµ½Õâ¸öÄ¿ µÄ£¬²»¹ýÄÇÓÖÊÇÍêÈ«²»Í¬µÄÒ»»ØÊ£¡£©¡£
Q1.2: CGI ¸÷´ú±íʲ÷᣿
ÒÔÏÂÊÇÎҵıà¼* Andy Oram ºÍ Linda Mui £¨ËûÃǺܰô£¡£©ËùдµÄÒ»¶Î·Ç ³£ºÃµÄÃèÊö£º
¡¾ÒëÕß¡¿ÕâÊÇÔÎĵĵÚÒ»×÷Õß Shishir G. Ö¸ËûËùдµÄ CGI Programming on the World Wide Web Ò»ÊéµÄ±à¼¡£
Common ÏòÄúÈ·±£ CGI ¿ÉÒÔʹÓöàÖÖ³ÌʽÓïÑÔ²¢ºÍ¶àÖÖ
²»Í¬µÄϵͳ»¥¶¯¡£ËüÈÃÄú×ÔÓÉÑ¡Ôñ´ïµ½Ä¿µÄµÄ·½
·¨£¬²»°ÑÄú°óËÀÔÚµ¥¶ÀÒ»ÖÖ×÷·¨Ö®ÏÂ*¡£
Gateway ÌáʾÄú CGI µÄÁ¦Á¿²»ÔÚì¶Ëü±¾ÉíËù×öµÄÊ£¬¶ø
ÔÚì¶ËüÌṩÁËÁ¬½áÆäËûϵͳµÄDZÁ¦£¬ÀýÈç×ÊÁÏ¿â
ºÍͼÐÎÖÆÔìÆ÷¡£
Interface Ö»ÊDZíʾ CGI ¶ÔÈçºÎÉÆÓÃÆäÌØÐÔÌṩÁËÃ÷È·µÄ
½ç¶¨£»»¾ä»°Ëµ£¬Äú¿ÉÒÔÉè¼Æ³ÌʽÀ´Êʵ±ÀûÓÃÕâ
¸ö½éÃæ¡£
¡¾ÒëÕß¡¿ËƺõÓÐÓ°Éä Java Ö®Òâ¡£
Q1.3: µ½µ×ʲ÷á½Ð script£¿ÎÒÄÜÄÃËüÀ´ÄÜ×öʲ÷᣿
¼òµ¥µÄ˵£¬script ¾ÍÊdzÌʽ£¡ºÃ°É¡¢ºÃ°É£¬Ó¦¸Ã˵¶þÕßÓÐÓïÒâÉϵIJî±ð¡£Èç¹ûÄú ÕæµÄÏëÖªµÀ£¬ÄÇ÷áÈ¥ÂòÒ»±¾µçÄÔ³ÌʽÉè¼ÆµÄÊéÀ´¿´£¨»òÐí¸Ã˵ script Éè¼Æ :-) £©¡£
Äú¿ÉÒÔ½å×Åд CGI ³Ìʽ/script ±äºÜ¶àħÊõ¡£Äú¿ÉÒÔ¼´Ê±ÖÆ×÷ͼÐΡ¢Á¬½á×ÊÁϿ⠴«»Ø¡¾²éѯ¡¿½á¹û£¬»¹¿ÉÒÔÁ¬µ½ Internet ÉÏÆäËûµÄ servers È¥¡£
Q1.4: ʲ÷áÊÇ Perl£¿ÎªÊ²÷áÓÐÄÇ÷á¶àÈËÓÃËüÀ´×ö CGI£¿
´ð°¸¾ÍÔÚ perl manpage ÖеÄǰÈþÐÐÐðÊö£º
Perl ÊÇÒ»½âÒëʽµÄÓïÑÔ£¬×¨Îª¸ßЧÂʼìÊÓÎÄ×Öµµ°¸ ¡¢´ÓÖгéÈ¡×ÊÁÏ£¬¾ÝÒÔÓ¡ÖÆ ±¨±í¶øÉè¼Æ¡£
¾ø´ó¶àÊý CGI Ó¦ÓóÌʽµÄÈÎÎñ¶¼Éæ¼°¶Ô×ÊÁÏ×÷ijÖ̶ֳȵĴ¦Àí£¬¼°Á¬½áÍâÔÚ³Ìʽ¡£ Perl Ç¡ºÃÌṩÁ˺ÃÓõŤ¾ß£¬ÈÃÈËÇáËÉÓä¿ìµØ´ï³ÉÕâЩÈÎÎñ¡£
Q1.5: ÓÐûÓÐ½Ì CGI »ò Perl µÄÊé»òÊÇÏßÉÏ×ÊÁÏ£¿
¡¾ÒëÕß¡¿´Ë·Ý FAQ µÄÖÐÒë°æ¿ÉÔÚ http://www.acer.net/document/cwwwfaq/ ´¦È¡µÃ¡£
ÒÔÏÂÊÇÓÉ Cye H. Waldman ËùÕûÀíµÄ CGI ºÍ Perl Êé¼®Ò»ÀÀ±í*£º
¡¾ÒëÕß¡¿´Ë±íÓÉÒëÕ߸üУ¬Í¬Ê±¼ÓÈëÁËÔÎÄ×÷Õß Tom C. µÄ Perl ÊéÆÀÒÔ¹©¶ÁÕß ²Î¿¼¡£Çë×¢Ò⣺CGI ¸÷ÊéµÄµÈ¼¶ÆÀ¶¨Ä˵¥¾ÍÆä Perl ²¿·ÝµÄË®×¼¼°ÕýÈ·ÐÔ¶øÑÔ¡£·û ºÅ˵Ã÷£º£¨Tom C. ÓÃÂæÍÕ¶ø·ÇÐÇÐÇ£©
Îå¿ÅÐÇ£¨£ª£ª£ª£ª£ª£© ==> ºÜ°ôµÄÊé (terrific books) ËÄ¿ÅÐÇ£¨£ª£ª£ª£ª£© ==> ²»´íµÄÊé (fine books) Èþ¿ÅÐÇ£¨£ª£ª£ª£© ==> ÏñÑùµÄÊé (decent books) Á½¿ÅÐÇ£¨£ª£ª£© ==> ÂíÂí»¢»¢¡¢ÃãÇ¿¹ýµÃÈ¥µÄÊé (so-so books) Ò»¿ÅÐÇ£¨£ª£© ==> ²î¾¢µÄÊé (poor books) Áã¿ÅÐÇ£¨0£ª£© ==> ´óÀÃÊé (terrible books) NA ==> ²»ÊÊÓá¢ÎÞÊéÆÀ (Not Applicable/Available) v4 ==> ÄÚÈݽÏÀϾɣ¬½öº¬¸Ç Perl4
| ×÷Õß | ÊéÃû | ÆÀ¼Û | ³ö°æÕß | Ëù¸½ÈíÌå | ÊÛ¼Û£¨ÃÀ½ð£© |
|---|---|---|---|---|---|
| ?? | Cgi Programming For Dummies £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£© |
NA | IDG Books | $25 | |
| Jeffrey Friedl | Mastering Regular Expressions: Powerful
Techniques for Perl and Other Tools £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£© |
NA | O'Reilly | $30 | |
| J.M. Ivler | CGI Developer's Resource £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£© |
NA | Prentice Hall | ¹âµú | $45 |
| Various authors | Perl 5 Windows NT Programming £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£© |
NA | New Riders | $45 | |
| Eric Herrmann | Teach Yourself CGI Programming with Perl 5 in a Week, 2nd Ed. | NA | Sams.net | ¹âµú | $40 |
| Mark Felton | CGI: Internet Programming C++ & C £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£© |
NA | Prentice Hall | $?? | |
| Ed Tittle | CGI Bible £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê11Ô£© |
NA | IDG Books | $?? | |
| Craig Patchett & Matt Wright |
The CGI Cookbook: Perl and JavaScript £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê11Ô£© |
NA | Wiley | ¹âµú | $40 |
| Baron Weil | Drag-n-Drop CGI £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£© |
NA | Addison-Wesley | $?? | |
| Stephen Lines | How To Program CGI with Perl 5.0 | NA | Ziff-Davis | ¹âµú | $40 |
| Bob Denny et al. | CGI Programming for Windows £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£© |
NA | O'Reilly | ´ÅƬ | $30 |
| Selena Sol & Gunther Birznieks |
Instant Web Scripts with CGI/Perl | NA | MIS:Press/M&T Books | ¹âµú | $40 |
| ?? | Perl For Dummies £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£© |
NA | IDG Books | $25 | |
| Steven E. Brenner & Edwin Aoki |
CGI Web Scripting With Perl £¨³ö°æÈ¡Ïû£© |
NA | MIS:Press/M&T Books | ¹âµú | $40 |
| ?? | Perl & CGI Programming Starter Kit | NA | Sams.net | $45 | |
| Mohammed J. Kabir | CGI Primer Plus for Windows | NA | Waite | ¹âµú | $45 |
| Ed Tittel et al. | Foundations of WWW Programming with HTML and CGI, 2nd Ed. £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£© |
NA | IDG Books | ¹âµú | $?? |
| Jerry Muelver | Creating Cool Web Pages With Perl | £ª£ª | IDG Books | ¹âµú | $30 |
| John December | HTML & CGI Unleashed, Professional Reference Edition | NA | Sams.net | ¹âµú | $50 |
| Eric Johnson | Cross-Platform Perl (See also the author's book site.) £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê9Ô£© |
£ª£ª£ª£ª | MIS:Press/M&T Books | ¹âµú | $35 |
| Daniel Berlin et al. | CGI Programming Unleashed | NA | Sams.net | $55 | |
| Clinton Wong | Web Client Programming in Perl £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£© |
NA | O'Reilly | $30 | |
| Robert Seymour | Perl 5 £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£© |
NA | Springer-Verlag | $40 | |
| M he Foghl /TD> | Perl 5 Quick Reference | £ª | Que | $20 | |
| Robert Niles & Jeffry Dwight |
CGI by Example | NA | Que | ¹âµú | $35 |
| Jonathan Hagey | PC Magazine Programming Perl 5.0 CGI Web Pages for Microsoft Windows NT | 0£ª | Ziff-Davis | ¹âµú | $35 |
| ?? | Web Programming with Perl £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê8Ô£© |
NA | Sams.net | ¹âµú | $40 |
| ?? | Perl 5 Developer's Guide £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê12Ô£© |
NA | Sams | ¹âµú | $60 |
| David Medinets | Perl 5 by Example | £ª£ª+1/2£ª | Que | ¹âµú | $35 |
| Stephen Asbury et al. | CGI How-To | NA | Waite | ¹âµú | $40 |
| Carl Franklin | Visual Basic Internet
Programming £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê5Ô£© |
NA | Wiley | ¹âµú | $40 |
| InfoMagic | Mother of Perl £¨Ò»Ì×Á½ÕŹâµú£© |
NA | SSC | ¹âµú | $35 |
| Larry Wall et al. | Programming Perl, 2nd Ed. | £ª£ª£ª£ª£ª | O'Reilly | $40 | |
| Eugene Kim | CGI Developer's Guide £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê5Ô£© |
£ª£ª | Sams.net | ¹âµú | $50 |
| Robert McDaniel | CGI Manual of Style £¨¿É×ÔÏßÉÏÈ¡µÃ£© |
NA | Ziff-Davis | $25 | |
| ?? | Perl 5 for Dummies £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Ä꣩ |
NA | IDG Books | ¹âµú | $?? |
| Ginsburg & Tall |
Developing Internet Applications with Perl £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê3Ô£© |
NA | Sams.net | $?? | |
| Kamran Husain | Perl 5 Unleashed | £ª | Sams | ¹âµú | $50 |
| Norton | Teach Yourself Perl 5, 2nd Edition £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê6Ô£© |
NA | Sams | ¹âµú | $?? |
| Michael Erwin et al. | Special Edition Using CGI | NA | Que | $60 | |
| Thomas Boutell | CGI Programming in C and Perl | £ª£ª£ª£ª | Addison-Wesley | ¹âµú | $35 |
| Johan Vromans | Perl 5 Desktop Reference | NA | O'Reilly | $7 | |
| Christian Neuss & Johan Vromans |
The Webmaster's Handbook: Perl Power for Your Web Server | NA | Int'l Thomson | ¹âµú | $30 |
| William E. Weinman | The CGI Book | NA | New Riders | ¹âµú | $45 |
| Brian Jepson | World Wide Web Database Programming for Windows NT | NA | Wiley | ¹âµú | $40 |
| Steven E. Brenner & Edwin Aoki |
Introduction to CGI/ Perl | £ª£ª£ª(v4) | MIS:Press/M&T Books | $20 | |
| Ed Tittel & Sebastion Hassinger |
Perl
5 Programming Secrets £¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê3Ô£© |
NA | IDG Books | ¹âµú | $45 |
| David Harlan et al. | Special
Edition Using Perl 5 for Web Programming |
£ª£ª | Que | $50 | |
| Shishir Gundavaram | CGI Programming on the World Wide Web | £ª£ª | O'Reilly | ¹âµú | $30 |
| Robert Farrel | The Official 60 Minute Guide to CGI Programming with Perl | £ª£ª£ª(v4) | IDG Books | $20 | |
| Ed Tittel & Sebastion Hassinger |
Web Programming Secrets with HTML, CGI & Perl | NA | IDG Books | ¹âµú | $45 |
| John Deep & Peter Holfelder |
Developing CGI Applications with Perl | £ª£ª(v4) | Wiley | $30 | |
| Jon Orwant | Perl 5 Interactive Course | £ª£ª£ª | Waite | ¹âµú | $50 |
| Aidan Humphreys et al. | Perl 5 How-To | £ª£ª£ª | Waite | ¹âµú | $45 |
| Eric Herrmann | Teach Yourself CGI Programming with Perl in a Week | £ª£ª£ª(v4) | Sams.net | ¹âµú | $40 |
| Walnut Creek | Perl £¨ÊÕ¼¸÷Àà×ÊÔ´¡¢µµ°¸¿â¡¢ÈëÃÅÖ¸µ¼¡¢ÊµÀý¡¢source code µÈ£© |
NA | Walnut Creek | ¹âµú | $40 |
| Carl Dichter & Mark Pease |
Software Engineering with Perl £¨½ø½×¼¶£¬ÄÚÈÝÕë¶ÔÈíÌåרҵÈËÊËÉè¼Æ£»·ÇÈëÃÅÖ¸Òý£© |
£ª | Prentice Hall | ´ÅƬ | $30 |
| Ellie Quigley | Perl by Example | £ª£ª£ª(v4) | Prentice Hall | $27 | |
| John December & Mark Ginsburg |
HTML & CGI Unleashed | NA | Sams.net | ¹âµú | $50 |
| David Till | Teach Yourself Perl in 21 Days | £ª£ª(v4) | Sams | $30 | |
| Larry Wall & Randal L. Schwartz |
Programming Perl | NA | O'Reilly | $30 | |
| Randal L. Schwartz | Learning Perl | £ª£ª£ª£ª(v4) | O'Reilly | $25 | |
| Ed Tittel et al. | Foundations of WWW Programming with HTML and CGI | NA | IDG Books | ¹âµú | $40 |
| Lincoln Stein | How To Set Up and Maintain a World Wide Web
Site, 2nd Edition £¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£© |
£ª£ª£ª£ª | Addison-Wesley | ¹âµú | $55 |
¡¾ÒëÕß¡¿ÖÐÎÄµÄ CGI ºÍ Perl µÄÊéÄ¿ÔòÉдýºÃÐĵĶÁÕßÌṩ¡£
Q1.6: ÊDz»ÊÇÓÐÕâ·½ÃæµÄÓʵÝÂÛ̳ (mailing lists) »òÐÂÎÅÌÖÂÛȺ×飿
ÿÌìÓÐÎÞÊýµÄ CGI ¸ßÊÖÔÚ¡¸¼àÊÓ¡¹×ÅÕâ¸öºÜÓÐÓõÄÐÂÎÅÌÖÂÛȺ×飺 comp.infosystems.www.authoring.cgi*¡£
¡¾ÒëÕß¡¿ÖÐÎĵÄÌÖÂÛȺÖÐ×îÊʺÏ×öÕâ·½ÃæµÄÌÖÂ۵Ĵó¸ÅÒªËãÊÇ tw.bbs.comp.www ÁË¡£»¹ÓУ¬Çë²»Òª½« CGI ÎÊÌâ post µ½ comp.lang.perl.misc ÉÏÍ·È¥£¬±ð˵ÒëÕßûÏȾ¯¸æÄúภ;-) ¡£
µ«ÊÇ£¬³ý·ÇÄúÏ顄 FAQ ¶Á¹ýÒ»±é£¬·ñÔòÄú²»Ó¦¸Ãµ½Õâ¸ö°æ×ÓÉÏÈ¥Ëæ±ã post ÎÊÌâ £¨»òÆäËûÈκΰæ×Ó£»Í¬ÑùµÄµÀÀí£©¡£
ÍøÂ·ÉÏÓи÷ʽ¸÷Ñù ÌÖÂÛ Perl¡¢CGI£¬¼° Web µÄÓʵÝÂÛ̳£¬µ«ÒÔµ×ÏÂÕâÁ½¸ö×îÊÜ»¶Ó£º
¡¾ÒëÕß¡¿´Ë mailing list ÒѾÊýÔÂûÓÐ posts £¬ÊÙÖÕÕýÇÞÁË¡£Õâ¿ÉÄÜÊÇÓÉì¶ ÌÖÂÛµÄÖ÷Ìâ£CGI::* Ä£×éÌ×¼þ£¨Ïê¼ûÒÔϵڶþƪ¡¸Modules £¨Ä£×飩¡¹µÄ˵Ã÷£© ÒѾÓкÃÒ»¶Îʱ¼äûÓиüÐÂÁË¡£Ä£×éµÄά»¤ÈË Lincoln Stein ½üÒ»Äê¶àÀ´Ëƺõ¶¼ ½«ÖØÐÄ·ÅÔÚËûµÄ CGI.pm ÉÏ£¬¶ø CGI.pm Ҳȡ´úÁË CGI::* Õâ¸öÌ×¼þµÄµØÎ»¡£¶ÁÕß Èç¶Ô CGI::* »ò CGI.pm ÓÐÎÊÌâµÄ»°¿Éдµ½ comp.lang.perl.modules ÉÏÍ·È¥¡£
¡¾ÒëÕß¡¿´Ë mailing list ²»ÊʺÏ×ö CGI µÄÌÖÂÛ¡£libwww-perl ÊÇÒ»ÏîÒÔ Perl Ϊ·¢Õ¹¹¤¾ß¡¢ÀàËÆ W3C/CERN µÄ libwww µÄ¼Æ»£¨ááÕßÓõÄÊÇ C£©¡£
CPAN: Perl Ä£×éͬʱҲ¿ÉÒÔÔÚ¶àÖØ¸´ÖÆ¡¢·ÖɢʽµÄ CPAN ϵͳȡµÃ¡£ Õâ»á×Ô¶¯ÌæÄúÑ¡ÔñÒ»¸ö¡¸¿¿½üÄúµÄÕ¾¡¹¡£Æ© Èç˵£¬Äú¿ÉÒÔ×¥ LWP Ä£×éµÄ source »òÖ»×¥ËüµÄ readme¡£
Q1.7: ÍøÂ·ÉÏÊDz»ÊÇÓÐרÃÅÊÕ²ØÓʵÝÂÛ̳»òÐÂÎÅÌÖÂÛȺ×éµÄ posts µÄÕ¾£¿
Êǵģ¬Äú¿ÉÒÔÊÔÊÔ The Usenet Newstand¡£ËùÓÐcomp.infosystems.www.* ÌÖÂÛȺ×éµÄÎÄÕ¶¼ÊÕ¼¯ÔÚÄÇ ¶ù*¡£Í¬Ê±£¬cgi-perl ¼° libwww ÕâÁ½¸öÓʵÝÂÛ̳ËûÃÇÒ²ÓÐÊÕ¼¯¡£
¡¾ÒëÕß¡¿Äúͬʱ¿ÉÒÔÊÔÊÔ DejaNews ¡¢ AltaVista £¬ºÍ HotBot Õ⼸¸öËÑѰÒýÇæ£¯×ÊÁϿ⡣ DejaNews ÉõÖÁÁ¬ tw.bbs.* ¶¼ÊÕ¼¯ £¨ÆäËûÁ½¸ö»òÐíÒ²ÓУ¬µ«ÒëÕßûÊÔ¹ý£©¡£
2.0 - Modules £¨Ä£×飩
Q2.1: ÎÒÊDz»ÊǸÃÓà Perl CGI modules* À´Ð´ CGI scripts £¿×Ô¼º×ö²»ÊDZȽÏÈÝÒ×Âð£¿
¡¾ÒëÕß¡¿ CGI modules ÔÚ´ËÖ¸ CGI.pm ¼°ÆäËû CGI::* µÄÄ£×飻Ïê¼û Q2.4 ¡£
ÕâÍêȫȡ¾öì¶ÄúÒª×öµÄÊÇʲ÷á¡£CGI modules ½ÏÊʺÏÖØÁ¿¼¶µÄ CGI scripts ¡£Èç ¹ûÊǼòµ¥µÄ scripts µÄ»°£¬×Ô¼º×ö»òÕßÊÇÓà CGI Lite Õâ¸öÄ£×é»á¼ò±ãÐí¶à¡£Èç ¹ûÄúÕæµÄÔ¸Ò⣬ÄúÉõÖÁ¿ÉÒÔÓÃ¾ÉµÄ Perl4 cgi-lib.pl Õâ¸ö library*¡£
¡¾Òë×¢¡¿ ×÷Õß Tom C. Ö®ËùÒÔÕâ÷á˵ÊÇÒòΪËû»ù±¾Éϲ»ÔÞ³ÉʹÓÃcgi-lib.pl £¬ÓÐ ÐËȤµÄ¶ÁÕß¿ÉÒÔ¿´ËûдµÄ Why I am not fond of cgi-lib.pl £¨ÎªÊ²÷áÎÒ²»ÐÀÉÍ cgi-lib.pl £©¡£
Q2.2: ÈçºÎÖªµÀij¸ö module ¸ÃÔõ÷á¸öÓ÷¨£¿
´ó¶àÊý modules µÄʹÓÃ˵Ã÷ÊÇÖ±½ÓǶÔÚ ³ÌʽÀïµÄ*¡£ Èç¹ûÊÇÕâÑùµÄ»°£¬Äú¿ÉÒÔÓà pod2man Õâ¸ö script À´ÔĶÁʹÓÃÖ¸ÄÏ£º
% pod2text name_of_module.pm
% pod2man name_of_module.pm | nroff -man | more
¡¾Òë×¢¡¿Èç¹ûÄúÔÚ *.pm µµÖп´µ½ ``=head1''¡¢``=cut'' ÕâÀàµÄ¶«Î÷±ãÊÇÏÔʾʹ ÓÃ˵Ã÷Óи½ÔÚÀïÍ·¡£ÕâÊÇ Larry Wall Éè¼ÆµÄ POD (Plain Old Document) ¸ñʽ¡£ Ïê¼û perlpod manpages¡£
Q2.3: ÓÐÄÄЩ Perl4 µÄ CGI »ò WWWµÄ libraries £¿
×î¹ãΪʹÓÃµÄ Perl4 CGI library ÊÇ Steve Brenner µÄ cgi-lib.pl¡£
Q2.4: ÓÐÄÄЩ¸ø Perl5 ʹÓÃµÄ CGI modules£¿ÎÒ¸ÃÓÃÄĸö£¿ÎªÊ²÷᣿
´ËÍ⣬Lincoln £¨Lincoln Stein£»CGI.pm µÄ×÷Õߣ©»¹Ð´ÁËÒ»±¾ÌÖÂÛ Web ºÍ CGI ·Ç³£ºÃµÄÊ飬½Ð How To Set Up and Maintain a World Wide Web Site¡£
¡¾ÒëÕß¡¿ ½¨Òé¶ÁÕß¶àʹÓà CGI.pm ¡£CGI::* ÒѾÓкܳ¤Ò»¶Îʱ¼äûÓиüÐÂÁË£¬¶ø CGI.pm Ôò²»¶ÏµÄÓиÄÁ¼µÄаæÍƳö£¬²¢ÒѼÓÈë¶Ô FastCGI µÄÖ§Ô®£¬Òò´Ë¶Ô FastCGI µÄʹÓà ÕßÒ²Ï൱·½±ã¡£´ËÍ⣬mod_perl £¨Apache µÄ perl module£©ÖÐËù¸½µÄ CGI::XA£¬Ò²ÊÇÓÉ CGI.pm ¸Ä½ø¶øÀ´µÄ¡£ CGI.pm ÈÃʹÓÃÕßÃâ³ý×Ô¼º×öµÍ½××ÊÁÏ´¦Àí £¨ÈçÓ¡ HTTP ±êÍ·¡¢Ìæ form, cookies ×ÊÁϽâÂëµÈ£©µÄÂé·³¡£
ÒÔÉÏÈþÕß¾ùÓÐÄÜÁ¦´¦Àí multipart form ×ÊÁÏ£¨¼´ÉÏ´«£©¡£
Q2.5: Ϊʲ÷áÕâ÷á¶à perl CGI libraries ¶¼ÊÇ object-oriented £¨Îï¼þµ¼Ïò£©µÄ£¿ÎÒ¶ÔÓÃÎï¼þµ¼ÏòÀ´Ð´³ÌʽһÇϲ»Í¨¡£ÄѵÀ¾ÍûÓмòµ¥Ò»µã£¬¸ø²»»áÎï¼þµ¼ÏòµÄÈËʹÓÃµÄ libraries Âð£¿Îï¼þµ¼ÏòÓжàÄÑ£¿
ÆäʵʹÓÃÎï¼þµ¼ÏòµÄ modules ²¢²»ÄÑ¡£ÏÈÈ¥¿´¿´ Tom Christiansen µÄ Easy Intro to Using Perl Objects £¨¼òµ¥½éÉÜÈçºÎʹÓà Perl Îï¼þ£©°É¡£
ǰͷÌáµ½µÄ CGI modules ÓÃÆðÀ´ÕæµÄÊǺÜÈÝÒ×£¡ÕâÀïÓÐÒ»¸öÓà CGI Lite Ó¡³ö form ×ÊÁϵÄʵÀý*£º
¡¾ÒëÕß¡¿CGI.pm µÄʹÓÃ˵Ã÷ÖÐÓиü¶à·¶Àý¿É¹©²Î¿¼¡£
#!/usr/local/bin/perl -w
use CGI_Lite;
$cgi = new CGI_Lite;
%data = $cgi->parse_form_data;
print "Content-type: text/plain", "\n\n";
foreach $key (keys %data) {
print $key, " = ", $data{$key}, "\n";
}
exit 0;
ҪעÒâµÄÊÇ£¬¼´Ê¹Äú»úÆ÷É쵀 Perl ²»ÊÇÄú×°µÄ£¨Äú²»ÊÇϵͳ¹ÜÀíÕߣ©£¬»òÊÇÄúȨÏÞ²» ¹»ÎÞ·¨½«ÕâЩ modules ºÍÆäËûµÄ Perl library µµ°¸°²×°ÔÚͬһ¸öµØ·½£¬Äú»¹ ÊÇ¿ÉÒÔʹÓÃÕâЩ modules µÄ -- Ö»Òª½«ËüÃǰÚÔÚÒ»¸ö×Ô¼º·½±ãµÄµØ·½£¬È»ááÔÚ ÄúµÄ script ¿ªÊ¼´¦¼ÓÉÏ*£º
BEGIN {
unshift @INC, "/your/dir/favorite/place";
}
¡¾ÒëÕß¡¿½¨Òé¸ÄÓýÏеķ½Ê½£º
use lib qw(/your/dir/favorite/place);
ºÃ¡£ÒÔÏÂÊÇÒ»¸öÓõ½ CGI::* modules µÄÀý×Ó£º
#!/usr/local/bin/perl -w
use CGI::Form;
$cgi_form = new CGI::Form;
print <<'End_of_Header';
<HTML>
<HEAD><TITLE>¿´×ÅÎÒ×ö£¡</TITLE></HEAD>
<BODY>
<H1>¿´×ÅÎÒ×ö£¡</H1>
End_of_Header
print $form->startform;
## ²úÉúÒ»¸öµ¥ÐÐÊäÈëÀ¸Î» (text field)
print 'ÐÕÃû£º ';
print $form->textfield('name'), "<BR>\n";
## ²úÉúÒ»×鵥ѡ°´Å¦ (radio buttons)
print '<P>ÄúסÄĶù£º <BR>';
print $form->radio_group(-name => 'where',
-values => ['±±ÃÀÖÞ',
'ÄÏÃÀÖÞ',
'Å·ÖÞ',
'°ÄÖÞ',
'ÑÇÖÞ',
'Äϼ«ÖÞ'],
-default => '±±ÃÀÖÞ',
-linebreak => 'true');
## ²úÉúÒ»¸ö¶àÐÐÊäÈëÀ¸Î» (textarea)
print 'Òâ¼û£º ';
print $form->textarea('comments', undef, 5, 40);
print "<P>";
print $form->reset;
print $form->defaults;
print $form->submit('Ëͳö£¡', 'Submit');
print $form->endform;
print "</BODY></HTML>";
reset¡¢defaults£¬¼°submitÈþÖÖ·½·¨( methods ) »á²ú Éú²»Í¬µÄÀàÐ͵İ´Å¥¡£reset Õâ¸ö°´Å¥ÈÃÄú°ÑĿǰ form À¸Î»ÖÐËùÌîµÄ×ÊÁÏÏ´µô£¬ ²¢ÏÔʾÊôì¶ÉÏÒ»¸ö״̬£¨»ò»ØºÏ£©µÄ×ÊÁÏ¡£ defaults Õâ¸ö°´Å¥ÔòÊǽ«form À¸Î» ×ÊÁϳ¹µ×Ï´È¥¡£»¹ÓÐ submit Õâ¸ö·½·¨²úÉúÒ»¸öËͳöÅ¥ÒÔ±ãÈÃÈ˽«×ÊÁÏËÍÖÁ server ´¦¡£
Äú¿´£¬²»ÊǺÜÈÝÒ×Âð£¿
3.0 - CGI Óë WWW Server
Q3.1: ÎÒµÄ Perl CGI ³ÌʽҪ·ÅÔÚÄÄÀïÖ´ÐУ¿cgi-bin Õâ¸öĿ¼ÊÇ×öÉõ÷áÓõģ¿
server ͨ³£ÊÇÉ趨³ÉÈ¥Ö´ÐзÅÔÚ ``cgi-bin'' Ŀ¼µ×Ï嵀 CGI ³Ìʽ¡£²»¹ý£¬ server ¹ÜÀíÕßͬʱҲ¿ÉÒÔÔÚÉ趨µµÖÐÉ趨 aliases£¬ÈÃËùÓк¬Ä³Ð©¸±µµÃû£¨Èç .cgi¡¢.pl£©µÄ scripts ¶¼ÄÜÖ´ÐÐ*¡£
¡¾ÒëÕß¡¿É趨 CGI aliases ºÍ¸±µµÃû¹ÌÈ»ºÜ·½±ã£¬µ« server ¹ÜÀíÕßÐë×¢Òâµ½Ïà ¹ØµÄ°²È«ÎÊÌâ¡£
Q3.2: ʲ÷áÊǵµ°¸Ê¹ÓÃȨÏÞ£¿ÔõÑù¸Ä£¿
µµ°¸È¨ÏÞÊǸù¾ÝʹÓÃÕßʶ±ð´úºÅ£¨ÓÖ³Æ uid£©£¬ÒÔ¼°ËûÃÇËùÊôµÄÍÅÌåÀ´¾ö¶¨ÊÇ·ñ¸³ ÓëʹÓÃÕß¶Á¡¢Ð´£¬ºÍÖ´ÐÐijµµ°¸µÄȨÀû¡£Äú¿ÉʹÓà chmod Õâ¸öÖ¸ÁîÈ¥Ð޸ĵµ°¸µÄ ʹÓÃȨÏÞ¡£ÀýÈ磺
% ls -ls form.cgi
1 -rwx------ 1 shishir 974 Oct 31 22:15 form.cgi*
´ËÒ»µµ°¸µÄȨÏÞΪ 0700£¨°Ë½øÖÆ£©£¬Òâζ×ÅûÓÐÈË£¨µµ°¸ËùÓÐÈ˳ýÍ⣩Äܹ»¶ÁÈ¡¡¢ д½ø£¬»òÖ´ÐÐÕâ¸öµµ°¸¡£ÎÒÃÇ¿ÉÒÔÓà chmod Õâ¸öÖ¸ÁîÈ¥ÐÞ¸ÄËüµÄȨ ÏÞ£º
% chmod 755 form.cgi
% ls -ls form.cgi
1 -rwxr-xr-x 1 shishir 974 Oct 31 22:15 form.cgi*
ÕâÑùÒ»À´£¬È¨Ï޾ͱäÁË¡£ÏÖÔÚºÍ ``shishir'' ÔÚͬһ¸öÍÅÌåµÄʹÓÃÕߣ¬»¹ÓÐÆäËû ÈκεÄʹÓÃÕß¶¼ÓÐȨÀûÈ¥¶ÁÈ¡ºÍÖ´ÐÐÕâ¸öµµ°¸ÁË¡£
ÈçÓûÖª chmod Ö¸Áî¸÷°Ë½øÖÆÊýÂëËù´ú±íµÄº¬Ò⣬Çë²ÎÔÄ chmod manpagesµÄ˵Ã÷¡£
Q3.3: Perl Ó¦¸Ã°²×°ÔÚÄÄÀï²Å¿ÉÒÔÖ´ÐÐËü£¿
Perl ¿ÉÒÔ°²×°ÔÚϵͳÉÏÈκÎÒ»¸ö½ÇÂ䣡ÄúΨһҪעÒâµÄÊÇ server ²»ÄÜÔÚchroot µÄ»·¾³ÏÂÅÜ£¬·ñÔòËü±ãÎÞ·¨ÅÜ perl ½âÒëÆ÷¡£»»ÑÔÖ®£¬ÏµÍ³¹ÜÀíÕß¿ÉÒ԰ѸùĿ¼ ¸Ä±ä£¬Èà ``/'' Ö¸µ½ÁíÒ»¸öĿ¼£¬¶ø²»ÊÇʵ¼ÊÕæÕýµÄ¸ùĿ¼(``/'')¡£
Q3.4: ÎÒΪʲ÷áÒ»Ö±µÃµ½ ``Server: Error 500'' µÄѶϢ£¿
ÒÔϼ¸ÖÖÇéÐλᴥ·¢Õâ¸ö´íÎóѶϢ£º
Q3.5: ÎÒÊÔ×Å´ò¿ªÒ»¸öµµ°¸£¬Ïë°Ñ×ÊÁÏ´¢´æÔÚÀïÍ·£¬µ«ÊÇ open() µÄÖ¸Áîʧ°ÜÁË¡£µ½µ×ÊÇÔõ÷á¸ãµÄ£¿
Ò»°ã˵À´£¬HTTP server ÊÇÒÔ ``nobody''¡¢``www''£¬»òÆäËûÕâÀàȨÏ޵͵ÄʹÓà ÕßµÄÉí·ÝÀ´Åܵġ£ÒòΪÕâ¸öÔµ¹Ê£¬Äú´òËãÔÚÆäÖÐÖÆÔìеµ°¸µÄĿ¼£¬¶Ô server ÅÜµÄ Ê¹ÓÃÕß ID ±ØÐëÒªÊÇ¿Éд(writable)²ÅÐС£
ΪÁËÈ·¶¨Æð¼û£¬Äúÿ´Î¶¼Ó¦¸ÃÏȼì²é open Õâ¸öÖ¸ÁîËͻصĽáÊø×´Ì¬(return status)£¬¿´¿´ open ÓÐûÓгɹ¦¡£
open(FILE, "/abc/data.txt")
|| error("Could not open file /abc/data.txt");
.
.
.
sub error {
my($message) = @_;
print <<End_of_Error;
Content-type: text/html
Status: 500 CGI Error
<HTML>
<HEAD><TITLE>CGI Error</TITLE></HEAD>
<BODY>
<H1>Oops! Error</H1>
<HR>
$message
<HR>
</BODY>
</HTML>
End_of_Error
}
4.0 £ ³ÌʽÉè¼ÆÒÉÄÑÔÓÖ¢
Q4.1: ÎÒÏëÈà user ÌîµÄ form ×ÊÁÏ×Ô¶¯¼Ä¸øÎÒ£¬¸ÃÔõ÷á×ö£¿ÓÐûÓз¶Àý£¿
Æäʵ×öÕâ¸öºÜÈÝÒס£ÄúµÄ CGI script ±ØÐëÄÜ×öµ½ÕâÁ½¼þÊ£º
ÎÒÃǾͼÙÉèÄúÓõÄÊÇ CGI::* Ä£×é¡£Äú¿ÉÓÃÒÔÏµķ½·¨È¥½Ð sendmail£º
$cgi_form = new CGI::Form;
$from = $cgi_form->param('from');
$name = $cgi_form->param('name');
$to = $cgi_form->param('to');
$subject = $cgi_form->param('subject');
$message = $cgi_form->param('message');
open SENDMAIL, "| /usr/bin/sendmail -t -n";
print SENDMAIL <<End_of_Mail;
From: $from <$name>
To: $to
Reply-To: $from
Subject: $subject
$message
End_of_Mail
ÓÐÒ»¸ö¸Ã×¢ÒâµÄµØ·½ÊÇ ``Reply-To:'' µÄÐÅÍ·¡£ÓÉì¶ server ÊÇÒÔ ``nobody''Õâ ¸öʹÓÃÕßµÄÉí·ÝÀ´ÅÜ£¬ÐÅÍ·µÄµØ·½¿ÉÄܻᱻ¸ã»µ£¨ÓÈÆäÊǵ±ÓÐÈËÏë»ØÕâ·âÐŵÄʱáᣩ¡£ ¼ÓÉÏ ``Reply-To'' µÄÐÅÍ·Õâ¸öÎÊÌâ±ã½â¾öÁË¡£
ÍøÂ·ÉÏÓÐÐí¶àµÄ mail ÇþµÀ (gateway)* ÊÇÒÔµ×ÏÂÕâÖÖ·½·¨À´ËÍ mail£º
¡¾ÒëÕß¡¿gateway ÔÚ´ËÖ¸ËÍ email µÄ CGI ³Ìʽ
open MAIL, "| mail -s 'Subject' $to";
^
|
+-- ¿ÉÄÜ»á³öÎÊÌâµÄ©¶´£¡£¡£¡
Èç¹ûÄúûÓÐÏȼì²é¿´ $to Õâ¸ö±äÊýÓÐûÓÐÄÚº¬ shell µÄÌØÊâ·ûºÅ (metacharacters)£¬ÄúÊÇÔÚ×ÔÌÖ¿à³Ô£¡Æ©È磬Èç¹ûÄĸö¶ñÁ user ÊäÈëÁËÒÔϵÄ×Ê ÁÏ£º
; rm -fr / ;
ÄÇ÷áÄúµÄÂé·³¿É´óÁË*¡£
¡¾ÒëÕß¡¿ÕâÀïÍ·µÄ ``;'' ±ãÊÇÒ»¸öΣÏÕµÄ shell metacharacter¡£ÁíÒ»¸öΣÏյķûºÅÊÇ ``&''¡£
ÔÚÕâ¸ö¼ÙÏëµÄÇé¿öÖУ¬ÓжàÉÙ¸öµµ°¸»á±»Ô¶·½µÄ user ¸øÉ±µô£¬»¹µÃÊÓ server ÅܵÄʹÓÃÕßµÄȨÏÞ¶ø¶¨£¨Õâ¾ÍÊÇΪʲ÷á server ÒªÒÔµÍȨÏÞʹÓÃÕßÉí·ÝÅܵÄÔÒò£©¡£ ÖÁÉÙÄÇЩÓÉ CGI ³ÌÊ½ÖÆÔì³öÀ´£¬µ«ÓÖûÓб¸·ÝµÄµµ°¸£¬ÊÇÕæµÄÒª¸úËüÃÇÓÀ±ðÁË¡£
; mail joe@crackerland.org </etc/passwd
ÄÇÄúµÄ CGI script ¾ÍÌæÄú°Ñ /etc/passwd ¸ø¹°ÊÖËÍÉÏÁË¡£Õâ¶ÔÒ»¸ö¡¸Î´¼Ó¹¤¡¹µÄ Linux¡¢SunOS 4.1£¬»¹ÓÐÆäËûÈκÎû°²×° shadow-password µÄ UNIX ϵͳÀ´Ëµ£¬ ʵÔÚ²»Ì«ºÃÍæ¡£Èç¹û server ´íÎóµØÅÜÁË root£¬ÄÇ÷á¾ÍËã×°ÁË shadow-password ҲûÓÐÓã¬ÒòΪԶ·½µÄ cracker ÉõÖÁ¿ÉÒÔÈÃÕâ¸ö CGI µÄ email script ¸øËûËÍ /etc/shadow £¨ÊÓϵͳ¶ø¶¨£¬²»Ò»¶¨ÔÚ /etc µ×Ï»ò½ÐÕâ¸öÃû×Ö£©¡£
Q4.2: ¸Õ²ÅÕâ¸öÓà form ËÍÐÅµÄ script ¿´ÆðÀ´ÓеãÄÑ¡£ÎªÊ²÷᲻Ǭ´àÓà ``mailto: URL''£¬ÕâÑù user ÌîÈëµÄ×ÊÁϾͿÉÒԼĸøÎÒÁË£¿
ºÜ²»Ðҵأ¬mailto: µÄÖ¸Áî²¢²»ÊÇËùÓеÄä¯ÀÀÆ÷¶¼Ö§Ô®¡£Èç¹ûÄúÔÚµµ°¸ÖÐÓÃÁËËüµÄ»°£¬ »áÏÞÖÆÁËÄÇЩʹÓÃûÓÐÖ§Ô® mailto: µÄä¯ÀÀÆ÷µÄÈË£¬ÈÃËûÃÇÎÞ·¨ËÍ mail ¸øÄú*¡£
¡¾ÒëÕß¡¿¾¡¹ÜÈç´Ë£¬Äú»òÐí²»»áÔÚºõÄÇÕ¼¼«ÉÙÊý±ÈÀýµÄʹÓÃÕߣ¨Netscape ¡¢ IE£¬ ºÍ lynx µÈä¯ÀÀÆ÷¶¼Ö§Ô® mailto: £©¡£
Q4.3: ÎÒÒªÈçºÎÔÚ UNIX ÒÔÍâµÄƽ̨ÉÏ×ö Perl-CGI£¬Æ©Èç Mac¡¢MS-DOS¡¢ Windows ¼° NT£¿ÎÒµÄ Perl CGI ³ÌʽÄܲ»ÄÜÔÚÕâЩƽ̨֮¼ä»¥ÏàÒÆÖ²ÄØ£¿Äܲ»ÄÜ ºÜÖ±½Ó£¬Ã»ÓÐÂé·³£¿ÎÒÔÚ UNIX Ö÷»úÉÏÓÐÕʺţ¬µ«ÊǶ¼ÊÇÏÈÔÚ Windows/Mac ÉÏ×ö¡£ ÎÒÒªÈçºÎÔÚÎÒ×Ô¼ºµÄ»úÆ÷ÉϲâÊÔдºÃµÄ CGI scripts*£¿
Perl ÒѾ±»ÒÆÖ²µ½ÉÏÊöËùÓÐµÄÆ½Ì¨ÉÏÁË¡£Òò´Ë£¬ÄúµÄ Perl CGI ³ÌʽÕÕÀíÓ¦²»ÄÑ ÒÆÖ²¡£µ«Èç¹ûÄúʹÓõ½Ò»Ð© UNIX ÉϵijÌʽ£¬ÄÇ÷áÄúµÄ³Ìʽ¿ÉÄܻ᲻ºÃÒÆÖ²¡£Èç¹û ÄúÖ»ÊÇ×ö×ÊÁÏ´¦Àí£¬»ò¿ªÆô¡¢¶Á½øµµ°¸µÈµÄ»°£¬ÄÇ÷áÒÆÖ²Ó¦¸Ã²»»áÓÐÎÊÌâ¡£
¡¾ÒëÕß¡¿Ô FAQ ²¢Î´»Ø´ð×îááÕâ¸öÎÊÌâ¡£ÒªÔÚ Windows/OS2/Mac µÈ·Ç UNIX ƽ̨ ÉϲâʽÄúµÄ scripts £¬Äú¿ÉÒÔʹÓà CGI.pm £¨Ö§Ô®ÒÔÉÏËùÓÐÆ½Ì¨£©£¬ÅäºÏ Q4.19 ÖÐÌáʾµÄ³ý´í¼¼ÇÉ £¬»òÔÚ×Ô¼ºµÄ»úÆ÷Éϰ²×° HTTP server ÈíÌå¡£Èç´Ë¾Í²»ÓÃÐÁ¿àµÄÁ¬ÉÏÖ÷»úÈ¥²âʽÁË¡£
Q4.4: ÔÚ Perl CGI ³ÌʽÖУ¬STDERR £¨±ê×¼´íÎóѶϢ)¡¢STDIN (±ê×¼ÊäÈ룩£¬ºÍ STDOUT £¨±ê×¼Êä³ö£© ¸÷ÊÇÁ¬µ½ºÎ´¦£¿
ÔÚ CGI »·¾³Ï£¬STDERR »áÖ¸Ïò server µÄ ´íÎóѶϢµµ (error log)¡£Äú¿ÉÒÔÉÆ ¼ÓÀûÓÃÕâ¸öÌØÐÔ£¬°Ñ³ý´íµÄѶϢдµ½ STDERR£¬È»ááÄú±ã¿É½å²é¿´´íÎóѶϢµµÀ´°ï Äú³ý´í¡£
STDIN ºÍ STDOUT Ôò¶¼ºÍä¯ÀÀÆ÷ÏàÁ¬¡£Êµ¼ÊÉÏ£¬STDIN Á¬µÄÊÇ server¡£ server »áÏȽâ¶Á client £¨»òä¯ÀÀÆ÷£©ËͳöµÄÇëÇóºÍ×ÊÁÏ£¬ÔÙ½«ÆäË͸ø script¡£
ÄúÒ²¿ÉÒÔÓý« STDERR ¡¸¸´ÖÆ¡¹µ½ STDOUT µÄ·½·¨À´×¥´íÎóѶϢ¡£ÕâÓ¦¸ÃÔÚ script ¿¿Ç°Í·µÄµØ·½×ö£¨µ«Ó¦ÔÚÄúÊä³öºÏÊ浀 HTTP ±êÍ·Ö®áᣩ£º
open STDERR, ">&STDOUT";
Õâ»á½«ËùÓеĴíÎóѶϢ¶¼×ªË͵½ STDOUT £¨¼´ä¯ÀÀÆ÷£© È¥¡£
Q4.5: ÈçºÎд¼ÆÊýÆ÷£¿
¼ÆÊýÆ÷Ò»ÀàµÄ³ÌʽÏ൱Á÷ÐС£Æäʵ¼ÆÊýÆ÷µÄÔÀíºÜ¼òµ¥£¬²»¹ýÊÇ£º
ÒÔÏÂÊÇÒ»¸ö¼òµ¥µÄ¼ÆÊýÆ÷µÄʵÀý£º
#!/usr/local/bin/perl -w
$counter = "/home/shishir/counter.dat";
print "Content-type: text/plain", "\n\n";
open(FILE, $counter) || die "Cannot read from the counter file.\n";
flock FILE, 2;
$visitors = <FILE>;
flock FILE, 8;
close FILE;
open(FILE, ">$counter") || die "Cannot write to counter file.\n";
flock FILE, 2;
print FILE $visitors;
flock FILE, 8;
close FILE;
ÏÖÔÚÄú¿ÉÒÔÔÚ HTML µµ°¸ÖÐÓà SSI (Server Side Include; ËÅ·þ¶Ë²åÈë)* µÄ·½Ê½À´ÏÔʾ¸Ã¼ÆÊýÆ÷£º
¡¾ÒëÕß¡¿SSI ÊÇ server ËùÌṩµÄÒ»ÏÄÜ£¬¿É½«¶¯Ì¬×ÊÁÏ£¬ÀýÈçÈÕÆÚºÍʱ¼ä£¬»ò ¼ÆÊýÆ÷ÏÔʾµÈ£¬ÔÚ¿Í»§ÇëÇóÒ»ÍøÒ³Ê±¼´Ê±¼ÓÈë¸ÃÎļþÖС£Ö§Ô® SSI µÄ servers °ü À¨ÁË NCSA¡¢Apache£¬ºÍNetscape Enterprise Server µÈ¡£ SSI ¹ÌÈ»ÊÇÒ»Ïî±ãÀûµÄÉè¼Æ£¬µ«Èç¹ý·ÝÀÄÓà £¬²»µ«»á¼õµÍ server ÐÔÄÜ£¬¸ü¿ÉÄÜÕÐÀ´°²È«ÉϵÄΣ»ú¡£
ÄúÊǵÚ
<!--#exec cgi="/cgi-bin/counter.pl-->
λ¹âÁÙ±¾Õ¾µÄ¿ÍÈË¡£
Q4.6: ÒªÈçºÎÓÃÒ»¸ö Perl µÄÈ¡´úÖ¸ÁËùÓÐ HTML ±êÇ©´ÓÒ»·ÝÎļþÖÐɾ³ý£¿
ÒÔÏÂÕâ¸ö¼òµ¥µÄ regular expression ¿ÉÓÃÀ´È¥³ý HTML ±êÇ©*£º
¡¾ÒëÕß¡¿
- ÒªÈÃÕâ¸ö regular expression ¿çÐÐÖ´ÐУ¬Äú±ØÐëÏȽ«ÄúµÄ script ÓÉÔ¤ÉèµÄ °´ÐÐÖ´ÐÐģʽ (line mode) ¸ÄΪ°´¶ÎÖ´ÐÐģʽ (paragraph mode)¡£Äú¿ÉÒÔÔÚÖ¸Áî ÁÐÒÔ£º
perl -00 -we '...'
µÄ·½Ê½£»»òÊÇÔÚ script ÖÐÒÔ£º
#!/usr/bin/perl -00
»ò
$/ = "";
µÄ·½Ê½À´É趨°´¶ÎÖ´ÐÐģʽ¡£
- ³ý·ÇÄúÐèÒª¶ÔÓûɾ³ýµÄ HTML ±êÇ©ÖеÄÄÚÈÝ×ö½øÒ»²½µÄ´¦Àí»òÀûÓ㬷ñÔò±¾Àý ÖÐ×îÍâΧµÄÒ»¶ÔÀ¨»¡¿ÉÈ¥µô¡£
$line =~ s/<(([^ >]|\n)*)>//g;
ÏêϸµÄÏà¹Ø×ÊÁÏ£¬Çë¿´ Tom [Christiansen] µÄ striphtml ³Ìʽ£¬ Õâ¸ö³ÌʽͬʱҲÊÕ¼ÔÚËûµÄtour of perl5 regexps ½²ÒåÖС£
Q4.7: ÒªÈçºÎÖªµÀÊÇË£¯ÄĄ̈»úÆ÷£¯Äĸöä¯ÀÀÆ÷Ö´ÐÐÁËÎҵijÌʽ£¿
Äú¿ÉÒÔ´Ó HTTP_USER_AGENT Õâ¸ö»·¾³±äÊýµÃ֪ʹÓÃÕßËùÓõÄä¯ÀÀÆ÷¡£
¡¾Õª×Ô WWW FAQ¡¿
ÄúµÄ CGI script ¿ÉÒÔÀûÓÃÎå¸öÖØÒªµÄ»·¾³±äÊýÀ´°ïæ±æÊ¶Ê¹ÓÃÕßµÄÉí·Ý¡£
Õâ¸ö»·¾³±äÊýÀíÂÛÉÏÓ¦ÉèΪʹÓÃÕßµÄemailµØÖ·¡£µ«ÊÇÐí¶àä¯ÀÀÆ÷ÍêÈ«²»¼ÓÒÔÉ趨 ¡¾¼´²»Ö§Ô®¡¿£¬¶ø´ó²¿·ÝÖ§Ô®Õâ¸ö±äÊýµÄä¯ÀÀÆ÷ÓÖÈÃʹÓÃÕß×ÔÓÉÉ趨Õâ¸öÖµ¡£Òò´Ë£¬ ½¨Òé¶ÁÕß¶¥¶àÄÃËüÀ´×öΪ email form ÖлØÐŵØÖ·µÄÔ¤ÉèÖµ¡£
Õâ¸ö±äÊýΨÓе± script ÔÚ°²È«ÈÏÖ¤µÄ±£»¤ÏÂÖ´ÐÐʱ²Å»á±»É趨¡£´Ó AUTH_TYPE Õâ¸ö±äÊý¿ÉÒÔÖªµÀËùÓõÄÈÏÖ¤·½·¨ÊÇÊôì¶ÄÄÒ»¸öÀàÐÍ¡£REMOTE_USER Ôò»áº¬ÓÐÕý½Ó ÊÜÈÏÖ¤µÄʹÓÃÕßµÄÃû×Ö¡£Òª×¢ÒâµÄÊÇ£¬REMOTE_USER Ö»ÓÐÔÚʹÓð²È«ÈÏÖ¤µÄʱºò²Å »á±»É趨£¬¶øÇÒ²»ÊÇËùÓÐµÄ servers ¶¼Ö§Ô®¡£ÔÚ NCSA server µ×Ï£¬Èç¹ûÈÏÖ¤Ëù ʹÓõĴ«Ê䷽ʽûÓÐÁÐÈë access.conf µµÖÐ(Ò²¾ÍÊÇ˵£¬Ó¦Ê¹Óà <Limit GET POST>£¬¶ø²»Êǽö½öÓÃÔ¤ÉèµÄ <Limit GET>)£¬ÈÏÖ¤¿ÉÄÜ»á³öÈËÒâÍâµØÊ§ °Ü¡£
Èç¹û server ÄÜÁ¬½ÓÉϿͻ§¶ËµÄ IDENT server£¬Ëü»á½«Õâ¸ö±äÊýÉè³ÉÔ¶·½Ê¹ÓÃÕß µÄÉí·Ý¡£µ«ÓÉì¶ÏòIDENT server ²éѯµÄ¶¯×÷Ì«»¨Ê±¼ä£¬´ó²¿·ÝµÄ servers ¶¼°ÑÕâ ÏÄܹصô¡£¸üºÎ¿ö£¬¿Í»§¶ËµÄ»úÆ÷ÊÇ·ñ»á»ØÓ¦²éѯ£¬ÓÖÊÇ·ñ»á³ÏʵÒÔ¶Ô£¬¶¼ÊÇÎÞ ·¨È·¶¨µÄ¡£
Õâ¸ö±äÊýµÄÉ趨ֵ²¢²»°üÀ¨Ô¶¶ËʹÓÃÕßµÄÕæÊµÉí·Ý£¬µ«ÊÇ»áÌṩʹÓÃÕßÕýÓÃÀ´Á¬Ïß µÄ»úÆ÷µÄ×ÊÁÏ¡£REMOTE_ADDR »á°üº¬¿Í»§¶ËµÄ IP λַ£¬ÒÔÓõã¸ô¿ªµÄÊ®½øÎ»Êý×Ö µÄÐÎʽÀ´±íʾ¡£ÓÉì¶ÎÒÃÇÎÞ·¨È·ÇеÃ֪ʹÓÃÕßµÄÕæÊµÉí·Ý [Ç뿴ǰһ¸ö»·¾³±äÊýµÄ ˵Ã÷]£¬ÓеÄʱºòʹÓÿÉÈ·ÈϵÄλַÀ´Ìæ´ú£¬²»Ê§ÎªÒ»¸ö¿ÉÐеıäͨ·½·¨¡£ºÍǰһ Ïî REMOTE_HOST ²»Í¬µÄÊÇ£¬Õâ¸ö±äÊýÒ»¶¨»á±»É趨¡£»¹ÓУ¬±ðÍüÁËÄú¿ÉÄܻᷢÏÖ ËùÓÐʹÓÃͬһ¸ö proxy £¨´úÀíÈË£© server µÄʹÓÃÕߵĻúÆ÷λַ¶¼±ä³ÉÁËÄÇ̨ proxy server µÄλַ¡£
¡¾ÕªÂ¼×Ô WWW FAQ ²¿·ÝÍê¡¿
Q4.8: È˼ҿ´µÃµ½ÎÒµÄ Perl CGI ³ÌʽÂð£¿Èç¹ûÊÇÕâÑùµÄ»°£¬ÄDz»¾ÍÈÃËûÃÇÖªµÀÎҵijÌʽÊÇÔõ÷áÔË×÷µÄÁË¡£ÕâÊǸö°²È«Â©¶´Âð£¿ÎÒÒªÔõ÷á°ÑËüÒþ²ØÆðÀ´£¿
Èç¹ûÄú½«ÄúµÄ server Éè³É¶ÔËùÓÐÔÚÒ»¸öÌØ¶¨Ä¿Â¼£¨Èç cgi-bin£©Ïµĵµ°¸£¬»òÕß ÊǾßÓÐijЩ¸±µµÃû£¨Èç ``.pl''¡¢``.tcl''¡¢``.sh''£©µÄµµ°¸Ò»Âɶ¼ÒÔ CGI ³Ìʽ¿´ ´ý£¬ÄÇ÷á server Ö»»áÖ´ÐÐÕâЩ³Ìʽ¡£ÖÁì¶Ê¹ÓÃÕßÊÇÎÞ·¨¿´µ½ script ±¾ÉíµÄÄÚÈÝ µÄ¡£
µ«ÊÇÈç¹ûÄúÔÊÐíÈËÃÇ¿´ÄúµÄ script (Æ©Èç°ÑËü·Åµ½ HTML ÎļþµÄ¸ùĿ¼ ÏÂ)£¬ÄÇ÷áÖ»ÒªÊÇÕâ¸ö³ÌʽûÓа²È«ÉϵÄ©¶´£¬Õâ²¢²»ÄÜËãÊǰ²È«ÎÊÌâ¡£Èç ¹ûÕâ¸ö³ÌÊ½ÕæµÄÓа²È«ÉÏµÄÆÆÕÀ¶øÄúÓÖÔÊÐíʹÓÃÕß¿´Õâ¸ö³Ìʽ£¬ÄÇ÷áËûÃDZãÓлú¿É ³Ë£¬½ø¶øÀûÓÃÕâ¸öÈõµã¡£
¡¾ÒëÕß¡¿ÉÏÃæÕâ¶ÎÔÎÄ×÷ÕßÊǾÍÔ¶·½µÄ¿Í»§¶ËµÄʹÓÃÕß¶øÑÔ¡£ºÍÕâ¸öÖ÷ÌâÏà¹ØµÄÒ» ¸ö³£ÎÊÎÊÌâÊÇ£º
Q: ÎÒµÄ Perl CGI scripts ±ØÐ뽫ȨÏÞÉèΪȫÊÀ½ç¿É¶Á¡£¿ÉÊÇÕâÑùÒ»À´£¬ºÍÎÒͬ »úÆ÷ÓÐÕÊ»§µÄÈË£¬Ö»ÒªÖªµÀÎҵijÌʽÃû³Æ£¬¾Í¿ÉÒÔä¯ÀÀÎÒµÄ Perl ³ÌʽµÄÄÚÈÝ£»ÓÈ Æäµ±ÆäÖÐÇ£Éæµ½ÃÜÂëµÄÎÊÌâʱ¡£
A: ÖÁÉÙÓÐÁ½¸ö½â¾ö·½·¨£¬Ò»¸ö¼òµ¥£¬Ò»¸ö¸´ÔÓ£º
¼òµ¥µÄ·½·¨ÊÇ£¬ÇëÄúµÄϵͳ¹ÜÀíÕߣ¨Èç¹û²»ÊÇÄú×Ô¼ºµÄ»°£©£¬½«ÄúµÄ CGI scripts ¼°ÃÜÂëµµ£¨Èç¹ûÄúÑ¡Ôñ½«ÃÜÂë´æ·ÅÔÚÁíÒ»¸öµµ°¸Öеϰ£©µÄËùÓÐÕßÉè³É Web server ÅܵÄʹÓÃÕߣ¨×î³£¼ûµÄÊÇʹÓÃÕß nobody £»Ê¹ÓÃȺ nogroup »ò nobody£©£¬ È»áὫ CGI scripts µÄʹÓÃȨÏÞÉ趨³É 550 (-r-xr-x---)£¬ÃÜÂëµµµÄȨÏÞÉè³É 440 (-r--r-----)¡£Èç´ËÒ»À´£¬Ò»·½ÃæÄúµÄ³ÌʽµÃÒÔÖ´ÐУ¬¶øÇÒÆäËûͬ»úÆ÷ÉÏµÄ Ê¹ÓÃÕßҲûÓа취͵¿´µ½ÄúµÄ³ÌʽºÍÃÜÂë¡£
±È½Ï¸´ÔӵĽâ¾ö·½·¨ÊÇÏÈÌô¸öÄÑÆÆµÄÃÜÂ뽫Õû¸ö³Ìʽ¼ÓÃÜÆðÀ´£¬È»ááÔÙʹÓà Filter::decrypt Õâ¸öÄ£×éÔÚÁÙÖ´ÐÐǰ½«Æä½â¿ª£¬Ôڴ˲»¶à˵¡£ÓÐÐËȤµÄ¶ÁÕßÇë¿´ Filter::decrypt µÄʹÓÃ˵Ã÷£»´ËÍâÐ嵀 perl FAQ µÚÈþ²¿·ÖÖÐÕâÒ»¶Î£º``How can I hide the source for my Perl program?'' £¬´ó¼ÒÒ²¿É²Î¿¼¡£
Q4.9: ÎÒÐèÒª½«Õû¸ö Perl library ¶¼¸´ÖƵ½ÎÒµÄ htdocs Ŀ¼µ×ÏÂÂð£¿
²»ÐèÒª¡£ÄúµÄ CGI scripts ¿ÉÒÔʹÓà server ºÍ Îļþ¸ùĿ¼֮ÍâµÄÈκεµ°¸£¬³ý ·Ç server ÊÇÔÚÒ»¸ö chroot µÄ»·¾³ÏÂÖ´ÐС£
Q4.10: ÎÒΪʲ÷á²»¸Ã½ÐʹÓÃÕßÊäÈëËûÃǵÄÃÜÂë»òÉí·ÝÖ¤×ֺŻòÐÅÓÿ¨ºÅÂ룿ÓÐÒ»¸ö TYPE="password" ²»ÊǾÍÊÇÄÃÀ´×öÕâ¸öµÄÂð£¿
No! form µÄ½éÃæÖÐÓÐÒ»¸ö ``password'' µÄÀ¸Î»£¬µ«ÊÇÄú²»Ó¦¸ÃÄÃËüÀ´´¦ ÀíÈκλúÃÜÐÔµÄ×ÊÁÏ¡£²»¸ÃÕâ÷á×öµÄÔÒòÊÇÒòΪËùÓÐµÄ form ×ÊÁÏ(°üÀ¨ ``password'' À¸) ¶¼ÊÇÒÔ´¿ÎÄ×ÖÐÎʽ£¬¶ø·ÇÒÔ¼ÓÃÜÐÎʽÓÉä¯ÀÀÆ÷ËÍÖÁ server¡£
Èç¹ûÄúÏëÒª°²È«µØ´«ËÍ×ÊÁÏ£¬ÄÇ÷áÄúÐèҪʹÓþßÓа²È«¹¦ÄÜµÄ server£¬ÀýÈç Netscape µÄ Commerce Server*¡£
¡¾ÒëÕß¡¿Apache SSL £¬ÀýÈç Stronghold °æ£¬Í¬Ñù¾ßÓÐÕâ¸ö¹¦ÄÜ¡£
Q4.11: ÎÒÒªÈçºÎ²úÉúרÃÅÌæ Netscape Éè¼ÆµÄÍøÒ³£¬ÒÔ±ðì¶ÊÀÉÏÆäËûµÄä¯ÀÀÆ÷£¿
Äú¿ÉÒÔ͸¹ý HTTP_USER_AGENT Õâ¸ö»·¾³±äÊýÔÚÄúµÄ CGI script ÖеÃÖªÊÇ·ñ Netscape ÕýÔÚÖ´ÐÐÄúµÄ script¡£ÒÔÏÂΪһÀý£º
$browser = $ENV{'HTTP_USER_AGENT'};
if ($browser =~ /Mozilla/) {
#
# Netscape
#
} else {
#
# Non Netscape
#
}
Q4.12: Ϊʲ÷áÎÒµÄ system() Ëù²úÉúµÄ×ÊÁÏÊä³ö˳Ðò²»¶Ô£¿
ÕâÊÇÓÉì¶±ê×¼Êä³öµÄ²úÉú·½Ê½Í¨³£ÊÇÏÈÀÛ»ýÏ൱µÄ×ÊÁÏÔÙÊä³ö(buffered)¡£Òª ÈÃÊä³öµÄ×ÊÁÏÒÔÕýÈ·µÄ˳ÐòÏÔʾ£¬Äú±ØÐë½åÓÉ $| Õâ¸ö±äÊýµÄÉ趨½« buffering µÄ ÌØÐԹصô¡£
Q4.13: ÎÒÌý˵ Netscape »áÖ§Ô® Java*¡£ÕâÊDz»ÊÇ˵ÎÒÏÖÔÚµÃÆú Perl£¬¸Ä Java ÁË£¿ÊDz»ÊǸÃÕâ÷á×ö£¿
¡¾ÒëÕß¡¿Ô FAQ ÒÑÓÐÏ൱һ¶Îʱ¼äδ¸üС£Õâ¾ä»°ÏÖÔÚÓ¦¸Ã¸Ä×÷¡¸Netscape ºÍ IE Á½´óä¯ÀÀÆ÷¶¼ÒÑÖ§Ô® Java¡¹¡£
²»¡¢²»¡¢²»¡£Java ºÍ CGI µÄ¸ÅÄîÍêÈ«²»Í¬¡£CGI ÊÇÔÚ server ¶ËÖ´ÐУ¬¶ø JavaÔòÊÇÔÚ client ¶ËÖ´ÐС£ÓÐЩ¶«Î÷£¨È綯»£©¿É½