You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by nd...@apache.org on 2002/12/22 16:24:57 UTC
cvs commit: httpd-2.0/docs/manual/howto cgi.html.en cgi.xml
nd 2002/12/22 07:24:57
Modified: docs/manual/howto Tag: APACHE_2_0_BRANCH cgi.html.en cgi.xml
Log:
backport of markup & formatting
Revision Changes Path
No revision
No revision
1.6.2.2 +101 -113 httpd-2.0/docs/manual/howto/cgi.html.en
Index: cgi.html.en
===================================================================
RCS file: /home/cvs/httpd-2.0/docs/manual/howto/cgi.html.en,v
retrieving revision 1.6.2.1
retrieving revision 1.6.2.2
diff -u -r1.6.2.1 -r1.6.2.2
--- cgi.html.en 11 Dec 2002 22:27:03 -0000 1.6.2.1
+++ cgi.html.en 22 Dec 2002 15:24:57 -0000 1.6.2.2
@@ -60,32 +60,29 @@
it, when that particular resource is requested by a
client.</p>
- <p>The
- <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
-
+ <p>The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
directive looks like:</p>
- <div class="example"><p><code>ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/</code></p></div>
-
- <p>The example shown is from your default
- <code>httpd.conf</code>
+ <div class="example"><p><code>
+ ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
+ </code></p></div>
+ <p>The example shown is from your default <code>httpd.conf</code>
configuration file, if you installed Apache in the default
- location. The <code>ScriptAlias</code> directive is much like the
- <code>Alias</code> directive, which defines a URL prefix that
- is to mapped to a particular directory. <code>Alias</code>
- and <code>ScriptAlias</code> are usually used for directories
- that are outside of the <code>DocumentRoot</code> directory.
- The difference between <code>Alias</code> and
- <code>ScriptAlias</code> is that <code>ScriptAlias</code>
- has the added meaning that everything under that URL prefix
- will be considered a CGI program. So, the example above tells
- Apache that any request for a resource beginning with
- <code>/cgi-bin/</code> should be served from the directory
- <code>/usr/local/apache/cgi-bin/</code>, and should be treated
- as a CGI program.</p>
+ location. The <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
+ directive is much like the <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> directive, which defines a URL prefix that
+ is to mapped to a particular directory. <code class="directive">Alias</code>
+ and <code class="directive">ScriptAlias</code> are usually used for
+ directories that are outside of the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> directory. The difference between
+ <code class="directive">Alias</code> and <code class="directive">ScriptAlias</code>
+ is that <code class="directive">ScriptAlias</code> has the added meaning
+ that everything under that URL prefix will be considered a CGI
+ program. So, the example above tells Apache that any request for a
+ resource beginning with <code>/cgi-bin/</code> should be served from
+ the directory <code>/usr/local/apache/cgi-bin/</code>, and should be
+ treated as a CGI program.</p>
- <p>For example, if the URL
+ <p>For example, if the URL
<code>http://www.example.com/cgi-bin/test.pl</code>
is requested, Apache will attempt to execute the file
<code>/usr/local/apache/cgi-bin/test.pl</code>
@@ -97,66 +94,71 @@
<h3><a name="nonscriptalias" id="nonscriptalias">CGI outside of ScriptAlias directories</a></h3>
- <p>CGI programs are often restricted to
- <code>ScriptAlias</code>'ed directories for security reasons.
- In this way,
- administrators can tightly control who is allowed to use CGI
- programs. However, if the proper security precautions are
+ <p>CGI programs are often restricted to <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>'ed directories for security reasons.
+ In this way, administrators can tightly control who is allowed to
+ use CGI programs. However, if the proper security precautions are
taken, there is no reason why CGI programs cannot be run from
arbitrary directories. For example, you may wish to let users
have web content in their home directories with the
- <code>UserDir</code> directive. If they want to have their own
- CGI programs, but don't have access to the main
- <code>cgi-bin</code> directory, they will need to be able to
+ <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> directive.
+ If they want to have their own CGI programs, but don't have access to
+ the main <code>cgi-bin</code> directory, they will need to be able to
run CGI programs elsewhere.</p>
<h3><a name="options" id="options">Explicitly using Options to permit CGI execution</a></h3>
- <p>You could explicitly use the <code>Options</code>
- directive, inside your main server configuration file, to
- specify that CGI execution was permitted in a particular
+ <p>You could explicitly use the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive, inside your main server configuration
+ file, to specify that CGI execution was permitted in a particular
directory:</p>
- <div class="example"><p><code><Directory /usr/local/apache/htdocs/somedir> <br />
- Options +ExecCGI<br />
- </Directory></code></p></div>
+ <div class="example"><p><code>
+ <Directory /usr/local/apache/htdocs/somedir><br />
+ <span class="indent">
+ Options +ExecCGI<br />
+ </span>
+ </Directory>
+ </code></p></div>
<p>The above directive tells Apache to permit the execution
of CGI files. You will also need to tell the server what
- files are CGI files. The following
- <code>AddHandler</code>
-
- directive tells the server to treat all files with the
- <code>cgi</code> or <code>pl</code> extension as CGI programs:</p>
+ files are CGI files. The following <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> directive tells the server to treat all
+ files with the <code>cgi</code> or <code>pl</code> extension as CGI
+ programs:</p>
- <div class="example"><p><code>AddHandler cgi-script cgi pl</code></p></div>
+ <div class="example"><p><code>
+ AddHandler cgi-script cgi pl
+ </code></p></div>
<h3><a name="htaccess" id="htaccess">.htaccess files</a></h3>
- <p>A <code>.htaccess</code> file is a way to set configuration
- directives on a per-directory basis. When Apache serves a
- resource, it looks in the directory from which it is serving
+ <p>A <a href="htaccess.html"><code>.htaccess</code> file</a> is a way
+ to set configuration directives on a per-directory basis. When Apache
+ serves a resource, it looks in the directory from which it is serving
a file for a file called <code>.htaccess</code>, and, if it
finds it, it will apply directives found therein.
<code>.htaccess</code> files can be permitted with the
- <code>AllowOverride</code> directive, which specifies what
- types of directives can
+ <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive,
+ which specifies what types of directives can
appear in these files, or if they are not allowed at all. To
permit the directive we will need for this purpose, the
following configuration will be needed in your main server
configuration:</p>
- <div class="example"><p><code>AllowOverride Options</code></p></div>
+ <div class="example"><p><code>
+ AllowOverride Options
+ </code></p></div>
<p>In the <code>.htaccess</code> file, you'll need the
following directive:</p>
- <div class="example"><p><code>Options +ExecCGI</code></p></div>
+ <div class="example"><p><code>
+ Options +ExecCGI
+ </code></p></div>
<p>which tells Apache that execution of CGI programs is
permitted in this directory.</p>
@@ -174,7 +176,9 @@
what sort of content it is receiving. Most of the time, this
will look like:</p>
- <div class="example"><p><code>Content-type: text/html</code></p></div>
+ <div class="example"><p><code>
+ Content-type: text/html
+ </code></p></div>
<p>Secondly, your output needs to be in HTML, or some other
format that a browser will be able to display. Most of the
@@ -193,9 +197,10 @@
file called <code>first.pl</code>, and put it in your
<code>cgi-bin</code> directory.</p>
- <div class="example"><p><code>#!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
+ <div class="example"><p><code>
+ #!/usr/bin/perl<br />
+ print "Content-type: text/html\n\n";<br />
+ print "Hello, World.";
</code></p></div>
<p>Even if you are not familiar with Perl, you should be able
@@ -207,20 +212,20 @@
talked about, followed by two carriage-return newline pairs.
This puts a blank line after the header, to indicate the end
of the HTTP headers, and the beginning of the body. The third
- line prints the string ``Hello, World.'' And that's the end
+ line prints the string "Hello, World.". And that's the end
of it.</p>
<p>If you open your favorite browser and tell it to get the
address</p>
- <div class="example"><p><code>http://www.example.com/cgi-bin/first.pl</code></p></div>
+ <div class="example"><p><code>
+ http://www.example.com/cgi-bin/first.pl
+ </code></p></div>
<p>or wherever you put your file, you will see the one line
- <code>Hello, World.</code>
-
- appear in your browser window. It's not very exciting, but
- once you get that working, you'll have a good chance of
- getting just about anything working.</p>
+ <code>Hello, World.</code> appear in your browser window.
+ It's not very exciting, but once you get that working, you'll
+ have a good chance of getting just about anything working.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
@@ -232,35 +237,21 @@
<dl>
<dt>The output of your CGI program</dt>
-
- <dd>Great! That means everything worked fine.
- </dd>
+ <dd>Great! That means everything worked fine.</dd>
<dt>The source code of your CGI program or a "POST Method Not
Allowed" message</dt>
-
<dd>That means that you have not properly configured Apache
to process your CGI program. Reread the section on
<a href="#configuringapachetopermitcgi">configuring
- Apache</a>
-
- and try to find what you missed.
- </dd>
+ Apache</a> and try to find what you missed.</dd>
<dt>A message starting with "Forbidden"</dt>
-
<dd>That means that there is a permissions problem. Check the
-
- <a href="#errorlogs">Apache error log</a>
-
- and the section below on
- <a href="#permissions">file permissions</a>.
-
- <br />
- </dd>
+ <a href="#errorlogs">Apache error log</a> and the section below on
+ <a href="#permissions">file permissions</a>.</dd>
<dt>A message saying "Internal Server Error"</dt>
-
<dd>If you check the
<a href="#errorlogs">Apache error log</a>, you will probably
find that it says "Premature end of
@@ -276,22 +267,23 @@
<p>Remember that the server does not run as you. That is,
when the server starts up, it is running with the permissions
- of an unprivileged user - usually ``nobody'', or ``www'' -
- and so it will need extra permissions to execute files that
- are owned by you. Usually, the way to give a file sufficient
- permissions to be executed by ``nobody'' is to give everyone
- execute permission on the file:</p>
+ of an unprivileged user - usually <code>nobody</code>, or
+ <code>www</code> - and so it will need extra permissions to
+ execute files that are owned by you. Usually, the way to give
+ a file sufficient permissions to be executed by <code>nobody</code>
+ is to give everyone execute permission on the file:</p>
- <div class="example"><p><code>chmod a+x first.pl</code></p></div>
+ <div class="example"><p><code>
+ chmod a+x first.pl
+ </code></p></div>
<p>Also, if your program reads from, or writes to, any other
files, those files will need to have the correct permissions
to permit this.</p>
<p>The exception to this is when the server is configured to
- use <a href="../suexec.html">suexec</a>.
-
- This program allows CGI programs to be run under different
+ use <a href="../suexec.html">suexec</a>. This program allows
+ CGI programs to be run under different
user permissions, depending on which virtual host or user
home directory they are located in. Suexec has very strict
permission checking, and any failure in that checking will
@@ -319,7 +311,9 @@
interpreter (often <code>perl</code>) indicated in the first
line of your CGI program, which will look something like:</p>
- <div class="example"><p><code>#!/usr/bin/perl</code></p></div>
+ <div class="example"><p><code>
+ #!/usr/bin/perl
+ </code></p></div>
<p>Make sure that this is in fact the path to the
interpreter.</p>
@@ -356,7 +350,7 @@
become useful to understand more about what's happening behind
the scenes. Specifically, how the browser and server
communicate with one another. Because although it's all very
- well to write a program that prints ``Hello, World.'', it's not
+ well to write a program that prints "Hello, World.", it's not
particularly useful.</p>
<h3><a name="env" id="env">Environment variables</a></h3>
@@ -379,9 +373,7 @@
<p>These variables are available to the CGI programmer, and
are half of the story of the client-server communication. The
complete list of required variables is at
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">
- http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>
- </p>
+ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
<p>This simple Perl CGI program will display all of the
environment variables that are being passed around. Two
@@ -393,15 +385,17 @@
see some variables listed that were not in the official list.
In addition, Apache provides many different ways for you to
<a href="../env.html">add your own environment variables</a>
-
to the basic ones provided by default.</p>
<div class="example"><p><code>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- print "$key --> $ENV{$key}<br>";<br />
- }</code></p></div>
+ #!/usr/bin/perl<br />
+ print "Content-type: text/html\n\n";<br />
+ foreach $key (keys %ENV) {<br />
+ <span class="indent">
+ print "$key --> $ENV{$key}<br>";<br />
+ </span>
+ }
+ </code></p></div>
<h3><a name="stdin" id="stdin">STDIN and STDOUT</a></h3>
@@ -420,7 +414,7 @@
The program then can process that data as though it was
coming in from the keyboard, or from a file</p>
- <p>The ``special format'' is very simple. A field name and
+ <p>The "special format" is very simple. A field name and
its value are joined together with an equals (=) sign, and
pairs of values are joined together with an ampersand
(&). Inconvenient characters like spaces, ampersands, and
@@ -429,7 +423,7 @@
something like:</p>
<div class="example"><p><code>
- name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
+ name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
</code></p></div>
<p>You'll sometimes also see this type of string appended to
@@ -456,14 +450,13 @@
<p>If you're writing CGI programs in Perl, modules are
available on <a href="http://www.cpan.org/">CPAN</a>. The most
- popular module for this purpose is CGI.pm. You might
- also consider CGI::Lite, which implements a minimal set of
- functionality, which is all you need in most programs.</p>
+ popular module for this purpose is <code>CGI.pm</code>. You might
+ also consider <code>CGI::Lite</code>, which implements a minimal
+ set of functionality, which is all you need in most programs.</p>
<p>If you're writing CGI programs in C, there are a variety of
- options. One of these is the CGIC library, from
- <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
- </p>
+ options. One of these is the <code>CGIC</code> library, from
+ <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="moreinfo" id="moreinfo">For more information</a></h2>
@@ -471,20 +464,15 @@
<p>There are a large number of CGI resources on the web. You
can discuss CGI problems with other users on the Usenet group
- comp.infosystems.www.authoring.cgi. And the -servers mailing
+ <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a>. And the -servers mailing
list from the HTML Writers Guild is a great source of answers
to your questions. You can find out more at
- <a href="http://www.hwg.org/lists/hwg-servers/">
- http://www.hwg.org/lists/hwg-servers/</a>
- </p>
+ <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>.</p>
<p>And, of course, you should probably read the CGI
specification, which has all the details on the operation of
CGI programs. You can find the original version at the
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">
- NCSA</a>
-
- and there is an updated draft at the
+ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> and there is an updated draft at the
<a href="http://web.golux.com/coar/cgi/">Common Gateway
Interface RFC project</a>.</p>
1.2.2.1 +111 -116 httpd-2.0/docs/manual/howto/cgi.xml
Index: cgi.xml
===================================================================
RCS file: /home/cvs/httpd-2.0/docs/manual/howto/cgi.xml,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- cgi.xml 17 Nov 2002 06:28:39 -0000 1.2
+++ cgi.xml 22 Dec 2002 15:24:57 -0000 1.2.2.1
@@ -13,15 +13,12 @@
<related>
<modulelist>
<module>mod_alias</module>
-
<module>mod_cgi</module>
</modulelist>
<directivelist>
<directive module="mod_mime">AddHandler</directive>
-
<directive module="core">Options</directive>
-
<directive module="mod_alias">ScriptAlias</directive>
</directivelist>
</related>
@@ -54,32 +51,31 @@
it, when that particular resource is requested by a
client.</p>
- <p>The
- <directive module="mod_alias">ScriptAlias</directive>
-
+ <p>The <directive module="mod_alias">ScriptAlias</directive>
directive looks like:</p>
- <example>ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/</example>
-
- <p>The example shown is from your default
- <code>httpd.conf</code>
+ <example>
+ ScriptAlias /cgi-bin/ /usr/local/apache/cgi-bin/
+ </example>
+ <p>The example shown is from your default <code>httpd.conf</code>
configuration file, if you installed Apache in the default
- location. The <code>ScriptAlias</code> directive is much like the
- <code>Alias</code> directive, which defines a URL prefix that
- is to mapped to a particular directory. <code>Alias</code>
- and <code>ScriptAlias</code> are usually used for directories
- that are outside of the <code>DocumentRoot</code> directory.
- The difference between <code>Alias</code> and
- <code>ScriptAlias</code> is that <code>ScriptAlias</code>
- has the added meaning that everything under that URL prefix
- will be considered a CGI program. So, the example above tells
- Apache that any request for a resource beginning with
- <code>/cgi-bin/</code> should be served from the directory
- <code>/usr/local/apache/cgi-bin/</code>, and should be treated
- as a CGI program.</p>
+ location. The <directive module="mod_alias">ScriptAlias</directive>
+ directive is much like the <directive module="mod_alias"
+ >Alias</directive> directive, which defines a URL prefix that
+ is to mapped to a particular directory. <directive>Alias</directive>
+ and <directive>ScriptAlias</directive> are usually used for
+ directories that are outside of the <directive module="core"
+ >DocumentRoot</directive> directory. The difference between
+ <directive>Alias</directive> and <directive>ScriptAlias</directive>
+ is that <directive>ScriptAlias</directive> has the added meaning
+ that everything under that URL prefix will be considered a CGI
+ program. So, the example above tells Apache that any request for a
+ resource beginning with <code>/cgi-bin/</code> should be served from
+ the directory <code>/usr/local/apache/cgi-bin/</code>, and should be
+ treated as a CGI program.</p>
- <p>For example, if the URL
+ <p>For example, if the URL
<code>http://www.example.com/cgi-bin/test.pl</code>
is requested, Apache will attempt to execute the file
<code>/usr/local/apache/cgi-bin/test.pl</code>
@@ -91,66 +87,74 @@
<section id="nonscriptalias">
<title>CGI outside of ScriptAlias directories</title>
- <p>CGI programs are often restricted to
- <code>ScriptAlias</code>'ed directories for security reasons.
- In this way,
- administrators can tightly control who is allowed to use CGI
- programs. However, if the proper security precautions are
+ <p>CGI programs are often restricted to <directive module="mod_alias"
+ >ScriptAlias</directive>'ed directories for security reasons.
+ In this way, administrators can tightly control who is allowed to
+ use CGI programs. However, if the proper security precautions are
taken, there is no reason why CGI programs cannot be run from
arbitrary directories. For example, you may wish to let users
have web content in their home directories with the
- <code>UserDir</code> directive. If they want to have their own
- CGI programs, but don't have access to the main
- <code>cgi-bin</code> directory, they will need to be able to
+ <directive module="mod_userdir">UserDir</directive> directive.
+ If they want to have their own CGI programs, but don't have access to
+ the main <code>cgi-bin</code> directory, they will need to be able to
run CGI programs elsewhere.</p>
</section>
<section id="options">
<title>Explicitly using Options to permit CGI execution</title>
- <p>You could explicitly use the <code>Options</code>
- directive, inside your main server configuration file, to
- specify that CGI execution was permitted in a particular
+ <p>You could explicitly use the <directive module="core"
+ >Options</directive> directive, inside your main server configuration
+ file, to specify that CGI execution was permitted in a particular
directory:</p>
- <example><Directory /usr/local/apache/htdocs/somedir> <br />
- Options +ExecCGI<br />
- </Directory></example>
+ <example>
+ <Directory /usr/local/apache/htdocs/somedir><br />
+ <indent>
+ Options +ExecCGI<br />
+ </indent>
+ </Directory>
+ </example>
<p>The above directive tells Apache to permit the execution
of CGI files. You will also need to tell the server what
- files are CGI files. The following
- <code>AddHandler</code>
-
- directive tells the server to treat all files with the
- <code>cgi</code> or <code>pl</code> extension as CGI programs:</p>
+ files are CGI files. The following <directive module="mod_mime"
+ >AddHandler</directive> directive tells the server to treat all
+ files with the <code>cgi</code> or <code>pl</code> extension as CGI
+ programs:</p>
- <example>AddHandler cgi-script cgi pl</example>
+ <example>
+ AddHandler cgi-script cgi pl
+ </example>
</section>
<section id="htaccess">
<title>.htaccess files</title>
- <p>A <code>.htaccess</code> file is a way to set configuration
- directives on a per-directory basis. When Apache serves a
- resource, it looks in the directory from which it is serving
+ <p>A <a href="htaccess.html"><code>.htaccess</code> file</a> is a way
+ to set configuration directives on a per-directory basis. When Apache
+ serves a resource, it looks in the directory from which it is serving
a file for a file called <code>.htaccess</code>, and, if it
finds it, it will apply directives found therein.
<code>.htaccess</code> files can be permitted with the
- <code>AllowOverride</code> directive, which specifies what
- types of directives can
+ <directive module="core">AllowOverride</directive> directive,
+ which specifies what types of directives can
appear in these files, or if they are not allowed at all. To
permit the directive we will need for this purpose, the
following configuration will be needed in your main server
configuration:</p>
- <example>AllowOverride Options</example>
+ <example>
+ AllowOverride Options
+ </example>
<p>In the <code>.htaccess</code> file, you'll need the
following directive:</p>
- <example>Options +ExecCGI</example>
+ <example>
+ Options +ExecCGI
+ </example>
<p>which tells Apache that execution of CGI programs is
permitted in this directory.</p>
@@ -168,7 +172,9 @@
what sort of content it is receiving. Most of the time, this
will look like:</p>
- <example>Content-type: text/html</example>
+ <example>
+ Content-type: text/html
+ </example>
<p>Secondly, your output needs to be in HTML, or some other
format that a browser will be able to display. Most of the
@@ -187,9 +193,10 @@
file called <code>first.pl</code>, and put it in your
<code>cgi-bin</code> directory.</p>
- <example>#!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- print "Hello, World.";
+ <example>
+ #!/usr/bin/perl<br />
+ print "Content-type: text/html\n\n";<br />
+ print "Hello, World.";
</example>
<p>Even if you are not familiar with Perl, you should be able
@@ -201,20 +208,20 @@
talked about, followed by two carriage-return newline pairs.
This puts a blank line after the header, to indicate the end
of the HTTP headers, and the beginning of the body. The third
- line prints the string ``Hello, World.'' And that's the end
+ line prints the string "Hello, World.". And that's the end
of it.</p>
<p>If you open your favorite browser and tell it to get the
address</p>
- <example>http://www.example.com/cgi-bin/first.pl</example>
+ <example>
+ http://www.example.com/cgi-bin/first.pl
+ </example>
<p>or wherever you put your file, you will see the one line
- <code>Hello, World.</code>
-
- appear in your browser window. It's not very exciting, but
- once you get that working, you'll have a good chance of
- getting just about anything working.</p>
+ <code>Hello, World.</code> appear in your browser window.
+ It's not very exciting, but once you get that working, you'll
+ have a good chance of getting just about anything working.</p>
</section>
</section>
@@ -226,35 +233,21 @@
<dl>
<dt>The output of your CGI program</dt>
-
- <dd>Great! That means everything worked fine.
- </dd>
+ <dd>Great! That means everything worked fine.</dd>
<dt>The source code of your CGI program or a "POST Method Not
Allowed" message</dt>
-
<dd>That means that you have not properly configured Apache
to process your CGI program. Reread the section on
<a href="#configuringapachetopermitcgi">configuring
- Apache</a>
-
- and try to find what you missed.
- </dd>
+ Apache</a> and try to find what you missed.</dd>
<dt>A message starting with "Forbidden"</dt>
-
<dd>That means that there is a permissions problem. Check the
-
- <a href="#errorlogs">Apache error log</a>
-
- and the section below on
- <a href="#permissions">file permissions</a>.
-
- <br />
- </dd>
+ <a href="#errorlogs">Apache error log</a> and the section below on
+ <a href="#permissions">file permissions</a>.</dd>
<dt>A message saying "Internal Server Error"</dt>
-
<dd>If you check the
<a href="#errorlogs">Apache error log</a>, you will probably
find that it says "Premature end of
@@ -270,22 +263,23 @@
<p>Remember that the server does not run as you. That is,
when the server starts up, it is running with the permissions
- of an unprivileged user - usually ``nobody'', or ``www'' -
- and so it will need extra permissions to execute files that
- are owned by you. Usually, the way to give a file sufficient
- permissions to be executed by ``nobody'' is to give everyone
- execute permission on the file:</p>
+ of an unprivileged user - usually <code>nobody</code>, or
+ <code>www</code> - and so it will need extra permissions to
+ execute files that are owned by you. Usually, the way to give
+ a file sufficient permissions to be executed by <code>nobody</code>
+ is to give everyone execute permission on the file:</p>
- <example>chmod a+x first.pl</example>
+ <example>
+ chmod a+x first.pl
+ </example>
<p>Also, if your program reads from, or writes to, any other
files, those files will need to have the correct permissions
to permit this.</p>
<p>The exception to this is when the server is configured to
- use <a href="../suexec.html">suexec</a>.
-
- This program allows CGI programs to be run under different
+ use <a href="../suexec.html">suexec</a>. This program allows
+ CGI programs to be run under different
user permissions, depending on which virtual host or user
home directory they are located in. Suexec has very strict
permission checking, and any failure in that checking will
@@ -313,7 +307,9 @@
interpreter (often <code>perl</code>) indicated in the first
line of your CGI program, which will look something like:</p>
- <example>#!/usr/bin/perl</example>
+ <example>
+ #!/usr/bin/perl
+ </example>
<p>Make sure that this is in fact the path to the
interpreter.</p>
@@ -350,7 +346,7 @@
become useful to understand more about what's happening behind
the scenes. Specifically, how the browser and server
communicate with one another. Because although it's all very
- well to write a program that prints ``Hello, World.'', it's not
+ well to write a program that prints "Hello, World.", it's not
particularly useful.</p>
<section id="env">
@@ -373,9 +369,8 @@
<p>These variables are available to the CGI programmer, and
are half of the story of the client-server communication. The
complete list of required variables is at
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">
- http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>
- </p>
+ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html"
+ >http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a>.</p>
<p>This simple Perl CGI program will display all of the
environment variables that are being passed around. Two
@@ -387,15 +382,17 @@
see some variables listed that were not in the official list.
In addition, Apache provides many different ways for you to
<a href="../env.html">add your own environment variables</a>
-
to the basic ones provided by default.</p>
<example>
- #!/usr/bin/perl<br />
- print "Content-type: text/html\n\n";<br />
- foreach $key (keys %ENV) {<br />
- print "$key --> $ENV{$key}<br>";<br />
- }</example>
+ #!/usr/bin/perl<br />
+ print "Content-type: text/html\n\n";<br />
+ foreach $key (keys %ENV) {<br />
+ <indent>
+ print "$key --> $ENV{$key}<br>";<br />
+ </indent>
+ }
+ </example>
</section>
<section id="stdin">
@@ -414,7 +411,7 @@
The program then can process that data as though it was
coming in from the keyboard, or from a file</p>
- <p>The ``special format'' is very simple. A field name and
+ <p>The "special format" is very simple. A field name and
its value are joined together with an equals (=) sign, and
pairs of values are joined together with an ampersand
(&). Inconvenient characters like spaces, ampersands, and
@@ -423,7 +420,7 @@
something like:</p>
<example>
- name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
+ name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey
</example>
<p>You'll sometimes also see this type of string appended to
@@ -450,14 +447,14 @@
<p>If you're writing CGI programs in Perl, modules are
available on <a href="http://www.cpan.org/">CPAN</a>. The most
- popular module for this purpose is CGI.pm. You might
- also consider CGI::Lite, which implements a minimal set of
- functionality, which is all you need in most programs.</p>
+ popular module for this purpose is <code>CGI.pm</code>. You might
+ also consider <code>CGI::Lite</code>, which implements a minimal
+ set of functionality, which is all you need in most programs.</p>
<p>If you're writing CGI programs in C, there are a variety of
- options. One of these is the CGIC library, from
- <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
- </p>
+ options. One of these is the <code>CGIC</code> library, from
+ <a href="http://www.boutell.com/cgic/"
+ >http://www.boutell.com/cgic/</a>.</p>
</section>
<section id="moreinfo">
@@ -465,20 +462,18 @@
<p>There are a large number of CGI resources on the web. You
can discuss CGI problems with other users on the Usenet group
- comp.infosystems.www.authoring.cgi. And the -servers mailing
+ <a href="news:comp.infosystems.www.authoring.cgi"
+ >comp.infosystems.www.authoring.cgi</a>. And the -servers mailing
list from the HTML Writers Guild is a great source of answers
to your questions. You can find out more at
- <a href="http://www.hwg.org/lists/hwg-servers/">
- http://www.hwg.org/lists/hwg-servers/</a>
- </p>
+ <a href="http://www.hwg.org/lists/hwg-servers/"
+ >http://www.hwg.org/lists/hwg-servers/</a>.</p>
<p>And, of course, you should probably read the CGI
specification, which has all the details on the operation of
CGI programs. You can find the original version at the
- <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">
- NCSA</a>
-
- and there is an updated draft at the
+ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html"
+ >NCSA</a> and there is an updated draft at the
<a href="http://web.golux.com/coar/cgi/">Common Gateway
Interface RFC project</a>.</p>