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

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <HTML>
  3.  
  4. <HEAD>
  5. <TITLE>ActivePerl faq6 - web server info</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.  
  22. <UL>
  23.   <LI><A href="#NAME">NAME</A></LI>
  24.   <LI><A href="#DESCRIPTION">DESCRIPTION</A>
  25.     <UL>
  26.       <LI><A href="#What_HTTP_servers_support_Perl_f">What HTTP servers support ActivePerl?</A></LI>
  27.       <LI><A href="#How_do_I_use_Perl_for_Win32_unde">How do I use ActivePerl under Apache?</A></LI>
  28.       <LI><A href="#How_do_I_configure_the_EMWAC_htt">How do I configure the EMWAC https server to
  29.         support ActivePerl?</A></LI>
  30.       <LI><A href="#How_do_I_configure_IIS_3_0_or_lo">How do I configure IIS 3.0 or lower to support
  31.         Perl</A></LI>
  32.       <LI><A href="#How_do_I_configure_Microsoft_IIS">How do I configure Microsoft IIS 4.0 to
  33.         support Perl</A></LI>
  34.       <LI><A href="#How_do_I_configure_Netscape_web_">How do I configure Netscape web servers to
  35.         support ActivePerl?</A></LI>
  36.       <LI><A href="#How_do_I_configure_WebSite_1_0_t">How do I configure WebSite 1.0 to support
  37.         ActivePerl?</A></LI>
  38.       <LI><A href="#How_do_I_configure_WebSite_Profe">How do I configure WebSite Professional to
  39.         support ActivePerl?</A></LI>
  40.       <LI><A href="#How_do_I_configure_Purveyor_to_s">How do I configure Purveyor to support
  41.         ActivePerl?</A></LI>
  42.       <LI><A href="#How_do_I_configure_Microsoft_Per">How do I configure Microsoft Personal Web
  43.         Server 1.0x for Windows 95 to</A></LI>
  44.       <LI><A href="#How_do_I_configure_other_web_ser">How do I configure other web servers to
  45.         support ActivePerl?</A></LI>
  46.       <LI><A href="#My_program_runs_fine_from_the_co">My program runs fine from the command line,
  47.         but bombs out when</A></LI>
  48.       <LI><A href="#This_is_all_such_a_hassle_why_c">This is all such a hassle; why can't I just put
  49.         perl.exe in my CGI</A></LI>
  50.     </UL>
  51.   </LI>
  52.   <LI><A href="#AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></LI>
  53. </UL>
  54. <HR>
  55. <H1><A name="NAME">NAME</A></H1>
  56. <P>ActivePerl faq6 - web server info</P>
  57. <HR>
  58. <H1><A name="DESCRIPTION">DESCRIPTION</A></H1>
  59. <P>ActivePerl Web Server Configuration and Troubleshooting</P>
  60. <HR>
  61. <H2><A name="What_HTTP_servers_support_Perl_f">What HTTP servers support ActivePerl?</A></H2>
  62. <P>Most Windows NT and Windows 95 servers that use the CGI standard or ISAPI will run ActivePerl
  63. scripts. The following servers are known to work with ActivePerl (known protocols in brackets):</P>
  64. <DL>
  65.   <DT><STRONG><A name="item_Alibaba">Alibaba from Computer Software Manufaktur [CGI, ISAPI]</A></STRONG></DT>
  66.   <DD>
  67.     <PRE>    <A href="http://alibaba.austria.eu.net/">http://alibaba.austria.eu.net/</A>
  68. </PRE>
  69.   </DD>
  70.   <DT><STRONG><A name="item_Apache">Apache for Win32 [CGI, mod_perl]</A></STRONG></DT>
  71.   <DD>
  72.     <PRE>    <A href="http://www.apache.org">http://www.apache.org</A>
  73.     mod_perl home page: <A href="http://perl.apache.org">http://perl.apache.org</A>
  74. </PRE>
  75.   </DD>
  76.   <DT><STRONG><A name="item_EMWAC">EMWAC Web Server [CGI]</A></STRONG></DT>
  77.   <DD>
  78.     <PRE>    <A href="http://emwac.ed.ac.uk/html/internet_toolchest/https/contents.htm">http://emwac.ed.ac.uk/html/internet_toolchest/https/contents.htm</A>
  79. </PRE>
  80.   </DD>
  81.   <DT><STRONG><A name="item_Microsoft">Microsoft Internet Information Server [CGI, ISAPI]</A></STRONG></DT>
  82.   <DD>
  83.     <PRE>    <A href="http://www.microsoft.com/iis/">http://www.microsoft.com/iis/</A>
  84. </PRE>
  85.   </DD>
  86.   <DT><STRONG><A name="item_Netscape">Netscape Enterprise and FastTrack Server [CGI, nsapi_perl]</A></STRONG></DT>
  87.   <DD>
  88.     <PRE>    <A href="http://home.netscape.com/">http://home.netscape.com/</A>
  89.     mod_nsapi home page: <A href="http://interact.canoe.ca/~bsugars/nsapi_perl.html">http://interact.canoe.ca/~bsugars/nsapi_perl.html</A>
  90. </PRE>
  91.   </DD>
  92.   <DT><STRONG><A name="item_O">O'Reilly WebSite Professional [CGI, ISAPI, WSAPI]</A></STRONG></DT>
  93.   <DD>
  94.     <PRE>    <A href="http://software.ora.com/">http://software.ora.com/</A>
  95. </PRE>
  96.   </DD>
  97.   <DT><STRONG><A name="item_Purveyor">Purveyor by Process Software [CGI, ISAPI]</A></STRONG></DT>
  98.   <DD>
  99.     <PRE>    <A href="http://www.process.com/">http://www.process.com/</A>
  100. </PRE>
  101.   </DD>
  102. </DL>
  103. <P>There's a list of web servers for Windows, Windows 95, and Windows NT on this Yahoo Page:</P>
  104. <PRE>
  105.     <A href="http://www.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Microsoft_Windows_Windows_95/">http://www.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Servers/Microsoft_Windows_Windows_95/</A> 
  106. </PRE>
  107. <P>(That's all one URL.)</P>
  108. <HR>
  109. <H2><A name="How_do_I_use_Perl_for_Win32_unde">How do I use ActivePerl under Apache?</A></H2>
  110. <P>If you want to put all of your CGI scripts into one directory, add the following line to your <EM>srm.conf</EM>
  111. file (You can choose any directory you'd like, but make sure it exists):</P>
  112. <PRE>
  113.     ScriptAlias /cgi-bin/ "C:/Program Files/Apache Group/Apache/cgi-bin/"
  114. </PRE>
  115. <P>After you have made this change, stop and restart the Apache service.</P>
  116. <P>Apache provides an emulation of the UNIX shebang (#!/path/to/perl) syntax, so the next step is
  117. easy. You can put you Perl scripts into your <EM>cgi-bin</EM> directory, as long as you have a path
  118. to a valid interpreter at the top. For example:</P>
  119. <PRE>
  120.     #!C:\PERL\5.00464\bin\MSWin32-x86\perl.exe
  121.      
  122.     use CGI qw(:standard) ;
  123.     print header();
  124.     print "Hello, world";
  125. </PRE>
  126. <P>If you want to enable CGI scripts based on an extension, such as <EM>.pl</EM>, you need to add
  127. the following line to <EM>srm.conf</EM>:</P>
  128. <PRE>
  129.     AddHandler cgi-script .pl
  130. </PRE>
  131. <P>By default, CGI scripts are not allowed in your DocumentRoot directory, but they are allowed in
  132. other document directories. Document directories are created with the Alias command in <EM>srm.conf</EM>:</P>
  133. <PRE>
  134.     Alias /ResourceKit/ "E:/utilsamp/"
  135. </PRE>
  136. <P>You can then include files that end in <EM>.pl</EM> within a document directory. You will still
  137. need to include the #! line with the full path to the <EM>perl.exe</EM> interpreter, as shown
  138. earlier.</P>
  139. <P>If you want to allow CGI scripts in the DocumentRoot directory, add the ExecCGI option to the
  140. Options directive between the <Directory> and </Directory> entry for your DocumentRoot
  141. in <EM>access.conf</EM> (these appear directly after the comment titled:</P>
  142. <PRE>
  143.     # This should be changed to whatever you set DocumentRoot to.
  144.     
  145. After you have updated it, your Options directive may look something like:
  146. </PRE>
  147. <PRE>
  148.     Options Indexes FollowSymLinks ExecCGI
  149. </PRE>
  150. <HR>
  151. <H2><A name="How_do_I_configure_the_EMWAC_htt">How do I configure the EMWAC https server to support
  152. ActivePerl?</A></H2>
  153. <P>First, read the EMWAC documentation:</P>
  154. <PRE>
  155.     <A href="http://emwac.ed.ac.uk/html/internet_toolchest/https/scripts.htm">http://emwac.ed.ac.uk/html/internet_toolchest/https/scripts.htm</A>
  156. </PRE>
  157. <P>You need to follow these steps:</P>
  158. <OL>
  159.   <LI><STRONG><A name="item_"></A></STRONG>
  160.     <P>Install ActivePerl.</P>
  161.   </LI>
  162.   <LI>
  163.     <P>Install the EMWAC server. Ensure that EMWAC can serve HTML files correctly.</P>
  164.   </LI>
  165.   <LI>
  166.     <P>Make sure that the bin subdirectory of your Perl directory is in the system <CODE>PATH</CODE>
  167.     variable. This should be the subdirectory where perl.exe is located, such as <EM>C:\Perl\bin</EM>.
  168.     Note that this must be set in the Control Panel, not on the command line, and it must be a
  169.     system environment variable, not a user environment variable.</P>
  170.   </LI>
  171.   <LI>
  172.     <P>Make sure that your script has the extension <CODE>.pl</CODE>. This is the only way that the
  173.     https service recognizes the file as a Perl script.</P>
  174.   </LI>
  175.   <LI>
  176.     <P>Ensure that the script is readable by the account used by the EMWAC server. Generally, this
  177.     means you should make the script readable by the Everyone group.</P>
  178.   </LI>
  179.   <LI>
  180.     <P>Ensure that all supporting files, like the perl binary files, the perl library files, and the
  181.     modules that you use, are all readable by the account used by the EMWAC server (i.e., the
  182.     Everyone group).</P>
  183.   </LI>
  184. </OL>
  185. <P>When the EMWAC server gets an HTTP request for a file with a <EM>.pl</EM> extension, it tries to
  186. execute <CODE>perl [filename]</CODE>. This is the only way you can get Perl scripts to work on the
  187. EMWAC server, so you need to follow the above directions.</P>
  188. <P>By default, the ActivePerl installation puts the path to <EM>perl.exe</EM> in <CODE>@INC</CODE>.</P>
  189. <P>Because the EMWAC server runs as a service (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  190. is a Windows NT service?</A>), you need to take special steps to make files and environment
  191. variables like <CODE>PATH</CODE> accessible. Just because you can read a script and run it from the
  192. command line doesn't mean that the server can.</P>
  193. <HR>
  194. <H2><A name="How_do_I_configure_IIS_3_0_or_lo">How do I configure IIS 3.0 or lower to support
  195. ActivePerl?</A></H2>
  196. <P>By default, the ActivePerl installation maps the <EM>.plx</EM> extension to Perl for ISAPI. You
  197. can override the extension used during installation. Because the installation does this only when
  198. IIS is already installed, you must install IIS first, then install ActivePerl. If you need to
  199. reconfigure these settings, or if you must set these by hand, the instructions in this section will
  200. prove useful.</P>
  201. <P>Microsoft Internet Information Server (IIS) ships with Windows NT Server. Peer Web Services (PWS)
  202. ships with Windows NT Workstation. Configuring the products is essentially the same. First, you
  203. should consult Chapter 8, Publishing Information and Applications, in the IIS documentation.</P>
  204. <P>You need to follow these steps to get ActivePerl scripts to run under IIS:</P>
  205. <OL>
  206.   <LI>
  207.     <P>Associate the extension for your scripts with the appropriate interpreter in the script map
  208.     for IIS. This is under the Registry key HKEY_LOCAL_SYSTEM, with the sub-key ``System\CurrentControlSet\Services\W3SVC\Parameters\Script
  209.     Map''. Many people map two extensions: one to <EM>perl.exe</EM> (for example, <EM>.pl</EM>) and
  210.     another to <EM>PerlIS.dll</EM> (for example, <EM>.plx</EM>). Note that mapping an extension in
  211.     the script map is <EM>not</EM> the same as associating the extension in Explorer. Use the full
  212.     paths to the executable files in the script map.</P>
  213.   </LI>
  214.   <LI>
  215.     <P>Put your scripts in a virtual directory on the server that has Execute access but not Read
  216.     access. You can add virtual directories or view their access with the Internet Service Manager.
  217.     Remember that the URLs for your virtual directories can't overlap with URLs to directories in
  218.     the WWW root directory. For example, You can't have a <EM>cgi-bin</EM> virtual directory and a
  219.     real <EM>cgi-bin</EM> subdirectory of the WWW root.</P>
  220.   </LI>
  221.   <LI>
  222.     <P>Ensure that your scripts are readable by the account used by the IIS server. You set this
  223.     account in Internet Service Manager; it is set to IUSR_[your server name] by default. See also <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  224.     is a Windows NT service?</A> and <A href="ActivePerl-Winfaq4.html#How_do_I_set_permissions_on_a_fi">How
  225.     do I set permissions on a file?</A>.</P>
  226.   </LI>
  227.   <LI>
  228.     <P>Ensure that all supporting files, like the perl binary files, the perl library files, and the
  229.     modules that you use, are all readable by the account used by the IIS server. See also <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  230.     is a Windows NT service?</A> and <A href="ActivePerl-Winfaq4.html#How_do_I_set_permissions_on_a_fi">How
  231.     do I set permissions on a file?</A>.</P>
  232.   </LI>
  233. </OL>
  234. <P>You need to restart the web service after making the Registry changes or installing Perl.</P>
  235. <P>Because IIS runs as a service (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  236. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  237. environment variables are available to it.</P>
  238. <HR>
  239. <H2><A name="How_do_I_configure_Microsoft_IIS">How do I configure Microsoft IIS 4.0 to support
  240. ActivePerl?</A></H2>
  241. <P>Microsoft IIS 4.0 ships with Windows NT Server 5.0, and PWS 4.0 ships with Windows NT Workstation
  242. 5.0. Both IIS and PWS are available as part of the Microsoft Windows NT 4.0 Option Pack. You can
  243. find a link to the Option Pack at <A href="http://www.microsoft.com/iis/">http://www.microsoft.com/iis/</A></P>
  244. <P>To configure IIS or PWS 4.0 to run Perl scripts:</P>
  245. <OL>
  246.   <LI>
  247.     <P>Open the IIS 4.0 Internet Service Manager. This will bring up the Microsoft Management
  248.     Console with the Internet Service Manager snap-in selected.</P>
  249.   </LI>
  250.   <LI>
  251.     <P>From the tree display on the left, select the level at which to apply the mappings. You can
  252.     choose an entire server, web site, or a given virtual directory.</P>
  253.   </LI>
  254.   <LI>
  255.     <P>Select Properties from the Action menu.</P>
  256.   </LI>
  257.   <LI>
  258.     <P>If you chose to administer the properties for the entire server, the Server Properties dialog
  259.     will appear. Select WWW Service from the Master Properties pull-down menu and click the Edit
  260.     button under Master Properties. This opens WWW Service Master Properties. Select the Home
  261.     Directory tab and proceed to step 7.</P>
  262.   </LI>
  263.   <LI>
  264.     <P>If you chose to administer the properties for an entire web site, the Web Site Properties
  265.     sheet appears. Select the Home Directory tab and proceed to step 7.</P>
  266.   </LI>
  267.   <LI>
  268.     <P>If you chose to administer the properties for a virtual directory, the Virtual Directory
  269.     Properties sheet appears. Select the Virtual Directory tab and proceed to step 7.</P>
  270.   </LI>
  271.   <LI>
  272.     <P>Click the Configuration button. This opens the Application Configuration dialog.</P>
  273.   </LI>
  274.   <LI>
  275.     <P>Select the App Mappings tab and click the Add button. You see the Add/Edit Application
  276.     Extension Mapping dialog.</P>
  277.   </LI>
  278.   <LI>
  279.     <P>To run Perl as a CGI application, type the full path to <EM>Perl.EXE</EM> followed by <CODE>%s
  280.     %s</CODE>. When a script is executed, the first <CODE>%s</CODE> will be replaced by the full
  281.     path to the script, and the second <CODE>%s</CODE> will be replaced by the script parameters.</P>
  282.   </LI>
  283.   <LI>
  284.     <P>To run Perl for ISAPI, type the full path to <EM>PerlIS.DLL</EM>. The <CODE>%s %s</CODE> is
  285.     not required for ISAPI DLLs.</P>
  286.   </LI>
  287.   <LI>
  288.     <P>In the Extension field, type <EM>.pl</EM> or <EM>.plx</EM> (or whatever extension you want to
  289.     use).</P>
  290.   </LI>
  291.   <LI>
  292.     <P>The application mapping is now complete. Click the OK button and click OK to dismiss any
  293.     remaining dialogs/property sheets.</P>
  294.   </LI>
  295.   <LI>
  296.     <P>Close the IIS 4.0 Internet Service Manager.</P>
  297.   </LI>
  298. </OL>
  299. <P>Because IIS runs as a service (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  300. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  301. environment variables are available to it.</P>
  302. <HR>
  303. <H2><A name="How_do_I_configure_Netscape_web_">How do I configure Netscape web servers to support
  304. ActivePerl?</A></H2>
  305. <P>If you're using Netscape 1.x servers, you must wrap your Perl scripts in batch files. Refer to
  306. these Netscape tech notes:</P>
  307. <PRE>
  308.     <A href="http://help.netscape.com/kb/server/960513-3.html">http://help.netscape.com/kb/server/960513-3.html</A>
  309.     <A href="http://help.netscape.com/kb/server/960513-125.html">http://help.netscape.com/kb/server/960513-125.html</A> 
  310. </PRE>
  311. <P>The following information is for Netscape FastTrack Server 2.0. Other 2.0 and 3.0 Netscape
  312. Servers (Communications, Enterprise) should be similar.</P>
  313. <P>To set up ActivePerl to run on FastTrack Server, follow these steps:</P>
  314. <OL>
  315.   <LI>
  316.     <P>Install FastTrack Server, and make sure you can retrieve HTML pages.</P>
  317.   </LI>
  318.   <LI>
  319.     <P>Associate Perl scripts with the perl interpreter, if you haven't already. See <A href="ActivePerl-Winfaq4.html#How_do_I_associate_Perl_scripts_">How
  320.     do I associate Perl scripts with perl?</A> for how to do this. You may need to re-start the
  321.     server after making the association.</P>
  322.   </LI>
  323.   <LI>
  324.     <P>Set up a Shell CGI directory to run Perl scripts. A regular CGI directory will not work --
  325.     that is only for executable files. You set this up with the FastTrack Administrator; see the
  326.     documentation for details.</P>
  327.   </LI>
  328. </OL>
  329. <P>If you would like to access Perl CGI scripts in other directories, you need to associate an
  330. extension, such as <EM>.pl</EM>, with the shellcgi MIME type. Before you follow these steps, you
  331. must add at least one Shell CGI directory - this will enable shellcgi on your server (you can delete
  332. this directory, and shellcgi will remain enabled). Follow these steps to associate <EM>.pl</EM> with
  333. the shellcgi MIME type:</P>
  334. <OL>
  335.   <LI>
  336.     <P>In the Server Administrator, click Server Preferences, then select MIME Types from the frame
  337.     on the left.</P>
  338.   </LI>
  339.   <LI>
  340.     <P>If you want to use <EM>.pl</EM> as the extension for Perl scripts, find and remove the
  341.     application/x-perl MIME type (this is mapped to <EM>.pl</EM> by default).</P>
  342.   </LI>
  343.   <LI>
  344.     <P>Add a new MIME Type with magnus-internal/shellcgi as the Content Type, and pl as the File
  345.     Suffix. If a type for magnus-internal/shellcgi already exists, simply add pl to the list of File
  346.     Suffixes. Don't include the leading dot on the file suffix.</P>
  347.   </LI>
  348.   <LI>
  349.     <P>Save and apply these changes. You should be able to put a Perl CGI script in any directory,
  350.     provided the script ends with the <EM>.pl</EM> suffix.</P>
  351.   </LI>
  352. </OL>
  353. <P>If you are having trouble running Perl scripts on your Netscape server, check the following:</P>
  354. <UL>
  355.   <LI>
  356.     <P>Ensure that the script is readable by the account used by the Netscape service. Generally,
  357.     this means you should make the script readable by the Everyone group.</P>
  358.   </LI>
  359.   <LI>
  360.     <P>Ensure that all supporting files, like the perl binary files, the perl library files, and the
  361.     modules that you use, are all readable by the account used by the Netscape service (i.e., the
  362.     Everyone group).</P>
  363.   </LI>
  364. </UL>
  365. <P>One nice thing about FastTrack server is that the Error Log will give detailed reasons why your
  366. CGI script isn't running, so this is a good thing to check first when you are having configuration
  367. problems.</P>
  368. <P>Because Netscape servers run as services (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  369. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  370. environment variables are available to them.</P>
  371. <P>Some people have reported problems with handling POST'ed data with Perl programs with Netscape
  372. servers. Since Netscape apparently uses associations to run scripts, and POST'ed data is sent on
  373. STDIN to a program. This may be related to the problems with redirection.</P>
  374. <HR>
  375. <H2><A name="How_do_I_configure_WebSite_1_0_t">How do I configure WebSite 1.0 to support ActivePerl?</A></H2>
  376. <P>The following information is for setting up O'Reilly WebSite to use ActivePerl for standard CGI
  377. (not PerlIS).</P>
  378. <OL>
  379.   <LI>
  380.     <P>Install WebSite. Make sure you can retrieve HTML pages before continuing.</P>
  381.   </LI>
  382.   <LI>
  383.     <P>Associate Perl scripts with the perl interpreter, if you haven't already. See <A href="ActivePerl-Winfaq4.html#How_do_I_associate_Perl_scripts_">How
  384.     do I associate Perl scripts with perl?</A> for how to do this. You may need to re-start the
  385.     server after making the association.</P>
  386.   </LI>
  387.   <LI>
  388.     <P>Set up a Standard CGI directory to hold your Perl scripts. You can use the Server Properties
  389.     dialog box do to this.</P>
  390.   </LI>
  391.   <LI>
  392.     <P>Ensure that the script is readable by the account used by the WebSite service. Generally,
  393.     this means you should make the script readable by the Everyone group.</P>
  394.   </LI>
  395.   <LI>
  396.     <P>Ensure that all supporting files, like the perl binary files, the perl library files, and the
  397.     modules that you use, are all readable by the account used by the WebSite service (i.e., the
  398.     Everyone group).</P>
  399.   </LI>
  400. </OL>
  401. <P>Because WebSite servers run as services (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  402. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  403. environment variables are available to them.</P>
  404. <HR>
  405. <H2><A name="How_do_I_configure_WebSite_Profe">How do I configure WebSite Professional to support
  406. ActivePerl?</A></H2>
  407. <P>The following information is for setting up O'Reilly WebSite Professional to use ActivePerl CGI
  408. (not PerlIS).</P>
  409. <OL>
  410.   <LI>
  411.     <P>Install WebSite Professional. Make sure you can retrieve HTML pages before continuing.</P>
  412.   </LI>
  413.   <LI>
  414.     <P>Open Server Properties and click the Mapping tab. Server Properties is in the WebSite
  415.     Professional folder on the Start menu.</P>
  416.   </LI>
  417.   <LI>
  418.     <P>From the List Selector on the Mapping tab, choose Content Types.</P>
  419.   </LI>
  420.   <LI>
  421.     <P>If there is an existing mapping for the extension you want to use (such as <EM>.pl</EM>),
  422.     highlight the mapping and click Delete. Click Apply to immediately apply the change.</P>
  423.   </LI>
  424.   <LI>
  425.     <P>Choose a file extension for Perl, such as <EM>.pl</EM>, and type it into the File Extension
  426.     field. Make sure you include the leading period/full stop (.) in the file extension.</P>
  427.   </LI>
  428.   <LI>
  429.     <P>Type wwwserver/shellcgi in the Media or Server-Side Content Type field.</P>
  430.   </LI>
  431.   <LI>
  432.     <P>Click Add. Click Apply to immediately apply the change.</P>
  433.   </LI>
  434.   <LI>
  435.     <P>Change the List Selector to Associations.</P>
  436.   </LI>
  437.   <LI>
  438.     <P>If there is an existing mapping for the extension you want to use (such as <EM>.pl</EM>),
  439.     highlight the mapping and click Delete. Click Apply to immediately apply the change.</P>
  440.   </LI>
  441.   <LI>
  442.     <P>Type the file extension you chose in step 5 in the File Extension field. Make sure you
  443.     include the leading period/full stop (.) in the file extension.</P>
  444.   </LI>
  445.   <LI>
  446.     <P>Type the full path to Perl.exe, such as <EM>C:\Perl\5.00500\bin\MSWin32-x86\Perl.exe</EM>, in
  447.     the Associated EXE or DLL field.</P>
  448.   </LI>
  449.   <LI>
  450.     <P>Click Add. Click Apply to immediately apply the change.</P>
  451.   </LI>
  452.   <LI>
  453.     <P>Close Server Properties. Reply appropriately to ``Terminate active connections and update the
  454.     server settings?''. The server is now configured to execute Perl CGI scripts in directories
  455.     marked as cgi-bin as well as document directories.</P>
  456.   </LI>
  457. </OL>
  458. <P>If you have trouble running scripts, ensure that the script is readable by the account used by
  459. the WebSite service. Generally, this means you should make the script readable by the Everyone
  460. group. Also, ensure that all supporting files, like the perl binary files, the perl library files,
  461. and the modules that you use, are all readable by the account used by the WebSite service (i.e., the
  462. Everyone group).</P>
  463. <P>Because WebSite servers run as services (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  464. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  465. environment variables are available to them.</P>
  466. <HR>
  467. <H2><A name="How_do_I_configure_Purveyor_to_s">How do I configure Purveyor to support ActivePerl?</A></H2>
  468. <P>The following instructions are for Purveyor 1.2 for Windows NT. Other Purveyor products should be
  469. similar.</P>
  470. <OL>
  471.   <LI>
  472.     <P>In the Purveyor Control Panel, use the CGI Mapping tab to map the <EM>.pl</EM> extension to <EM>perl.exe</EM>.
  473.     Make sure that you use the full path to the executable.</P>
  474.   </LI>
  475.   <LI>
  476.     <P>Also in the Purveyor Control Panel, use the Virtual Servers section to set your CGI Scripts
  477.     directory. You need one scripts directory for each virtual server you support. The scripts
  478.     directory must be in the data path for the server. Also, make sure that the Disable CGI
  479.     Extension checkbox is unchecked.</P>
  480.   </LI>
  481.   <LI>
  482.     <P>Ensure that the script is readable by the account used by the Purveyor service. Generally,
  483.     this means you should make the script readable by the Everyone group.</P>
  484.   </LI>
  485.   <LI>
  486.     <P>Ensure that all supporting files, like the perl binary files, the perl library files, and the
  487.     modules that you use, are all readable by the account used by the Purveyor service (i.e., the
  488.     Everyone group).</P>
  489.   </LI>
  490. </OL>
  491. <P>If you have problems while configuring Purveyor to use ActivePerl, you can use the Enable Tracing
  492. checkbox in the Logging tab of the Purveyor Control Panel applet to trace HTTP requests and
  493. responses.</P>
  494. <P>Because Purveyor runs as a service (see <A href="ActivePerl-Winfaq4.html#What_is_a_Windows_NT_service_">What
  495. is a Windows NT service?</A>), you need to take special steps to make sure that files and
  496. environment variables are available to it.</P>
  497. <HR>
  498. <H2><A name="How_do_I_configure_Microsoft_Per">How do I configure Microsoft Personal Web Server 1.0x
  499. for Windows 95 to support ActivePerl?</A></H2>
  500. <P>Microsoft Personal Web Server for Windows 95 is a scaled-down version of Microsoft Internet
  501. Information Server. Although it is not documented, it appears that the method used to support
  502. ActivePerl with IIS will also work with Personal Web Server. See <A href="#How_do_I_configure_IIS_3_0_or_lo">How
  503. do I configure IIS 3.0 or lower to support ActivePerl?</A>.</P>
  504. <HR>
  505. <H2><A name="How_do_I_configure_other_web_ser">How do I configure other web servers to support
  506. ActivePerl?</A></H2>
  507. <P>If your web server isn't listed, check the server's documentation on how to set up a CGI
  508. interpreter. In general the process is as follows:</P>
  509. <UL>
  510.   <LI>
  511.     <P>Associate a file extension like <EM>.pl</EM> with the perl binary, and let the server know
  512.     where the binary is. This may be a shell association, (see <A href="ActivePerl-Winfaq4.html#How_do_I_associate_Perl_scripts_">How
  513.     do I associate Perl scripts with perl?</A>), or a custom association.</P>
  514.   </LI>
  515.   <LI>
  516.     <P>Set up a directory where executable scripts go, and put your Perl script there.</P>
  517.   </LI>
  518.   <LI>
  519.     <P>Ensure that the user account that the web server uses can read the script as well as any
  520.     ancillary files (perl binary files, library files, modules, etc.). This usually means making the
  521.     files available to the Everyone group.</P>
  522.   </LI>
  523. </UL>
  524. <P>Because most web servers run as services (see <A href="#How_do_I_configure_IIS_3_0_or_lo">How do
  525. I configure IIS 3.0 or lower to support ActivePerl?</A>), you need to take special steps to make
  526. sure that files and environment variables are available to them.</P>
  527. <HR>
  528. <H2><A name="My_program_runs_fine_from_the_co">My program runs fine from the command line, but bombs
  529. out when run as a CGI script.</A></H2>
  530. <P>Usually, this means one of two things: either you have misconfigured your system, or your script
  531. does not output the right stuff to be a CGI script.</P>
  532. <P>Before you do anything else, check this list:</P>
  533. <UL>
  534.   <LI>
  535.     <P>Make sure you have correctly configured your server for <EM>perl.exe</EM> or <EM>perlis.dll</EM>.
  536.     This is often accomplished by mapping a specific extension, such as <EM>.pl</EM> or <EM>.plx</EM>,
  537.     to <EM>perl.exe</EM> or <EM>perlis.dll</EM>. Usually, web servers rely on their own mappings,
  538.     rather than the Windows command-line mappings.</P>
  539.   </LI>
  540.   <LI>
  541.     <P>If your web server depends on the <CODE>PATH</CODE> variable to find <EM>perl.exe</EM>, make
  542.     sure that you put <EM>perl.exe</EM> in your system <CODE>PATH</CODE>, not just your user <CODE>PATH</CODE>.
  543.     This only applies to Windows NT/2000.</P>
  544.   </LI>
  545.   <LI>
  546.     <P>If your web server requires directories to be marked as executable, make sure the directory
  547.     that contains the script is marked as such.</P>
  548.   </LI>
  549.   <LI>
  550.     <P>Since the web server can be configured to run as a local user, be sure that the user has
  551.     access to the script file and the Perl binaries and libraries. Many web servers run as the
  552.     ``Local System'' account, which generally has sufficient permissions.</P>
  553.   </LI>
  554.   <LI>
  555.     <P>If <EM>Perl.exe</EM> or Perl for ISAPI fail to work as expected check your event logs for
  556.     clues.</P>
  557.   </LI>
  558. </UL>
  559. <P>Check the information above with a script that you know produces the right output for the CGI
  560. protocol (scripts in this FAQ are a good first choice). Try it with your own script after you're
  561. sure the test script will work.</P>
  562. <P>If you are sure the server is running the script, but it only generates error messages in your
  563. browser, there are some tools that may help you out. CGI::Carp is used to send debugging information
  564. to the browser or log file. Even if your script has a compilation error, it can usually intercept
  565. and report errors. To use CGI::Carp, include the following lines in your program:</P>
  566. <PRE>
  567.     # The stuff in the BEGIN block will be executed very early
  568.     # on, even before the rest of this script is parsed.
  569.     #
  570.     BEGIN {
  571.         
  572.         # Use the CGI::Carp module and import the carpout() function.
  573.         #
  574.         use CGI::Carp qw(carpout);
  575.         
  576.         # Send warnings and die messages to the browser.
  577.         #
  578.         carpout(STDOUT);
  579.         
  580.     }
  581. </PRE>
  582. <P>If your script has an error, you may see something like this in the browser:</P>
  583. <PRE>
  584.     [Wed Jun 3 09:32:28 1998] C:\inetpub\scripts\test.pl: Error message! at
  585.     C:\inetpub\scripts\test.pl line 38. 
  586. </PRE>
  587. <P>Sometimes, it can be helpful to put yourself in somebody else's position. The libwww-perl bundle
  588. (LWP) is available from CPAN, but you can install it using the Perl Package Manager (PPM). LWP may
  589. be included with future releases of ActivePerl.</P>
  590. <P>LWP includes the powerful <EM>lwp-request</EM> script, which lets you see things from the
  591. browser's perspective. Invoke <EM>lwp-request</EM> with the name of a URL to see the content of the
  592. response, as in <CODE>lwp-request http://localhost</CODE>. To inspect the headers of an HTTP
  593. response, invoke <EM>lwp-request</EM> with the <CODE>-de</CODE> switch:</P>
  594. <PRE>
  595.     C:\>lwp-request -de http://localhost
  596.     Date: Wed, 03 Jun 1998 13:37:31 GMT
  597.     Accept-Ranges: bytes
  598.     Server: Microsoft-IIS/4.0
  599.     Content-Length: 4325
  600.     Content-Location: http://localhost/Default.htm
  601.     Content-Type: text/html
  602.     ETag: "0c1e58b063bd1:1237"
  603.     Last-Modified: Thu, 09 Apr 1998 12:09:28 GMT
  604.     Client-Date: Wed, 03 Jun 1998 13:37:31 GMT
  605.     Client-Peer: 127.0.0.1:0
  606. </PRE>
  607. <P>This tool can be very helpful in figuring out exactly what your scripts are doing. Whatever you
  608. do, don't give up hope. It is, in fact, possible to get a Perl script running on your web server.
  609. Really.</P>
  610. <HR>
  611. <H2><A name="This_is_all_such_a_hassle_why_c">This is all such a hassle; why can't I just put
  612. perl.exe in my CGI directory and use it in my URL?</A></H2>
  613. <P>First, the warning: DON'T DO THIS. REALLY. EVEN IF YOU DON'T UNDERSTAND WHY NOT, DON'T.</P>
  614. <P>Now the explanation: the idea here is to put <EM>perl.exe</EM> in your CGI directory (however you
  615. configure that on your server), and use URL syntax like the following:</P>
  616. <PRE>
  617.     http://soon.to.be.a.victim.net/cgi-bin/perl.exe?myscript.pl
  618. </PRE>
  619. <P>to run <EM>myscript.pl</EM>. This keeps you from having to figure out how to configure your
  620. server to associate extensions like <EM>.pl</EM> with an interpreter like <EM>perl.exe</EM>.</P>
  621. <P>In fact, on some early Win32-based web servers (Netscape 1.x servers in particular), it was
  622. impossible to associate a script file with an interpreter. This method was recommended by vendors as
  623. a viable approach to running Perl scripts on your web server.</P>
  624. <P>Anyone with a devious mind and a little knowledge of Perl can see that with this configuration,
  625. hackers could start doing all kinds of horrible things on the server. All they'd have to do is send
  626. made-up URLs, using the <CODE>-e</CODE> command line switch in <EM>perl.exe</EM>, in order to do
  627. stuff like delete all files on a drive:</P>
  628. <PRE>
  629.     http://aaaugh.that.hurts.net/cgi-bin/perl.exe?-e?'del%20c:\*.*%20/S%20/Q'
  630. </PRE>
  631. <P>Of course, a true computer criminal would never do something so crude and obvious, but would
  632. instead use this as a launching point to cause irreparable harm to your organization.</P>
  633. <P>The following URL covers this issue in more depth:</P>
  634. <PRE>
  635.     <A href="ftp://ftp.cert.org/pub/cert_advisories/CA-96.11.interpreters_in_cgi_bin_dir">ftp://cert.org/pub/cert_advisories/CA-96.11.interpreters_in_cgi_bin_dir</A>
  636. </PRE>
  637. <P>Tom Christiansen has also written a good discussion of the subject:</P>
  638. <PRE>
  639.     <A href="http://www.perl.com/perl/news/latro-announce.html">http://www.perl.com/perl/news/latro-announce.html</A>
  640. </PRE>
  641. <P>Note that one suggested solution to this problem is wrapping your Perl script in a batch file
  642. using pl2bat or your own custom batch code. THIS IS ALSO NOT GOOD. Most of the primitive servers
  643. that won't allow file associations are also susceptible to a bug that allows a user to enter any DOS
  644. command after the bat file.</P>
  645. <P>For more information on CGI and web server security, see these URLs:</P>
  646. <PRE>
  647.     Web: <A href="http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html">http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html</A>
  648. </PRE>
  649. <P>As a final note, there are so many good, free web servers out there for Windows NT and Windows 95
  650. that you should never stay with an old, insecure web server.</P>
  651. <HR>
  652. <H1><A name="AUTHOR_AND_COPYRIGHT">AUTHOR AND COPYRIGHT</A></H1>
  653. <P>This FAQ was originally assembled and maintained by Evangelo Prodromou. <A href="mailto:evangelo@endcontsw.com">evangelo@endcontsw.com.</A>
  654. It has been revised and updated by Brian Jepson of O'Reilly and Associates, and David Grove and
  655. David Dmytryshyn of ActiveState.</P>
  656. <P>This FAQ is in the public domain. If you use it, however, please ensure that you give credit to
  657. the original authors.</P>
  658. <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
  659.   <TR>
  660.     <TD class="block" valign="MIDDLE" width="100%" bgcolor="#cccccc"><STRONG>
  661.       <P class="block"> ActivePerl FAQ</P>
  662.       </STRONG></TD>
  663.   </TR>
  664. </TABLE>
  665.  
  666. </BODY>
  667.  
  668. </HTML>
  669.