home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _4e82bea3644a013377722515936aebd2 < prev    next >
Text File  |  2000-03-22  |  14KB  |  259 lines

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <HTML>
  3.  
  4. <HEAD>
  5. <TITLE>ActivePerl faq7 - Web Programming</TITLE>
  6. <LINK rev="made" href="mailto:support@ActiveState.com">
  7. <META name="GENERATOR" charset="iso-8859-1" content="Microsoft FrontPage 4.0">
  8. <META name="ProgId" content="FrontPage.Editor.Document">
  9. <LINK rel="STYLESHEET" href="../../Active.css" type="text/css" media="screen">
  10. </HEAD>
  11.  
  12. <BODY bgcolor="#ffffff">
  13.  
  14. <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  15.   <TR>
  16.     <TD class="block" valign="MIDDLE" width="100%" bgcolor="#cccccc"><STRONG>
  17.       <P class="block"> ActivePerl FAQ</P>
  18.       </STRONG></TD>
  19.   </TR>
  20. </TABLE>
  21. <UL>
  22.   <LI><A href="#NAME">NAME</A></LI>
  23.   <LI><A href="#DESCRIPTION">DESCRIPTION</A>
  24.     <UL>
  25.       <LI><A href="#What_is_HTTP_and_how_do_I_get_m">What is HTTP, and how do I get more information
  26.         on it?</A></LI>
  27.       <LI><A href="#What_is_CGI_and_how_do_I_get_mo">What is CGI, and how do I get more information
  28.         on it?</A></LI>
  29.       <LI><A href="#How_do_I_return_a_graphics_file_">How do I return a graphics file from a CGI
  30.         script?</A></LI>
  31.       <LI><A href="#My_CGI_scripts_don_t_seem_to_run">My CGI scripts don't seem to run right under
  32.         PerlIS.</A></LI>
  33.       <LI><A href="#How_does_my_script_know_if_it_s_">How does my script know if it's running under
  34.         ActivePerl or</A></LI>
  35.       <LI><A href="#What_CGI_modules_run_with_Perl_f">What CGI modules run with ActivePerl?</A></LI>
  36.       <LI><A href="#How_do_I_use_redirection_in_my_s">How do I use redirection in my script?</A></LI>
  37.       <LI><A href="#What_are_cookies_and_how_do_I_us">What are cookies and how do I use them?</A></LI>
  38.       <LI><A href="#How_do_I_get_the_e_mail_address_">How do I get the e-mail address of the user?</A></LI>
  39.       <LI><A href="#I_need_a_CGI_script_to_do_a_cert">I need a CGI script to do a certain task. Has
  40.         anyone done it before?</A></LI>
  41.       <LI><A href="#How_do_I_test_my_CGI_programs_th">How do I test my CGI programs that take
  42.         arguments without running</A></LI>
  43.       <LI><A href="#The_Content_Type_header_field_I">The Content-Type: header field I output from my
  44.         CGI script shows up</A></LI>
  45.       <LI><A href="#When_I_try_to_run_a_CGI_script_f">When I try to run a CGI script from my
  46.         browser, it tries to</A></LI>
  47.       <LI><A href="#What_s_Perl_for_WSAPI_">What's Perl for WSAPI?</A></LI>
  48.     </UL>
  49.   </LI>
  50.   <LI><A href="#AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></LI>
  51. </UL>
  52. <HR>
  53. <H1><A name="NAME">NAME</A></H1>
  54. <P>ActivePerl faq7 - Web Programming (CGI and PerlIS)</P>
  55. <HR>
  56. <H1><A name="DESCRIPTION">DESCRIPTION</A></H1>
  57. <P>Web development with ActivePerl</P>
  58. <HR>
  59. <H2><A name="What_is_HTTP_and_how_do_I_get_m">What is HTTP, and how do I get more information on it?</A></H2>
  60. <P>HTTP (HyperText Transfer Protocol) is the protocol that web browsers use to talk to web servers.
  61. The official specification for the HTTP standard is available on the W3 Consortium web server at:</P>
  62. <PRE>
  63.     <A href="http://www.w3.org/pub/WWW/Protocols/">http://www.w3.org/pub/WWW/Protocols/</A>
  64. </PRE>
  65. <P>Some more readable introductions can be found on the Yahoo HTTP page at:</P>
  66. <PRE>
  67.     <A href="http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTTP/">http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTTP/</A>
  68. </PRE>
  69. <HR>
  70. <H2><A name="What_is_CGI_and_how_do_I_get_mo">What is CGI, and how do I get more information on it?</A></H2>
  71. <P>CGI (Common Gateway Interface) is a protocol used by web servers to run server programs. Scripts
  72. that support the CGI protocol are sometimes called ``CGI scripts''; this leads to the unfortunate
  73. misperception that CGI is a language of its own.</P>
  74. <P>The classic information on CGI is available on the NCSA server at:</P>
  75. <PRE>
  76.     <A href="http://hoohoo.ncsa.uiuc.edu/cgi/">http://hoohoo.ncsa.uiuc.edu/cgi/</A>
  77. </PRE>
  78. <P>If you haven't read this, read it now. If it doesn't click for you, you can check the Yahoo CGI
  79. page at:</P>
  80. <PRE>
  81.     <A href="http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/">http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/CGI___Common_Gateway_Interface/</A>
  82. </PRE>
  83. <P>(All one URL)</P>
  84. <P>Try also the following URL for CGI programming in Perl:</P>
  85. <PRE>
  86.     <A href="http://www.perl.com/CPAN-local/doc/FAQs/cgi/perl-cgi-faq.html">http://www.perl.com/CPAN-local/doc/FAQs/cgi/perl-cgi-faq.html</A>
  87. </PRE>
  88. <P>If you still don't get it, try one of the ``get-rich-quick-by-writing-CGI-scripts'' books at your
  89. local bookstores.</P>
  90. <HR>
  91. <H2><A name="How_do_I_return_a_graphics_file_">How do I return a graphics file from a CGI script?</A></H2>
  92. <P>One of the big differences between UNIX and Win32 platforms is that on Win32 there's a difference
  93. between text or ASCII files and binary file. To return a graphics file, you need to specify that the
  94. file is a binary file, and that the standard output stream should accept binary data. Try something
  95. like this:</P>
  96. <PRE>
  97.     $MY_FILE_NAME = 'Penelope.jpg';
  98.     $CHUNK_SIZE = 4096;
  99.     
  100.     open( MY_FILE, "<$MY_FILE_NAME" )
  101.         or die( "Can't open $MY_FILE_NAME: $!\n" );
  102.     
  103.     print "Content-type: image/jpeg\r\n";
  104.     print "\r\n";
  105.     
  106.     binmode( MY_FILE ); # These are crucial!
  107.     binmode( STDOUT );
  108.     
  109.     while ( $cb = read( MY_FILE, $data, $CHUNK_SIZE ) ) {
  110.         print $data;
  111.     }
  112.     
  113.     close( MY_FILE );
  114. </PRE>
  115. <HR>
  116. <H2><A name="My_CGI_scripts_don_t_seem_to_run">My CGI scripts don't seem to run right under PerlIS.</A></H2>
  117. <P>Earlier versions of Perl for ISAPI did not output headers correctly, and this caused Perl for
  118. ISAPI scripts to misbehave. You could work around this in earlier versions of PerlIS by sending the
  119. headers at the beginning of your script like this:</P>
  120. <PRE>
  121.     print <<"END";
  122.     HTTP/1.0 200 OK
  123.     Content-Type: text/html
  124.     
  125.     END
  126. </PRE>
  127. <P>This is no longer necessary with the current version of Perl for ISAPI, as Perl for ISAPI sends
  128. the correct headers. The Registry value that governs this is <CODE>EnableCGIHeader</CODE>, a
  129. REG_DWORD value that is set to 1 by default. This value is stored under the Registry key
  130. HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlIS. If you need to turn off the automatic generation of
  131. the header, set this value to 0.</P>
  132. <HR>
  133. <H2><A name="How_does_my_script_know_if_it_s_">How does my script know if it's running under
  134. ActivePerl or Perl for ISAPI?</A></H2>
  135. <P>Perl for ISAPI sets an environment variable, <CODE>PERLXS</CODE>, for scripts that are executed
  136. under Perl for ISAPI.</P>
  137. <PRE>
  138.     my $running_under_perlis = $ENV{PERLXS} eq 'PerlIS';
  139. </PRE>
  140. <HR>
  141. <H2><A name="How_does_my_script_know_if_it_s_">How does my script know if it's running under
  142. ActivePerl or Perl for WebSite?</A></H2>
  143. <P>Perl for WebSite sets an environment variable, <CODE>PERLXS</CODE>, for scripts that are executed
  144. under Perl for WebSite.</P>
  145. <PRE>
  146.     my $running_under_perlws = $ENV{PERLXS} eq 'PerlWS';
  147. </PRE>
  148. <HR>
  149. <H2><A name="What_CGI_modules_run_with_Perl_f">What CGI modules run with ActivePerl?</A></H2>
  150. <P>The <EM>CGI.pm</EM> module works with ActivePerl. It's included with ActivePerl, and you can use
  151. it in your program with the statement <CODE>use CGI</CODE>. Complete documentation for the CGI
  152. module is embedded in the module, and can be read with <CODE>perldoc CGI</CODE>. Further
  153. documentation is available at:</P>
  154. <PRE>
  155.     <A href="http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html">http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html</A> 
  156. </PRE>
  157. <HR>
  158. <H2><A name="How_do_I_use_redirection_in_my_s">How do I use redirection in my script?</A></H2>
  159. <P>You can use redirection to point the client browser to another file or script, usually in a way
  160. that's invisible to the user. The CGI module provides the <CODE>redirect()</CODE> function for this
  161. purpose. The following code redirects the client browser to <A href="http://www.perl.com">http://www.perl.com</A>
  162. and works with both CGI or PerlIS:</P>
  163. <PRE>
  164.     use CGI qw(:standard);
  165.     print redirect('<A href="http://www.perl.com">http://www.perl.com</A>');
  166. </PRE>
  167. <HR>
  168. <H2><A name="What_are_cookies_and_how_do_I_us">What are cookies and how do I use them?</A></H2>
  169. <P>Cookies are packets of data that a server can give to a client, such as a browser, to maintain
  170. information even after the browser has left this site. This can be used to to identify the client in
  171. future interactions or to store user preferences. Cookies were first defined by Netscape, and the
  172. definition of cookies can be found at:</P>
  173. <PRE>
  174.     <A href="http://home.netscape.com/newsref/std/cookie_spec.html">http://home.netscape.com/newsref/std/cookie_spec.html</A> 
  175. </PRE>
  176. <P>The CGI module provides support for managing cookies. See <A href="#What_CGI_modules_run_with_Perl_f">What
  177. CGI modules run with ActivePerl?</A> for information about the CGI module, including the location of
  178. online documentation.</P>
  179. <HR>
  180. <H2><A name="How_do_I_get_the_e_mail_address_">How do I get the e-mail address of the user?</A></H2>
  181. <P>It's not, in general, possible to get the e-mail address of a user without asking them for it. If
  182. you need an e-mail address, provide the user with a form to fill in an address.</P>
  183. <P>The HTTP specification (see <A href="#What_is_HTTP_and_how_do_I_get_m">What is HTTP, and how do I
  184. get more information on it?</A>) defines an HTTP request header field, <CODE>From:</CODE>, that can
  185. contain the e-mail address of the user making the connection. Your script can retrieve it using the
  186. environment variable HTTP_FROM. However, it's rarely provided and can't really be counted on.</P>
  187. <P>There are all kinds of sneaky ways to determine where requests come from -- like checking the IP
  188. address that was used to connect -- but you can't figure out the e-mail address of the user this
  189. way.</P>
  190. <P>Generally, it's considered a violation of the user's privacy to get their e-mail address without
  191. their knowledge. Perhaps that's why it's so difficult.</P>
  192. <HR>
  193. <H2><A name="I_need_a_CGI_script_to_do_a_cert">I need a CGI script to do a certain task. Has anyone
  194. done it before?</A></H2>
  195. <P>There are several CGI script archives on the web. You may not be able to find exactly the script
  196. you want, but you will probably find something that can be adapted to your needs.</P>
  197. <P>Two of the most famous script pages are:</P>
  198. <UL>
  199.   <LI>
  200.     <P>Selena Sol's Script Archive: <A href="http://www.extropia.com/Scripts/">http://www.extropia.com/scripts/</A></P>
  201.   </LI>
  202.   <LI>
  203.     <P>Matt's Script Archive: <A href="http://www.worldwidemart.com/scripts/">http://www.worldwidemart.com/scripts/</A></P>
  204.   </LI>
  205. </UL>
  206. <P>Note that most script archives have UNIX-targeted scripts, and you may have to make some
  207. adaptations to them to make them run (see <A href="ActivePerl-Winfaq5.html#How_do_I_make_a_UNIX_based_scrip">How
  208. do I make a UNIX-based script work?</A>).</P>
  209. <P>This is one of the most common questions on the Perl-Win32-Users list. Occasionally it's phrased
  210. more like ``I have a program to write. Here are the specs. Please e-mail it to me by Friday.''
  211. Hopefully the reader can understand why these messages are usually answered rudely, if they are
  212. answered at all.</P>
  213. <HR>
  214. <H2><A name="How_do_I_test_my_CGI_programs_th">How do I test my CGI programs that take arguments
  215. without running them through the web server?</A></H2>
  216. <P>The hard way to test your CGI programs from the command line is to set up environment variables
  217. and a standard input stream just like a web server would (see the CGI 1.1 specification for more
  218. details on this -- see <A href="#What_is_CGI_and_how_do_I_get_mo">What is CGI, and how do I get more
  219. information on it?</A>).</P>
  220. <P>The easy way is to use <CODE>CGI.pm</CODE>, the Perl module for CGI programming. It provides an
  221. easy mechanism to run CGI programs, with arguments, from the command line. See <A href="#What_CGI_modules_run_with_Perl_f">What
  222. CGI modules run with ActivePerl?</A>.</P>
  223. <HR>
  224. <H2><A name="The_Content_Type_header_field_I">The Content-Type: header field I output from my CGI
  225. script shows up in the web browser.</A></H2>
  226. <P>You are using an older version of Perl for ISAPI as your Perl interpreter on an IIS web server,
  227. but it's not outputting an HTTP status line. You should be able to fix this by installing the most
  228. recent version of Perl and PerlIS. See <A href="#My_CGI_scripts_don_t_seem_to_run">My CGI scripts
  229. don't seem to run right under Perl for ISAPI.</A> for more details.</P>
  230. <HR>
  231. <H2><A name="When_I_try_to_run_a_CGI_script_f">When I try to run a CGI script from my browser, it
  232. tries to download a file of type "application/x-perl" instead.</A></H2>
  233. <P>Your web server has been misconfigured. It doesn't know that it should execute your Perl program,
  234. so it's just returning it to the browser. See <A href="ActivePerl-Winfaq6.html#">the perlwin32faq6
  235. manpage</A> for details on how to configure your particular web server to know that Perl scripts
  236. should be executed.</P>
  237. <HR>
  238. <H2><A name="What_s_Perl_for_WSAPI_">What's Perl for WSAPI?</A></H2>
  239. <P>Perl for WSAPI, or PerlWS for short, offers the same functionality as Perl for ISAPI to users of
  240. O'Reilly's WebSite Professional web server.</P>
  241. <HR>
  242. <H1><A name="AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></H1>
  243. <P>This FAQ was originally assembled and maintained by Evangelo Prodromou. It has been revised and
  244. updated by Brian Jepson of O'Reilly & Associates, David Grove, David Dmytryshyn and David Sparks
  245. of ActiveState.</P>
  246. <P>This FAQ is in the public domain. If you use it, however, please ensure that you give credit to
  247. the original authors.</P>
  248. <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  249.   <TR>
  250.     <TD class="block" valign="MIDDLE" width="100%" bgcolor="#cccccc"><STRONG>
  251.       <P class="block"> ActivePerl FAQ</P>
  252.       </STRONG></TD>
  253.   </TR>
  254. </TABLE>
  255.  
  256. </BODY>
  257.  
  258. </HTML>
  259.