diff options
Diffstat (limited to '')
-rw-r--r-- | docs/manual/howto/cgi.html | 21 | ||||
-rw-r--r-- | docs/manual/howto/cgi.html.en | 601 | ||||
-rw-r--r-- | docs/manual/howto/cgi.html.es | 619 | ||||
-rw-r--r-- | docs/manual/howto/cgi.html.fr.utf8 | 643 | ||||
-rw-r--r-- | docs/manual/howto/cgi.html.ja.utf8 | 593 | ||||
-rw-r--r-- | docs/manual/howto/cgi.html.ko.euc-kr | 533 |
6 files changed, 3010 insertions, 0 deletions
diff --git a/docs/manual/howto/cgi.html b/docs/manual/howto/cgi.html new file mode 100644 index 0000000..81f1cfc --- /dev/null +++ b/docs/manual/howto/cgi.html @@ -0,0 +1,21 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: cgi.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.es +Content-Language: es +Content-type: text/html; charset=ISO-8859-1 + +URI: cgi.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: cgi.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR diff --git a/docs/manual/howto/cgi.html.en b/docs/manual/howto/cgi.html.en new file mode 100644 index 0000000..ef5d866 --- /dev/null +++ b/docs/manual/howto/cgi.html.en @@ -0,0 +1,601 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache Tutorial: Dynamic Content with CGI - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: Dynamic Content with CGI</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configuring Apache to permit CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Writing a CGI program</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">But it's still not working!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">What's going on behind the scenes?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI modules/libraries</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">For more information</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introduction</a></h2> + + + <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>The CGI (Common Gateway Interface) defines a way for a web + server to interact with external content-generating programs, + which are often referred to as CGI programs or CGI scripts. It + is a simple way to put dynamic content on + your web site, using whatever programming language you're most + familiar with. This document will be an introduction to setting + up CGI on your Apache web server, and getting started writing + CGI programs.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configuring Apache to permit CGI</a></h2> + + + <p>In order to get your CGI programs to work properly, you'll + need to have Apache configured to permit CGI execution. There + are several ways to do this.</p> + + <div class="warning">Note: If Apache has been built with shared module + support you need to ensure that the module is loaded; in your + <code>httpd.conf</code> you need to make sure the + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + directive has not been commented out. A correctly configured directive + may look like this: + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + + On Windows, or using a non-threaded MPM like prefork, A correctly + configured directive may look like this: + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>The + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + + directive tells Apache that a particular directory is set + aside for CGI programs. Apache will assume that every file in + this directory is a CGI program, and will attempt to execute + 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> + directive looks like:</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>The example shown is from your default <code>httpd.conf</code> + configuration file, if you installed Apache in the default + 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/apache2/cgi-bin/</code>, and should be + treated as a CGI program.</p> + + <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/apache2/cgi-bin/test.pl</code> + and return the output. Of course, the file will have to + exist, and be executable, and return output in a particular + way, or Apache will return an error message.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI outside of ScriptAlias directories</a></h3> + + + <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 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> + + <p>There are two steps to allowing CGI execution in an arbitrary + directory. First, the <code>cgi-script</code> handler must be + activated using the <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> or <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> directive. Second, + <code>ExecCGI</code> must be specified in the <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive.</p> + + + <h3><a name="options" id="options">Explicitly using Options to permit CGI execution</a></h3> + + + <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> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <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 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> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">.htaccess files</a></h3> + + + <p>The <a href="htaccess.html"><code>.htaccess</code> tutorial</a> + shows how to activate CGI programs if you do not have + access to <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">User Directories</a></h3> + + + <p>To allow CGI program execution for any file ending in + <code>.cgi</code> in users' directories, you can use the + following configuration.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>If you wish designate a <code>cgi-bin</code> subdirectory of + a user's directory where everything will be treated as a CGI + program, you can use the following.</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Writing a CGI program</a></h2> + + + <p>There are two main differences between ``regular'' + programming, and CGI programming.</p> + + <p>First, all output from your CGI program must be preceded by + a <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> header. This is HTTP header that tells the client + 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> + + <p>Secondly, your output needs to be in HTML, or some other + format that a browser will be able to display. Most of the + time, this will be HTML, but occasionally you might write a CGI + program that outputs a gif image, or other non-HTML + content.</p> + + <p>Apart from those two things, writing a CGI program will look + a lot like any other program that you might write.</p> + + <h3><a name="firstcgi" id="firstcgi">Your first CGI program</a></h3> + + + <p>The following is an example CGI program that prints one + line to your browser. Type in the following, save it to a + file called <code>first.pl</code>, and put it in your + <code>cgi-bin</code> directory.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hello, World.";</pre> + + + <p>Even if you are not familiar with Perl, you should be able + to see what is happening here. The first line tells Apache + (or whatever shell you happen to be running under) that this + program can be executed by feeding the file to the + interpreter found at the location <code>/usr/bin/perl</code>. + The second line prints the content-type declaration we + 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 + 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> + + <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> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">But it's still not working!</a></h2> + + + <p>There are four basic things that you may see in your browser + when you try to access your CGI program from the web:</p> + + <dl> + <dt>The output of your CGI program</dt> + <dd>Great! That means everything worked fine. If the output is correct, + but the browser is not processing it correctly, make sure you have the + correct <code>Content-Type</code> set in your CGI program.</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="#configuring">configuring + 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>.</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 + script headers", possibly along with an error message + generated by your CGI program. In this case, you will want to + check each of the below sections to see what might be + preventing your CGI program from emitting the proper HTTP + headers.</dd> + </dl> + + <h3><a name="permissions" id="permissions">File permissions</a></h3> + + + <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 <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> + + <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> + + + + <h3><a name="pathinformation" id="pathinformation">Path information and environment</a></h3> + + + <p>When you run a program from your command line, you have + certain information that is passed to the shell without you + thinking about it. For example, you have a <code>PATH</code>, + which tells the shell where it can look for files that you + reference.</p> + + <p>When a program runs through the web server as a CGI program, + it may not have the same <code>PATH</code>. Any programs that you + invoke in your CGI program (like <code>sendmail</code>, for + example) will need to be specified by a full path, so that the + shell can find them when it attempts to execute your CGI + program.</p> + + <p>A common manifestation of this is the path to the script + interpreter (often <code>perl</code>) indicated in the first + line of your CGI program, which will look something like:</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Make sure that this is in fact the path to the + interpreter.</p> + <div class="warning"> + When editing CGI scripts on Windows, end-of-line characters may be + appended to the interpreter path. Ensure that files are then + transferred to the server in ASCII mode. Failure to do so may + result in "Command not found" warnings from the OS, due to the + unrecognized end-of-line character being interpreted as a part of + the interpreter filename. + </div> + + + <h3><a name="missingenv" id="missingenv">Missing environment variables</a></h3> + + + <p>If your CGI program depends on non-standard <a href="#env">environment variables</a>, you will need to + assure that those variables are passed by Apache.</p> + + <p>When you miss HTTP headers from the environment, make + sure they are formatted according to + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, + section 4.2: Header names must start with a letter, + followed only by letters, numbers or hyphen. Any header + violating this rule will be dropped silently.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Program errors</a></h3> + + + <p>Most of the time when a CGI program fails, it's because of + a problem with the program itself. This is particularly true + once you get the hang of this CGI stuff, and no longer make + the above two mistakes. The first thing to do is to make + sure that your program runs from the command line before + testing it via the web server. For example, try:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(Do not call the <code>perl</code> interpreter. The shell + and Apache should find the interpreter using the <a href="#pathinformation">path information</a> on the first line of + the script.)</p> + + <p>The first thing you see written by your program should be + a set of HTTP headers, including the <code>Content-Type</code>, + followed by a blank line. If you see anything else, Apache will + return the <code>Premature end of script headers</code> error if + you try to run it through the server. See <a href="#writing">Writing a CGI program</a> above for more + details.</p> + + + <h3><a name="errorlogs" id="errorlogs">Error logs</a></h3> + + + <p>The error logs are your friend. Anything that goes wrong + generates message in the error log. You should always look + there first. If the place where you are hosting your web site + does not permit you access to the error log, you should + probably host your site somewhere else. Learn to read the + error logs, and you'll find that almost all of your problems + are quickly identified, and quickly solved.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>The <a href="../suexec.html">suexec</a> support 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 result in your CGI programs + failing with <code>Premature end of script headers</code>.</p> + + <p>To check if you are using suexec, run <code>apachectl + -V</code> and check for the location of <code>SUEXEC_BIN</code>. + If Apache finds an <code class="program"><a href="../programs/suexec.html">suexec</a></code> binary there on startup, + suexec will be activated.</p> + + <p>Unless you fully understand suexec, you should not be using it. + To disable suexec, simply remove (or rename) the <code class="program"><a href="../programs/suexec.html">suexec</a></code> + binary pointed to by <code>SUEXEC_BIN</code> and then restart the + server. If, after reading about <a href="../suexec.html">suexec</a>, + you still wish to use it, then run <code>suexec -V</code> to find + the location of the suexec log file, and use that log file to + find what policy you are violating.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">What's going on behind the scenes?</a></h2> + + + <p>As you become more advanced in CGI programming, it will + 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 + particularly useful.</p> + + <h3><a name="env" id="env">Environment variables</a></h3> + + + <p>Environment variables are values that float around you as + you use your computer. They are useful things like your path + (where the computer searches for the actual file + implementing a command when you type it), your username, your + terminal type, and so on. For a full list of your normal, + every day environment variables, type + <code>env</code> at a command prompt.</p> + + <p>During the CGI transaction, the server and the browser + also set environment variables, so that they can communicate + with one another. These are things like the browser type + (Netscape, IE, Lynx), the server type (Apache, IIS, WebSite), + the name of the CGI program that is being run, and so on.</p> + + <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://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>This simple Perl CGI program will display all of the + environment variables that are being passed around. Two + similar programs are included in the + <code>cgi-bin</code> + + directory of the Apache distribution. Note that some + variables are required, while others are optional, so you may + 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> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN and STDOUT</a></h3> + + + <p>Other communication between the server and the client + happens over standard input (<code>STDIN</code>) and standard + output (<code>STDOUT</code>). In normal everyday context, + <code>STDIN</code> means the keyboard, or a file that a + program is given to act on, and <code>STDOUT</code> + usually means the console or screen.</p> + + <p>When you <code>POST</code> a web form to a CGI program, + the data in that form is bundled up into a special format + and gets delivered to your CGI program over <code>STDIN</code>. + 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 + 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 + equals signs, are converted into their hex equivalent so that + they don't gum up the works. The whole data string might look + something like:</p> + + <div class="example"><p><code> + 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 + a URL. When that is done, the server puts that string + into the environment variable called + <code>QUERY_STRING</code>. That's called a <code>GET</code> + request. Your HTML form specifies whether a <code>GET</code> + or a <code>POST</code> is used to deliver the data, by setting the + <code>METHOD</code> attribute in the <code>FORM</code> tag.</p> + + <p>Your program is then responsible for splitting that string + up into useful information. Fortunately, there are libraries + and modules available to help you process this data, as well + as handle other of the aspects of your CGI program.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI modules/libraries</a></h2> + + + <p>When you write CGI programs, you should consider using a + code library, or module, to do most of the grunt work for you. + This leads to fewer errors, and faster development.</p> + + <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 <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 <code>CGIC</code> library, from + <a href="https://web.mit.edu/wwwdev/www/cgic.html">https://web.mit.edu/wwwdev/www/cgic.html</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> + + + <p>The current CGI specification is available in the + <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>When you post a question about a CGI problem that you're + having, whether to a mailing list, or to a newsgroup, make sure + you provide enough information about what happened, what you + expected to happen, and how what actually happened was + different, what server you're running, what language your CGI + program was in, and, if possible, the offending code. This will + make finding your problem much simpler.</p> + + <p>Note that questions about CGI problems should <strong>never</strong> + be posted to the Apache bug database unless you are sure you + have found a problem in the Apache source code.</p> + </div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="../en/howto/cgi.html" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.es b/docs/manual/howto/cgi.html.es new file mode 100644 index 0000000..bfaebd7 --- /dev/null +++ b/docs/manual/howto/cgi.html.es @@ -0,0 +1,619 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head> +<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutorial de Apache: Contenido Dinámico con CGI - Servidor HTTP Apache Versión 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p> +<p class="apache">Versión 2.4 del Servidor HTTP Apache</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Servidor HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentación</a> > <a href="../">Versión 2.4</a> > <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial de Apache: Contenido Dinámico con CGI</h1> +<div class="toplang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +<div class="outofdate">Esta traducción podría estar + obsoleta. Consulte la versión en inglés de la + documentación para comprobar si se han producido cambios + recientemente.</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introducción</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurando Apache para permitir CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Escribiendo un programa CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¡Pero todavía no funciona!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">¿Qué ocurre entre bastidores?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Módulos/librerías CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Para más información</a></li> +</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introducción</a></h2> + + <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) es un método por el cual + un servidor web puede interactuar con programas externos de + generación de contenido, a ellos nos referimos comúnmente como + programas CGI o scripts CGI. Es el método más común y sencillo de + mostrar contenido dinámico en su sitio web. Este documento es una + introducción para configurar CGI en su servidor web Apache, y de + iniciación para escribir programas CGI.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurando Apache para permitir CGI</a></h2> + + + <p>Para conseguir que sus programas CGI funcionen correctamente, + deberá configurar Apache para que permita la ejecución de CGI. Hay + distintas formas de hacerlo.</p> + + <div class="warning">Nota: Si Apache ha sido compilado con soporte + de módulos compartidos, necesitará que el módulo de CGI esté cargado; + en su <code>httpd.conf</code> tiene que asegurarse de que la directiva + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + no ha sido comentada. Una directiva configurada correctamente sería así: + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + En Windows, o si usa un mpm que no es multihilo, como prefork, una + directiva configurada correctamente podría definirse así: + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + indica a Apache que un directorio se ha configurado específicamente + para programas CGI. Apache asumirá que cada fichero en este + directorio es un programa CGI, e intentará ejecutarlos cuando un + cliente solicita este recurso.</p> + + <p>La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se puede + definir así:</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>El ejemplo que se muestra es de un archivo de configuración + <code>httpd.conf</code> por defecto si usted instaló Apache + en la ubicación por defecto. La directiva + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> es muy + parecida a la directiva <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, + ésta define un prefijo de URL que se enlaza a un directorio + en particular. <code class="directive">Alias</code> y + <code class="directive">ScriptAlias</code> se usan generalmente para + directorios que se encuentran fuera del directorio + <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La diferencia + entre <code class="directive">Alias</code> y <code class="directive">ScriptAlias</code> + es que en <code class="directive">ScriptAlias</code> cualquier elemento + debajo de ese prefijo de URL será considerado un programa CGI. Así, + el ejemplo de más arriba le indica a Apache que + cualquier solicitud para un recurso que comience con + <code>/cgi-bin/</code> debería servirse desde el directorio + <code>/usr/local/apache2/cgi-bin/</code>, y debería tratarse como un + programa CGI.</p> + + <p>Por ejemplo, si se solicita la URL + <code>http://www.example.com/cgi-bin/test.pl</code>, + Apache intentará ejecutar el archivo + <code>/usr/local/apache2/cgi-bin/test.pl</code> y dar + el resultado. Por supuesto el archivo debe existir y ser ejecutable, + y dar el resultado de una manera específica o Apache devolverá + un mensaje de error.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI fuera de directorios ScriptAlias</a></h3> + + + <p>Los programas CGI habitualmente se restringen a los directorios de + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> por razones de + seguridad. De esta manera, los administradores pueden controlar de una + manera más segura quien puede ejecutar programas CGI. Aun así, si no + se toman suficientes precauciones, no hay ninguna razón por la que + programas CGI no se puedan ejecutar desde directorios seleccionados de + manera arbitraria. Por ejemplo, quizás quiera permitir que usuarios del + sistema tengan contenido web en sus directorios home con la directiva + <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Si quieren + tener sus propios programas CGI, pero no tienen acceso al directorio + principal <code>cgi-bin</code>, necesitarán ser capaces de + ejecutar sus scripts CGI en algún otro sitio.</p> + + <p>Hay dos pasos a seguir para permitir la ejecución CGI en directorios + seleccionados de manera arbitraria. Primero, el handler + <code>cgi-script</code> debe estar activado usando la directiva + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> o la directiva + <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. Segundo, el parámetro + <code>ExecCGI</code> debe estar definido en la directiva + <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p> + + + <h3><a name="options" id="options">Usando Options de manera explícita para permitir ejecución de + CGI</a></h3> + + + <p>Puede usar la directiva + <code class="directive"><a href="../mod/core.html#options">Options</a></code>, en el archivo de + configuración principal para especificar que se permite la ejecución + de CGI en un directorio en particular:</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <p>Esta directiva de aquí arriba le indica a Apache que debe + permitir la ejecución de archivos CGI. También necesitará indicarle + al servidor que los archivos son archivos CGI. La directiva + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> le indica al + servidor que debe tratar a todos los archivos con la extensión + <code>cgi</code> o <code>pl</code> como programas CGI:</p> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">Ficheros .htaccess</a></h3> + + + <p>El <a href="htaccess.html">tutorial <code>.htaccess</code></a> + enseña como activar programas CGI si no tienes acceso a + <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">Directorios de Usuario</a></h3> + + + <p>Para permitir la ejecución de programas CGI para cualquier + archivo que acabe en <code>.cgi</code> en directorios de usuario, + puedes usar la siguiente configuración:</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>Si quiere designar un subdirectorio <code>cgi-bin</code> dentro + de un directorio de usuario en el que todos los ficheros serán + tratados como un programa CGI, puede usar lo siguiente:</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Escribiendo un programa CGI</a></h2> + + + <p>Hay dos diferencias principales entre programación ``regular'' y + programación en CGI.</p> + + <p>Primera, el resultado al completo de tu programa CGI debe estar + precedido de una cabecera <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">MIME-type</a>. Esta + cabecera HTTP le indica al cliente que tipo de contenido está + recibiendo. La mayor parte de las veces, ésto será algo como:</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>Segunda, el resultado debe estar en formato HTML, o cualquier + otro formato que su navegador sea capaz de mostrar. La mayor + parte de las veces, será HTML, pero otras escribirá un programa + CGI que devuelve una imagen gif, u otro contenido no-HTML.</p> + + <p>Aparte de estas dos cosas, escribir un programa en CGI se + parecerá bastante a cualquier otro programa que vaya a escribir. + </p> + + + <h3><a name="firstcgi" id="firstcgi">Su primer programa CGI</a></h3> + + + <p>A continuación podrá ver un ejemplo de programa CGI que muestra + una línea de texto en su navegador. Escriba lo siguiente, + guárdelo en un archivo con el nombre <code>first.pl</code>, y + póngalo en su directorio <code>cgi-bin</code>.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hola, Mundo.";</pre> + + + <p>Incluso si Perl no le resulta familiar, podrá ver lo que está + ocurriendo aquí. La primera línea le dice a Apache (o a + cualquier shell en la que se esté ejecutando) que este programa + puede ejecutarse con el intérprete en la ubicación + <code>/usr/bin/perl</code>. La segunda línea imprime la + declaración de Content-Type que mencionamos antes, seguida de + dos pares de retornos de carro. Esto pone una línea en blanco + después de la cabecera para indicar el final de las cabeceras + HTTP, y el comienzo del cuerpo del contenido. La tercera + imprime la cadena de caracteres "Hola, Mundo.". Y ese es el + final del programa.</p> + + <p>Si lo abre con su navegador favorito y le dice que solicite la + dirección</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p>o donde quiera que pusiera el archivo, verá una línea + <code>Hola, Mundo.</code> aparecerán la ventana del navegador. No es + muy emocionante, pero una vez que consiga que funcione podrá hacer + lo mismo con casi cualquier programa.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">¡Pero todavía no funciona!</a></h2> + + + <p>Hay 4 cosas básicas que puede llegar a ver en su navegador cuando + intenta acceder a un programa CGI desde la web:</p> + + <dl> + <dt>El resultado del programa CGI</dt> + <dd>¡Genial! Esto indica que todo funcionó correctamente. Si el + resultado es correcto, pero el navegador no lo procesa + correctamente, asegúrese de que tiene especificado + correctamente el <code>Content-Type</code> en su programa + CGI.</dd> + + <dt>El código fuente de su programa CGI o un mensaje del tipo + "POST Method Not Allowed".</dt> + + <dd>Eso significa que no ha configurado Apache de manera + apropiada para interpretar su programa CGI. Relea la sección + de <a href="#configuring">Configurando Apache</a> e intente + encontrar qué le falta.</dd> + + <dt>Un mensaje que empieza con "Forbidden"</dt> + <dd>Eso significa que hay un problema de permisos. Compruebe el + <a href="#errorlogs">Log de Errores de Apache</a> y la + sección de más abajo de <a href="#permissions">Permisos de + Fichero</a>.</dd> + + <dt>Un mensaje indicando "Internal Server Error"</dt> + <dd>Si comprueba el <a href="#errorlogs">Log de errores de + Apache</a>, probablemente encontrará que indica "Premature + end of script headers", posiblemente acompañado de otro + mensaje de error generado por su programa CGI. En este caso, + querrá comprobar cada una de las secciones de más adelante + para ver qué impide que su programa CGI genere las cabeceras + HTTP adecuadas.</dd> + </dl> + + <h3><a name="permissions" id="permissions">Permisos de Fichero</a></h3> + + + <p>Recuerde que el servidor no se ejecuta con su usuario. Es decir, + cuando el servidor arranca, está funcionando con un usuario sin + privilegios, generalmente el usuario <code>nobody</code>, o + <code>www-data</code>, así que necesitará permisos extra para + ejecutar los archivos de los que usted es dueño. Generalmente, + el método para dar permisos suficientes para que se pueda + ejecutar con <code>nobody</code> es dar permisos de ejecución a + todo el mundo en el fichero:</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>Además, si su programa lee desde o escribe a cualquier otro/s + archivo/s, esos archivos necesitarán tener los permisos correctos + para permitir esas acciones.</p> + + + + <h3><a name="pathinformation" id="pathinformation">Información de Ruta y Entorno</a></h3> + + + <p>Cuando ejecuta un programa desde la línea de comandos, usted tiene + cierta información que se le pasa a la shell sin que usted se + percate de ello. Por ejemplo, usted tiene un <code>PATH</code>, + que le indica a la shell dónde debe buscar archivos a los que usted + hace referencia.</p> + + <p>Cuando un programa se ejecuta a través del servidor web como un + programa CGI, puede que no tenga el mismo <code>PATH</code>. + Cualquier programa que invoque desde su programa CGI (como por + ejemplo <code>sendmail</code>) necesitará que se le indique la + ruta absoluta, así la shell puede encontrarlos cuando intenta + ejecutar su programa CGI.</p> + + <p>Una manifestación común de esto es la ruta del intérprete del + script (a menudo <code>perl</code>) indicado en la primera línea + de su programa CGI, que parecerá algo como:</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Asegúrese de que éste es de hecho el path de su intérprete.</p> + <div class="warning"> + Cuando edita scripts CGI en Windows, los caracteres de retorno de + carro podrían añadirse a la línea donde se especifica el intérprete. + Asegúrese de que los archivos se transfieren al servidor en modo + ASCII. Fallar en esto puede acabar con avisos del tipo "Command not + found" del Sistema Operativo, debido a que éste no reconoce los + caracteres de final de línea interpretados como parte del nombre + de fichero del intérprete. + </div> + + + <h3><a name="missingenv" id="missingenv">Faltan Variables de Entorno</a></h3> + + + <p>Si su programa CGI depende de <a href="#env">variables de entorno</a> no estándar, necesitará + asegurarse de que Apache pasa esas variables.</p> + + <p>Cuando no encuentra ciertas cabeceras HTTP del entorno, asegúrese + de que están formateadas según el + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, + sección 4.2: Nombres de Cabeceras deben empezar con una letra, + seguida solo de letras, números o guión. Cualquier cabecera + que no cumpla esta regla será ignorada de manera silenciosa.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Errores de Programa</a></h3> + + + <p>La mayor parte de las veces cuando un programa CGI falla, es por un + problema en el programa mismo. Esto ocurre generalmente cuando se + maneja bien con "esto del CGI", y ya no comete los dos errores + mencionados más arriba. Lo primero que hay que hacer es asegurarse + de que su programa se ejecuta correctamente en línea de comandos + antes de probarlo a través del servidor web. Por ejemplo, + intente:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(No llame al intérprete de <code>perl</code>. La consola y Apache + tienen que poder encontrar el intérprete usando línea + <a href="#pathinformation">línea de información</a> en la primera + línea del script.)</p> + + <p>Lo primero que debe ver escrito por su programa es un conjunto de + cabeceras HTTP, incluyendo el <code>Content-Type</code>, + seguido de una línea en blanco. Si ve alguna otra cosa, Apache + devolverá el error <code>Premature end of script headers</code> si + intenta lanzar el script en el servidor web. Vea + <a href="#writing">Escribiendo un programa CGI</a> más arriba para + más detalle.</p> + + + <h3><a name="errorlogs" id="errorlogs">Log de Errores</a></h3> + + + <p>El log de errores es su amigo. Cualquier cosa que vaya mal generará + un mensaje en el log de errores. Debería mirar siempre ahí primero. + Si el lugar donde está alojando su sitio web no permite que acceda + al log de errores, probablemente debería alojarlo en otro sitio. + Aprenda a leer el log de errores y se dará cuenta de que enseguida + averiguará el motivo del error y lo solucionará rápidamente.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>El programa de soporte <a href="../suexec.html">suexec</a> permite + que programas CGI se ejecuten con permisos de usuario distintos, + dependiendo del virtualhost o el directorio home donde se + encuentren. Suexec tiene una comprobación de permisos muy estricta, + y cualquier fallo en esa comprobación dará como resultado un error + con el mensaje <code>Premature end of script headers</code>.</p> + + <p>Para comprobar si está usando Suexec, ejecute + <code>apachectl -V</code> y compruebe la ubicación de + <code>SUEXEC_BIN</code>. Si Apache encuentra un binario + <code class="program"><a href="../programs/suexec.html">suexec</a></code> al arrancar, suexec se activará.</p> + + <p>A menos que comprenda suxec perfectamente, no debería usarlo. + Para desactivar suexec, basta con eliminar el binario + <code class="program"><a href="../programs/suexec.html">suexec</a></code> al que apunta <code>SUEXEC_BIN</code> y + reiniciar el servidor. Si después de leer sobre + <a href="../suexec.html">suexec</a> todavía quiere usarlo, entonces + ejecute <code>suexec -V</code> para encontrar la ubicación del + fichero log de suexec, y use ese log para encontrar que política no + está cumpliendo.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">¿Qué ocurre entre bastidores?</a></h2> + + + <p>En cuanto tenga conocimiento avanzado de programación CGI, le será + útil comprender más de lo que ocurre entre bastidores. + Específicamente, cómo el navegador y el servidor se comunican el uno + con el otro. Porque aunque esté muy bien escribir un programa que + diga "Hola, Mundo.", no tiene una gran utilidad.</p> + + <h3><a name="env" id="env">Variables de Entorno</a></h3> + + + <p>Las variables de entorno son valores que están ahí cuando + usa el ordenador. Son cosas útiles como el path (donde su ordenador + busca el archivo específico que se lanza cuando usted escribe un + comando), su nombre de usuario, el tipo de terminal que usa, etc. + Para una lista completa de la variables de entorno normales que se + se usan en su día a día escriba <code>env</code> en la línea de + comandos.</p> + + <p>Durante la transacción CGI, el servidor y el navegador también + configuran variables de entorno, y así pueden comunicarse entre + ellos. Cosas como el tipo de navegador (Netscape, IE, Lynx), el tipo + de servidor (Apache, IIS, WebSite), el nombre del programa CGI que + se está ejecutando, etc.</p> + + <p>Estas variables están disponibles para el programador de CGI, y son + la mitad de la historia de la comunicación cliente-servidor. La + lista completa de las variables necesarias se encuentra en + <a href="http://www.ietf.org/rfc/rfc3875">el RFC de Common Gateway + Interface</a>.</p> + + <p>Este sencillo programa CGI en Perl mostrará todas las variables + de entorno que se están pasando entre el cliente y el navegador. Dos + programas similares están incluidos en el directorio + <code>cgi-bin</code> de la distribución de Apache. Tenga en cuenta + que algunas variables son necesarias mientras que otras son + opcionales, así que es posible que vea algunas variables que no + están en la lista oficial. Adicionalmente, Apache aporta distintas + maneras diferentes para que pueda + <a href="../env.html">añadir sus variables de entorno</a> a las + básicas que se proveen por defecto.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; + +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN y STDOUT</a></h3> + + + <p>Otra comunicación entre el servidor y el cliente ocurre en la + entrada estándar (<code>STDIN</code>) y la salida estándar + (<code>STDOUT</code>). En el contexto normal de cada día, + <code>STDIN</code> es la entrada con el teclado, o un fichero que se + le da a un programa para que actúe sobre él, y <code>STDOUT</code> + generalmente es la consola o la pantalla.</p> + + <p>Cuando hace <code>POST</code> con un formulario de web a un programa + CGI, los datos en ese formulario se empaquetan en un formato especial + que se entrega a su programa CGI en el <code>STDIN</code>. + Entonces el programa puede procesar la información como si le llegara + desde el teclado, o desde un fichero.</p> + + <p>El "formato especial" es muy sencillo. Un nombre de campo y su + valor se asocian juntos con el signo igual (=), y pares de valores + se asocian juntos con el ampersand ó et en español (&). + Caracteres inconvenientes como los espacios, ampersands y signos de + igual, se convierten en su equivalente hexadecimal para no impidan + el funcionamiento correcto del programa. La cadena de datos al + completo será algo como:</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>A veces tendrá este tipo de cadena de caracteres al final de una + URL. Cuando esto ocurre, el servidor pone esa cadena en una variable + de entorno que se llama <code>QUERY_STRING</code>. Esto se llama + solicitud <code>GET</code>. Su formulario HTML especifica si se usa + un <code>GET</code> o un <code>POST</code> para entregar la + información, configurando el atributo <code>METHOD</code> en la + etiqueta <code>FORM</code>.</p> + + <p>Su programa es el responsable de convertir esa cadena de + caracteres en información útil. Afortunadamente, hay librerías y + módulos disponibles que ayudan a procesar la información, así como a + gestionar los distintos aspectos de su programa CGI.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">Módulos/librerías CGI</a></h2> + + + <p>Cuando escribe programas CGI, debería considerar usar una librería de + código, o módulo, para hacer todo el trabajo más arduo por usted. + Esto lleva a tener menos errores y un desarrollo de código más + rápido.</p> + + <p>Si está escribiendo un programa CGI en Perl, existen módulos + disponibles en <a href="http://www.cpan.org/">CPAN</a>. El módulo más + conocido para este propósito es <code>CGI.pm</code>. Quizás quiera + considerar <code>CGI::Lite</code>, que implementa una funcionalidad + mínima, que es todo lo que se necesita en la mayoría de los programas.</p> + + <p>Si está escribiendo programas CGI en C, hay varidad de opciones. Una + de estas es la librería <code>CGIC</code>, de + <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">Para más información</a></h2> + + + <p>La especificación actual de CGI está disponible en el + <a href="http://www.ietf.org/rfc/rfc3875">RFC de Common Gateway + Interface</a>.</p> + + <p>Cuando envíe una pregunta sobre un problema de CGI, o bien a una + lista de correo, o a un grupo de noticias, asegúrese de que facilita suficiente + información de lo que ha ocurrido, de lo que espera que ocurra, y de + lo que está ocurriendo en su lugar que es diferente, el servidor que + está ejecutando, en qué lenguaje CGI está hecho su programa, y si es + posible, el código que falla. Esto hará encontrar el problema mucho más + fácil.</p> + + <p>Tenga en cuenta que las preguntas sobre problemas CGI + <strong>nunca</strong> deberían enviarse a la base de datos de bugs de + bugs de Apache a menos que esté seguro de haber encontrado un + problema en el código fuente de Apache.</p> + </div></div> +<div class="bottomlang"> +<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/directives.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.fr.utf8 b/docs/manual/howto/cgi.html.fr.utf8 new file mode 100644 index 0000000..8ce0d77 --- /dev/null +++ b/docs/manual/howto/cgi.html.fr.utf8 @@ -0,0 +1,643 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Tutoriel Apache : Contenu dynamique basé sur CGI - Serveur HTTP Apache Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Recettes et tutoriels</a></div><div id="page-content"><div id="preamble"><h1>Tutoriel Apache : Contenu dynamique basé sur CGI</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurer Apache pour autoriser CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">Ecrire un programme CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">Mais ça ne marche toujours pas !</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">Que se passe-t-il en coulisse</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Bibliothèques et modules CGI</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Pour plus d'informations</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Introduction</a></h2> + + + <table class="related"><tr><th>Modules Apparentés</th><th>Directives Apparentées</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) définit une méthode d'interaction + entre un serveur web et des programmes générateurs de contenu + externes, plus souvent appelés programmes CGI ou scripts CGI. + Il s'agit d'une méthode simple pour ajouter du contenu dynamique à votre site + web en utilisant votre langage de programmation préféré. + Ce document est une introduction à la configuration de CGI sur votre + serveur web Apache, et une initiation à l'écriture de programmes + CGI.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">Configurer Apache pour autoriser CGI</a></h2> + + + <p>Apache doit être configuré pour permettre l'exécution des + programmes CGI, pour que vos programmes CGI puissent fonctionner + correctement. Il existe plusieurs méthodes pour y parvenir.</p> + + <div class="warning">Note: si Apache a été compilé avec le support + des modules partagés (DSO), vous devez vous assurer que le module CGI est + chargé ; vous devez pour cela vérifier que la directive <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> correspondante n'a pas été + commentée dans votre <code>httpd.conf</code>. Une directive correcte + doit ressembler à ceci : + + <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre> + + + + Sous Windows, ou si l'on utilise un module MPM non-threadé comme prefork, + une directive correctement configurée sera du style : + + <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre> +</div> + + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> indique à Apache qu'un + répertoire particulier est dédié aux programmes CGI. Apache + considérera que tout fichier situé dans ce répertoire est un + programme CGI, et tentera de l'exécuter lorsque cette ressource + fera l'objet d'une requête client.</p> + + <p>La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se présente comme suit + :</p> + + <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre> + + + <p>Cet exemple est tiré de votre fichier de configuration + <code>httpd.conf</code> par défaut, si vous avez installé Apache + dans son répertoire par défaut. La directive <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> est similaire à la + directive <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>, qui + définit à quel répertoire particulier doit correspondre un préfixe + d'URL. <code class="directive">Alias</code> et + <code class="directive">ScriptAlias</code> sont généralement utilisés pour + accéder à des répertoires situés en dehors du répertoire défini + par la directive <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La différence entre + <code class="directive">Alias</code> et <code class="directive">ScriptAlias</code> + réside dans le fait que <code class="directive">ScriptAlias</code> indique + en plus que tout ce qui se trouve sous le préfixe d'URL doit être + considéré comme un programme CGI. Ainsi, l'exemple ci-dessus + indique à Apache que toute requête pour une ressource commençant + par <code>/cgi-bin/</code> doit être servie depuis le répertoire + <code>/usr/local/apache2/cgi-bin/</code>, et doit être traitée en + tant que programme CGI.</p> + + <p>Par exemple, si une requête pour l'URL + <code>http://www.example.com/cgi-bin/test.pl</code> est + effectuée, Apache tentera d'exécuter le fichier + <code>/usr/local/apache2/cgi-bin/test.pl</code> et en renverra la + sortie. Bien entendu, le fichier doit exister, être exécutable, et + retourner sa sortie d'une manière particulière, sinon Apache + renverra un message d'erreur.</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">CGI en dehors des répertoires ScripAlias</a></h3> + + + <p>Pour des raisons de sécurité, la localisation des programmes + CGI est souvent restreinte aux + répertoires définis par <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>. De cette manière, les administrateurs + peuvent contrôler précisément qui est autorisé à utiliser les + programmes CGI. Cependant, si les précautions adéquates quant à + la sécurité sont prises, il n'y a aucune raison pour que les + programmes CGI ne puissent pas être exécutés depuis d'autres + répertoires. Par exemple, vous pouvez autoriser les utilisateurs à + enregistrer des contenus web dans leurs répertoires home à l'aide + de la directive <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. S'ils veulent mettre en + oeuvre leurs propres programmes CGI, mais n'ont pas l'autorisation + d'accès au répertoire <code>cgi-bin</code> principal, ils devront + être en mesure d'exécuter ces programmes depuis un autre + répertoire.</p> + + <p>L'autorisation d'exécution des programmes CGI dans un + répertoire arbitraire se fait en deux étapes. En premier lieu, le + gestionnaire <code>cgi-script</code> doit être activé à l'aide + d'une directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> ou <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. En second lieu, + <code>ExecCGI</code> doit être spécifié dans la directive <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p> + + + <h3><a name="options" id="options">Utilisation d'options explicites pour permettre l'exécution + des programmes CGI</a></h3> + + + <p>Vous pouvez utiliser de manière explicite la directive + <code class="directive"><a href="../mod/core.html#options">Options</a></code> dans le fichier de + configuration de votre serveur principal, pour indiquer que + l'exécution des programmes CGI est permise depuis un répertoire + particulier :</p> + + <pre class="prettyprint lang-config"><Directory "/usr/local/apache2/htdocs/somedir"> + Options +ExecCGI +</Directory></pre> + + + <p>La directive ci-dessus indique à Apache qu'il doit permettre + l'exécution des fichiers CGI. Vous devez aussi indiquer au serveur + quels fichiers sont des fichiers CGI. La directive <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> suivante indique au + serveur qu'il doit traiter tous les fichiers possédant une + extension <code>cgi</code> ou <code>pl</code> en tant que + programmes CGI :</p> + + <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre> + + + + <h3><a name="htaccess" id="htaccess">Fichiers .htaccess</a></h3> + + + <p>Le <a href="htaccess.html"><code>tutoriel + .htaccess</code></a> montre comment activer les programmes + CGI si vous n'avez pas accès au + fichier <code>httpd.conf</code>.</p> + + + <h3><a name="userdir" id="userdir">Répertoires utilisateurs</a></h3> + + + <p>Pour permettre l'exécution en tant que programme CGI de tout + fichier possédant l'extension <code>.cgi</code> et situé dans un + répertoire utilisateur, vous pouvez utiliser la configuration + suivante :</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html"> + Options +ExecCGI + AddHandler cgi-script .cgi +</Directory></pre> + + + <p>Pour indiquer un sous-répertoire <code>cgi-bin</code> d'un + répertoire utilisateur où tout fichier sera traité en tant que + programme CGI, vous pouvez utiliser ceci :</p> + + <pre class="prettyprint lang-config"><Directory "/home/*/public_html/cgi-bin"> + Options ExecCGI + SetHandler cgi-script +</Directory></pre> + + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">Ecrire un programme CGI</a></h2> + + + <p>Il y a deux différences principales entre la programmation + "standard" et la programmation CGI.</p> + + <p>En premier lieu, toute sortie de votre programme CGI doit être + précédée d'un en-tête <a class="glossarylink" href="../glossary.html#mime-type" title="voir glossaire">MIME-type</a>. Il s'agit d'un + en-tête HTTP qui indique au client quel type de contenu il reçoit. + La plupart du temps, il se présente comme suit :</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>En second lieu, votre sortie doit être en HTML, ou tout autre + format qu'un navigateur est en mesure d'afficher. La plupart du + temps, il s'agira de HTML, mais occasionnellement, vous pouvez être + amené à écrire un programme CGI qui renvoie une image gif, ou un + autre type de contenu non-HTML.</p> + + <p>A part ces deux différences, un programme CGI ressemblera à tout + autre programme que vous pourriez être amené à écrire.</p> + + <h3><a name="firstcgi" id="firstcgi">Votre premier programme CGI</a></h3> + + + <p>L'exemple suivant est un exemple de programme CGI qui permet + d'afficher une ligne de caractères dans votre navigateur. Ecrivez + ce qui suit, enregistrez le dans un fichier nommé + <code>premier.pl</code>, et placez le dans votre répertoire + <code>cgi-bin</code>.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +print "Content-type: text/html\n\n"; +print "Hello, World.";</pre> + + + <p>Même si Perl ne vous est pas familier, vous devriez être + capable de comprendre le fonctionnement de ce programme. La + première ligne indique à Apache (ou à toute interface à partir de + laquelle le programme s'exécute) que ce programme peut être + exécuté en fournissant son fichier à l'interpréteur + <code>/usr/bin/perl</code>. La seconde ligne affiche la + déclaration du type de contenu considéré, suivie de deux paires + "Retour chariot - Nouvelle ligne". Ceci a pour effet d'insérer une + ligne vide après l'en-tête pour marquer la fin des en-têtes HTTP, + et le début du corps du document. La troisième ligne affiche la + chaîne de caractères "Bonjour tout le monde . . .". Et c'est tout + ce dont vous avez besoin.</p> + + <p>Si vous ouvrez votre navigateur favori et lui indiquez + l'adresse</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/premier.pl + </code></p></div> + + <p>ou toute autre URL correspondant à votre programme CGI, Vous + verrez la ligne <code>Bonjour tout le monde . . .</code> + s'afficher dans la fenêtre de votre navigateur. Ce n'est pas + extraordinaire, mais si vous y êtes parvenu, vous avez de bonnes + chances d'y parvenir pour tout autre programme plus + sophistiqué.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">Mais ça ne marche toujours pas !</a></h2> + + + <p>Vous devriez voir au moins une des quatre sorties suivantes dans + votre navigateur lorsque vous essayez d'accéder à votre programme + CGI depuis le web :</p> + + <dl> + <dt>Le flux de sortie de votre programme CGI</dt> + <dd>Impeccable ! Cela signifie que tout fonctionne correctement. + Si la sortie est correcte mais n'est pas traitée correctement par + le navigateur, assurez-vous d'avoir défini + <code>Content-Type</code> de manière appropriée dans votre + programme CGI.</dd> + + <dt>Le code source de votre programme CGI ou un message "POST + Method Not Allowed"</dt> + <dd>Cela signifie que vous n'avez pas configuré Apache de manière + à ce qu'il puisse traiter votre programme CGI. Relisez la section + sur la <a href="#configuring">configuration d'Apache</a>, et + essayez de trouver votre erreur.</dd> + + <dt>Un message commençant par "Forbidden"</dt> + <dd>Ce type de message est révélateur d'un problème de + droits. Consultez le <a href="#errorlogs">journal des erreurs + d'Apache</a> et la section ci-dessous sur les <a href="#permissions">droits des fichiers</a>.</dd> + + <dt>Un message contenant "Internal Server Error"</dt> + <dd>Si vous consultez le <a href="#errorlogs">journal des erreurs + d'Apache</a>, vous y trouverez probablement des messages du type + "Premature end of script headers" (Fin prématurée des en-têtes de + script), éventuellement accompagnés d'un message d'erreur généré + par votre programme CGI. Dans ce cas, il va vous falloir lire + chacune des sections ci-dessous pour déterminer ce qui empêche + votre programme CGI de générer les en-têtes appropriés.</dd> + </dl> + + <h3><a name="permissions" id="permissions">Droits des fichiers</a></h3> + + + <p>Souvenez-vous que le serveur ne s'exécute pas sous votre nom. + En d'autres termes, lorsque le serveur a démarré, il s'exécute + avec les droits d'un utilisateur non privilégié - en général + <code>nobody</code>, ou <code>www</code> - et en conséquence, il + aura besoin de droits supplémentaires pour pouvoir exécuter des + fichiers dont vous êtes le propriétaire. En général, pour qu'un + fichier ait des droits suffisants pour être exécutable par + <code>nobody</code>, il suffit de lui attribuer des droits + d'exécution pour tout le monde :</p> + + <div class="example"><p><code> + chmod a+x premier.pl + </code></p></div> + + <p>En outre, si votre programme doit pouvoir accéder en lecture + et/ou écriture à d'autres fichiers, ces derniers devront avoir les + droits appropriés.</p> + + + + <h3><a name="pathinformation" id="pathinformation">Chemin des exécutables (PATH) et variables + d'environnement</a></h3> + + + <p>Lorsque vous lancez un programme depuis la ligne de commande, + certaines informations sont passées au shell sans que vous vous en + doutiez. Par exemple, la variable <code>PATH</code> indique au + shell où il doit rechercher les exécutables auxquels vous faites + référence.</p> + + <p>Lorsqu'un programme s'exécute depuis le serveur web en tant que + programme CGI, sa variable <code>PATH</code> n'aura peut-être pas + la même valeur. Tout programme que vous invoquez dans votre + programme CGI ( comme par exemple <code>sendmail</code>) devra + être spécifié par son chemin complet, de façon à ce que le shell + puisse le trouver lorsqu'il tentera d'exécuter votre programme + CGI.</p> + + <p>Un exemple typique de spécification de programme est le chemin + vers l'interpréteur de script (souvent <code>perl</code>) que l'on + trouve à la première ligne de votre programme CGI et qui va + ressembler à ceci :</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre> + + + <p>Assurez-vous qu'il s'agit bien du chemin correct vers + l'interpréteur.</p> + + <div class="warning"> + Lors de l'édition de scripts CGI sous Windows, il se peut que des + caractères de fin de ligne soient ajoutés au chemin de + l'interpréteur. Assurez-vous donc que les fichiers sont bien + transmis au serveur en mode ASCII. Dans le cas contraire, l'OS + pourra envoyer des avertissements "Command not found" à cause des + caractères de fin de ligne non reconnus car considérés comme + faisant partie du nom de fichier de l'interpréteur. + </div> + + + + <h3><a name="missingenv" id="missingenv">Variables d'environnement manquantes</a></h3> + + + <p>Si votre programme CGI dépend de <a href="#env">variables + d'environnement</a> non standards, vous devrez vous assurez que + ces variables lui sont bien transmises par Apache.</p> + + <p>Lorsque des en-têtes HTTP ne sont pas transmis à + l'environnement, assurez-vous qu'ils sont bien formatés selon la + <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, section + 4.2 : les noms d'en-têtes doivent commencer par une lettre, + elle-même suivie de lettres, chiffres ou traits d'union. Tout + en-tête dont le nom viole cette règle sera ignoré.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">Erreurs inhérentes au programme</a></h3> + + + <p>La plupart des échecs dans l'exécution d'un programme CGI + proviennent du programme lui-même. Ceci est particulièrement vrai + lorsque ce satané programme CGI se bloque, alors que vous avez + appris à ne plus commettre les deux erreurs précédentes. La + première chose à faire est de vous assurer que votre programme + s'exécute depuis la ligne de commande, avant de le tester à partir + du serveur web. Par exemple, essayez :</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./premier.pl + </code></p></div> + + <p>(N'invoquez pas l'interpréteur <code>perl</code>. Le shell et + Apache doivent être capable de le déterminer à partir de <a href="#pathinformation">l'information sur le chemin</a> située sur + la première ligne du script.)</p> + + <p>La première chose que vous devriez voir affichée par votre + programme est un ensemble d'en-têtes HTTP, comprenant entre autres + le <code>Content-Type</code>, et suivi d'une ligne vide. Si vous + voyez quoi que ce soit d'autre, Apache renverra l'erreur + <code>Premature end of script headers</code> si vous tentez + d'exécuter le programme depuis le serveur. Voir <a href="#writing">Ecriture d'un programme CGI</a> ci-dessus pour + plus de détails.</p> + + + <h3><a name="errorlogs" id="errorlogs">Journalisation des erreurs</a></h3> + + + <p>Les journaux d'erreurs sont vos amis. Toute anomalie de + fonctionnement est consignée dans le journal des erreurs et c'est + ici que vous devez regarder en premier en cas de problème. Si + l'hébergeur de votre site ne vous donne pas accès au journal des + erreurs, vous avez tout intérêt à vous tourner vers quelqu'un + d'autre. Apprenez à déchiffrer les journaux d'erreurs, et vous + vous apercevrez que la plupart des problèmes seront rapidement + identifiés . . . et résolus.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p>Le programme <a href="../suexec.html">suexec</a> permet + d'exécuter les programmes CGI avec des droits différents selon le + serveur virtuel ou le répertoire utilisateur dans lequel ils + se situent. Suexec effectue une vérification des droits très + stricte, et toute anomalie détectée au cours de cette vérification + entraînera un echec d'exécution de votre programme CGI avec + affichage de l'erreur <code>Premature end of script + headers</code>.</p> + + <p>Pour savoir si vous pouvez utiliser suexec, tapez la commande + <code>apachectl -V</code>, et regardez le chemin indiqué par + <code>SUEXEC_BIN</code>. Si au démarrage d'Apache, ce dernier + trouve un exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> dans ce chemin, + suexec sera activé.</p> + + <p>Si vous ne maîtrisez pas le fonctionnement de suexec, il vous + est déconseillé de l'utiliser. Pour désactiver suexec, supprimer + simplement (ou renommez) l'exécutable <code class="program"><a href="../programs/suexec.html">suexec</a></code> + pointé par <code>SUEXEC_BIN</code> et redémarrez le serveur. Si + après une lecture de <a href="../suexec.html">suexec</a>, vous + décidez quand-même de l'utiliser, tapez la commande <code>suexec + -V</code> pour voir où se situe le journal de suexec, et utilisez + ce dernier pour déterminer quelles règles vous violez + éventuellement.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">Que se passe-t-il en coulisse</a></h2> + + + <p>Lorsque vos compétences en programmation CGI seront plus + poussées, il s'avérera intéressant pour vous de mieux comprendre ce + qui se passe en coulisse, et en particulier la manière dont le + navigateur et le serveur dialoguent entre eux. En effet, bien qu'il + soit tout à fait louable d'écrire un programme qui affiche "Bonjour + tout le monde . . .", cela ne sert pas à grand chose.</p> + + <h3><a name="env" id="env">Variables d'environnement</a></h3> + + + <p>Les variables d'environnement sont des valeurs qui gravitent + autour de vous lorsque vous utilisez votre ordinateur. Elles sont + très utiles, à l'instar de votre chemin par défaut (où votre + ordinateur va rechercher le fichier physique correspondant à la + commande que vous avez tapée), votre nom d'utilisateur, le type de + votre terminal, etc... Pour obtenir une liste complète des + variables d'environnement standards que vous utilisez tous les + jours, tapez <code>env</code> dans votre interpréteur + de commandes.</p> + + <p>Au cours de la transaction CGI, le serveur et le navigateur + définissent aussi des variables d'environnement, de façon à ce + qu'ils puissent communiquer entre eux. Ces variables définissent + entre autre le type de navigateur (Netscape, IE, Lynx), le type de + serveur (Apache, IIS, WebSite), le nom du programme CGI en cours + d'exécution, etc...</p> + + <p>Ces variables sont à la disposition du programmeur CGI, et + elles constituent 50% de la communication client-serveur. La liste + complète des variables requises se trouve à + <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>Ce programme CGI basique en Perl permet d'afficher toutes les + variables d'environnement qui sont échangées. Deux programmes + similaires sont fournis avec la distribution d'Apache et situés + dans le répertoire <code>cgi-bin</code>. + Notez que certaines variables sont + obligatoires, alors que d'autres sont optionnelles, si bien que + vous verrez s'afficher certaines variables qui ne font pas partie + de la liste officielle. De plus, Apache vous propose de nombreuses + méthodes pour <a href="../env.html">ajouter vos propres + variables d'environnement</a> aux variables de base fournies par + défaut.</p> + + <pre class="prettyprint lang-perl">#!/usr/bin/perl +use strict; +use warnings; + +print "Content-type: text/html\n\n"; +foreach my $key (keys %ENV) { + print "$key --> $ENV{$key}<br>"; +}</pre> + + + + <h3><a name="stdin" id="stdin">STDIN et STDOUT</a></h3> + + + <p>L'entrée standard (<code>STDIN</code>) et la sortie standard + (<code>STDOUT</code>) constituent d'autres voies de communication + entre le client et le serveur. Dans un contexte normal, + <code>STDIN</code> correspond au clavier, ou à un fichier fourni + au programme à des fins de traitement, et <code>STDOUT</code> à la + console ou à l'écran.</p> + + <p>Lorsque vous transmettez un formulaire web à un programme CGI + par la méthode <code>POST</code>, les données de ce formulaire + sont transcrites dans un format spécial et transmises à votre + programme CGI via <code>STDIN</code>. Le programme peut alors les + traiter comme si elles provenaient du clavier ou d'un + fichier.</p> + + <p>Ce "format spécial" est très simple. Un nom de champ et sa + valeur sont reliés entre eux par un signe "égal" (=), et chacune + de ces paires nom champ/valeur est séparée de la suivante par un + "et" commercial (&). Les caractères + spéciaux comme les espaces, les "et" commerciaux, et les signes + "égal" sont convertis en leur équivalent hexadécimal pour éviter + qu'ils ne gâchent le travail. La chaîne contenant les données doit + ressembler à ceci :</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>Vous verrez aussi parfois une chaîne de ce type accolée à une + URL. Dans ce cas, le serveur enregistre cette chaîne dans la + variable d'environnement appelée <code>QUERY_STRING</code>. On a + alors affaire à une requête de type <code>GET</code>. Votre + formulaire HTML indique laquelle des méthodes <code>GET</code> ou + <code>POST</code> est utilisée pour transmettre les données, en + définissant l'attribut <code>METHOD</code> au niveau de la balise + <code>FORM</code>.</p> + + <p>Votre programme est ensuite chargé d'extraire les informations + utiles de cette chaîne. Heureusement, des bibliothèques et des + modules sont à votre disposition pour vous aider à traiter ces + données, et à gérer les différents aspects de votre programme + CGI.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">Bibliothèques et modules CGI</a></h2> + + + <p>Pour écrire un programme CGI, il vous est conseillé d'utiliser + une bibliothèque de code, ou un module, qui effectueront une grande + partie du travail de base pour vous. Ceci vous permettra de diminuer + le nombre d'erreurs et d'accélérer le développement.</p> + + <p>Si vous écrivez des programmes CGI en Perl, des modules sont à + votre disposition à <a href="http://www.cpan.org/">CPAN</a>. A ce + sujet, le module le plus populaire est <code>CGI.pm</code>. Vous + pouvez aussi essayer <code>CGI::Lite</code>, qui implémente les + fonctionnalités strictement nécessaires, mais suffisantes pour + la majorité des programmes.</p> + + <p>Si vous écrivez des programmes CGI en C, vous disposez de nombreuses + options. L'une d'elles est la bibliothèque <code>CGIC</code> de <a href="https://web.mit.edu/wwwdev/www/cgic.html">https://web.mit.edu/wwwdev/www/cgic.html</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">Pour plus d'informations</a></h2> + + + <p>La spécification CGI actuelle est disponible dans la <a href="http://www.ietf.org/rfc/rfc3875">Common Gateway + Interface RFC</a>.</p> + + <p>Lorsque vous postez une question à propos d'un problème CGI que + vous rencontrez, que ce soit dans une liste de diffusion ou dans un + newsgroup, faites en sorte de fournir suffisamment d'informations + sur le problème rencontré, ce que vous attendiez exactement, et en + quoi ce qui se produit est réellement différent de ce que vous + attendiez, quel serveur vous utilisez, en quel langage votre + programme CGI a été écrit, et, si possible, son code source. Ceci + permettra une résolution plus aisée de votre problème.</p> + + <p>Notez que les questions à propos de problèmes CGI ne doivent + <strong>jamais</strong> être postées dans la base de données de + bogues d'Apache, à moins que vous ne soyez sûr d'avoir trouvé un + problème dans le code source d'Apache.</p> + </div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.ja.utf8 b/docs/manual/howto/cgi.html.ja.utf8 new file mode 100644 index 0000000..476ac83 --- /dev/null +++ b/docs/manual/howto/cgi.html.ja.utf8 @@ -0,0 +1,593 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ バージョン 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.4</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI による動的コンテンツ</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">はじめに</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI を許可するように Apache を設定する</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI プログラムを書く</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">しかし、まだ動かない !</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">裏で何が起こっているのか?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI モジュール/ライブラリ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">更なる情報</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">はじめに</a></h2> + + + <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) は、ウェブサーバが + コンテンツ生成をする外部プログラムと協調して動作するための方法を + 定義しています。そのプログラムはしばしば CGI プログラムや + CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な + コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、 + Apache ウェブサーバで CGI を設定し、 + CGI プログラムを書き始めるための入門書となるでしょう。</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">CGI を許可するように Apache を設定する</a></h2> + + + <p>CGI プログラムを正しく動作させるには、CGI を許可するように + Apache の設定を行う必要があります。 + これを行なうための方法がいくつかあります。</p> + + <div class="warning"> + 注: Apache が共有モジュール機能着きでビルドされている場合、 + モジュールがロードされていることを確認してください。 + つまり <code>httpd.conf</code> で + <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code> + がコメントアウトされていないことを確認してください。 + 正常に設定されていれば次のようになるはずです: + + <div class="example"><p><code> + LoadModule cgi_module modules/mod_cgi.so + </code></p></div></div> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブを使用して、 + CGI プログラム用の特別な別ディレクトリを Apache に設定します。 + Apache は、このディレクトリ中の全てのファイルを CGI + プログラムであると仮定します。 + そして、この特別なリソースがクライアントから要求されると、 + そのプログラムの実行を試みます。</p> + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブは以下のように使用します:</p> + + <div class="example"><p><code> + ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ + </code></p></div> + + <p>デフォルト位置に Apache をインストールしたならば、 + この例はデフォルト状態の <code>httpd.conf</code> + 設定ファイルに含まれています。 + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + ディレクティブは、URL の前に付加するディレクトリを定義する + <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> + ディレクティブとかなり似ています。 + <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code> + は通常、<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> + ディレクトリ外のディレクトリのために使用されます。 + <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code> + との差は、<code class="directive">ScriptAlias</code> が接頭辞で始まるすべての + URL は CGI プログラムとみなされるという追加の意味を含んでいることです。 + 従って、上記の例では、<code>/cgi-bin/</code> + で始まるリソースへのあらゆるリクエストに対して、ディレクトリ + <code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを + CGI プログラムとして扱うよう Apache に示します。</p> + + <p>例えば、URL <code>http://www.example.com/cgi-bin/test.pl</code> + が要求された場合、Apache は ファイル + <code>/usr/local/apache2/cgi-bin/test.pl</code> + を実行し、その出力を返すことを試みます。 + もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。 + そうでなければ、Apache はエラーメッセージを返します。</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ディレクトリ外の CGI</a></h3> + + + <p>CGI プログラムは、セキュリティ上の理由から + <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + されたディレクトリに制限されることがしばしばあります。この方法により、 + CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。 + しかしながら、適切なセキュリティ事前対策がとられるならば、CGI + プログラムを任意のディレクトリで実行できないようにする理由はありません。 + 例えば、ユーザに <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> + ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。 + もし、彼らが CGI プログラムを持つことを望んでいても、メインの + <code>cgi-bin</code> ディレクトリへのアクセスができない場合、 + CGI プログラムを実行することができる他の場所が必要になります。</p> + + <p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。 + まず、<code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> や <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> ディレクティブによって + <code>cgi-script</code> ハンドラが可能になっている必要があります。 + 次に、<code class="directive"><a href="../mod/core.html#options">Options</a></code> ディレクティブで + <code>ExecCGI</code> が指定されていなければなりません。</p> + + + <h3><a name="options" id="options">CGI の実行を可能にするために Options を明示的に使用する</a></h3> + + + <p>サーバのメインの設定ファイル中で <code class="directive"><a href="../mod/core.html#options">Options</a></code> + ディレクティブを明示的に使用することで、特定のディレクトリ配下で + CGI の実行を許可するように指定することができます:</p> + + <div class="example"><p><code> + <Directory /usr/local/apache2/htdocs/somedir><br /> + <span class="indent"> + Options +ExecCGI<br /> + </span> + </Directory> + </code></p></div> + + <p>上記ディレクティブは、CGI ファイルの実行を可能にするよう + Apache に伝えます。また、どのファイルが CGI ファイルかを + サーバに伝える必要があります。次の + <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> + ディレクティブの例では、<code>cgi</code> または <code>pl</code> + を拡張子に持つすべてのファイルを CGI + プログラムとしてみなすことをサーバに伝えます:</p> + + <div class="example"><p><code> + AddHandler cgi-script .cgi .pl + </code></p></div> + + + <h3><a name="htaccess" id="htaccess">.htaccess ファイル</a></h3> + + + <p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a> + は <code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを + 使えるようにするかを説明しています。</p> + + + <h3><a name="userdir" id="userdir">User ディレクトリ</a></h3> + + + <p><code>.cgi</code> で終わるすべてのファイルに対して CGI プログラムの + 実行を許可するには、以下の設定を使用できます。</p> + + <div class="example"><p><code> + <Directory /home/*/public_html><br /> + <span class="indent"> + Options +ExecCGI<br /> + AddHandler cgi-script .cgi<br /> + </span> + </Directory> + </code></p></div> + + <p>ユーザディレクトリの <code>cgi-bin</code> サブディレクトリの + すべてのファイルを CGI プログラムとして指定したい場合には + 以下のようなものを使います。</p> + + <div class="example"><p><code> + <Directory /home/*/public_html/cgi-bin><br /> + <span class="indent"> + Options ExecCGI<br /> + SetHandler cgi-script<br /> + </span> + </Directory> + </code></p></div> + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">CGI プログラムを書く</a></h2> + + + <p>「通常の」プログラミングと CGI + プログラミングの間には主に二つの違いがあります。</p> + + <p>一つは、CGI プログラムのすべての出力には<a class="glossarylink" href="../glossary.html#mime-type" title="用語集を参照">MIME タイプ</a> + ヘッダを付けなければなりません。 + これはどのような種類のコンテンツを受け取っているかをクライアントに示す + HTTP ヘッダです。ほとんどの場合では、次のように出力します:</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>もう一つは、出力を HTML + か、ブラウザが表示することができる何か他の形式にする必要があります。 + 大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML + コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p> + + <p>これら二点以外では、CGI プログラムを書くことは、 + あなたが書いている他のプログラムとよく似ているでしょう。</p> + + <h3><a name="firstcgi" id="firstcgi">最初の CGI プログラム</a></h3> + + + <p>次に示すのは、ブラウザに 1 行印字する CGI + プログラムの例です。以下を入力し、<code>first.pl</code> + というファイルに保存し、それを <code>cgi-bin</code> + ディレクトリに置いてください。</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + print "Hello, World."; + </code></p></div> + + <p>Perl に精通していなくても、 + 何が起こるかを理解することはできるでしょう。1 行目は、 + <code>/usr/bin/perl</code> で見つけられるインタプリタに + このファイルを供給することでこのプログラムが実行されることを + Apache に (シェル上で実行しようとしているならば、そのシェルに ) + 示します。2 行目は、前述したとおり content-type の定義を印字します。 + これには復帰改行の二つの組を後に付加します。 + これにより、ヘッダの終りに空行が置かれ、HTTP + ヘッダの終りとボディの始まりを示します。3 行目は、"Hello, World." + という文字列を印字し、これで終りとなります。</p> + + <p>好みのブラウザを開き、アドレス</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p>あるいはファイルを置いたロケーションを指定すると、 + <code>Hello, World.</code> + という 1 行がブラウザウィンドに現れるでしょう。 + それはあまりエキサイティングなことではありません。 + しかし、これがうまく動けば、 + 他のどのようなものでも動かすことができるようになります。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot">しかし、まだ動かない !</a></h2> + + + <p>ウェブから CGI プログラムへのアクセスを行なったとき、 + ブラウザで見る可能性がある四つの基本的なことがあります:</p> + + <dl> + <dt>CGI プログラムの出力</dt> + <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。 + 出力が正常だけれども、ブラウザが正常に処理してくれない場合は、 + 正しい <code>Content-Type</code> を CGI プログラム内で + セットしたかを確認してください。</dd> + + <dt>CGI プログラムのソースコード、または "POST Method Not Allowed" + というメッセージ</dt> + <dd>これは、CGI プログラムを処理できるよう Apache + を適切に設定していなかったことを意味します。<a href="#configuring">「CGI を許可するように + Apache を設定する」</a>の章を読み直し、 + あなたが何を間違えたかを探してみてください。 + </dd> + + <dt>メッセージが "Forbidden" で始まっている</dt> + <dd>これはパーミッションの問題ということを意味します。 + <a href="#errorlogs">Apache のエラーログ</a>と、後述の<a href="#permissions">「ファイルのパーミッション」</a> + の章をチェックしてください。 + </dd> + + <dt>"Internal Server Error" というメッセージ</dt> + <dd><a href="#errorlogs">Apache + のエラーログ</a>をチェックすると、"Premature end of script headers" + というログが記録されていると思います。そして、おそらく CGI + プログラムによって生成されたエラーメッセージも記録されているでしょう。 + この場合、CGI プログラムが適切な + HTTP ヘッダを出力できない原因を知るために、 + 以下の各章でチェックしてみてください。</dd> + </dl> + + <h3><a name="permissions" id="permissions">ファイルのパーミッション</a></h3> + + + <p>サーバはあなたの権限で実行されていないのを忘れないように。 + つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code> + や <code>www</code> の権限で実行されます。したがって、あなたが所有する + ファイルを実行するには別のパーミッションが必要となります。 + 通常、<code>nobody</code> が実行するのに十分なパーミッションを与える方法は、 + ファイルに誰でも実行可能とするパーミッションを与えることです:</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、 + それらのファイルは、これが可能となる正しいパーミッション + を持っている必要があります。</p> + + + + <h3><a name="pathinformation" id="pathinformation">パス情報と環境</a></h3> + + + <p>コマンドラインからプログラムを実行するとき、 + 意識しなくてもシェルに渡される情報があります。 + 例えば、参照するファイルのためにどこを検索したらよいかを + シェルに伝える <code>PATH</code> があります。</p> + + <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、 + それは同じ <code>PATH</code> ではないかもしれません。 + CGI プログラム内で呼び出すあらゆるプログラム + (例えば、<code>sendmail</code> のようなもの) は、 + フルパスで指定する必要があるでしょう。それにより、CGI + プログラムを実行しようとしたとき、 + シェルはそのようなプログラムを見つけることができます。</p> + + <p>同様なことは、スクリプトのインタプリタ (しばしば <code>perl</code>) + へのパスで、CGI プログラムの 1 行目に次のように示されます:</p> + + <div class="example"><p><code> + #!/usr/bin/perl + </code></p></div> + + <p>これがインタープリタへの実際のパスであることを確認しておきます。</p> + + + <p>また、CGI プログラムが他の<a href="#env">環境変数</a>に依存している場合は、その環境変数が + Apache から渡されるようにする必要があります。</p> + + <h3><a name="syntaxerrors" id="syntaxerrors">プログラムエラー</a></h3> + + + <p>CGI + プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。 + 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、 + まず間違いなくそうでしょう。ブラウザを使ってテストする前に + まず確認することは、コマンドラインからプログラムが実行できることです。 + 例えば、以下を実行してみてください:</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(<code>perl</code> インタプリタは呼ばないでください。 + シェルと Apache がスクリプトの最初の行の <a href="#pathinformation">パス情報</a> を使って見つけます。)</p> + + <p>最初にプログラムから出力されるのは <code>Content-Type</code> を含み、 + 後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている + 場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには + <code>Premature end of script headers</code> エラーを出力します。詳細は + 上記の <a href="#writing">CGI プログラムを書く</a> を読んでください。</p> + + + <h3><a name="errorlogs" id="errorlogs">エラーログ</a></h3> + + + <p>エラーログは友達です。 + 全てのうまくいかないことは、エラーログにメッセージを生成します。 + 必ずそれを最初に見るべきです。 + もし、あなたがウェブサイトを主催している場所が + エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。 + エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、 + 迅速に解決されるということが分かるでしょう。</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p><a href="../suexec.html">suexec</a> サポートプログラムは + バーチャルホストやユーザのホームディレクトリの場所に依って + CGI プログラムを違うユーザ権限の下で走らせることを可能にします。 + Suexec の権限のチェックは非常に厳しく、それを満たさない場合は + CGI プログラムが <code>Premature end of script headers</code> エラーで + 実行されません。</p> + + <p>suexec を使っているかどうかを調べためには <code>apachectl + -V</code> を実行して、<code>SUEXEC_BIN</code> の場所を調べてください。 + Apache がそこに <code class="program"><a href="../programs/suexec.html">suexec</a></code> のバイナリを発見した場合は、suexec が + 使用されます。</p> + + <p>suexec を完全に理解していない限り、使うべきではありません。 + suexec を無効にするには、<code>SUEXEC_BIN</code> から指されている + <code class="program"><a href="../programs/suexec.html">suexec</a></code> バイナリを削除 (か名前を変更) するだけです。 + <a href="../suexec.html">suexec</a> を読んだ後で、まだそれを + 使いたいのであれば、<code>suexec -V</code> を実行して suexec の + ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を + 見つけてください。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">裏で何が起こっているのか?</a></h2> + + + <p>CGI プログラミングに習熟すると、 + 裏で起こっていることについて更に理解することの役に立ちます。 + ブラウザとサーバがどのように相互通信するかについては特にそうです。 + なぜなら、"Hello, World." + を印字するプログラムを書くことはおおいに結構ですが、 + それは特に有益ではありません。</p> + + <h3><a name="env" id="env">環境変数</a></h3> + + + <p>環境変数は、 + あなたがコンピュータを使うときに辺りに存在している値です。 + それらは、パス + (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、 + ユーザ名、端末型などのような便利なものです。 + 通常、普段使用している環境変数の完全なリストを調べるには、 + コマンドプロンプトで <code>env</code> を入力します。</p> + + <p>CGI の処理中、サーバとブラウザも環境変数を設定し、 + それにより相互に通信することができるようになります。 + その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ + (Apache, IIS, WebSite)、実行されている CGI + プログラムの名前などです。</p> + + <p>これらの変数は CGI プログラマが使用できます。 + そして、それはクライアントとサーバの通信の話の半分です。 + 必要な変数の完全なリストは <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> にあります。</p> + + <p>以下の単純な Perl CGI + プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、 + Apache ディストリビューションの <code>cgi-bin</code> + ディレクトリに二つ含まれています。 + いくつかの変数が必須であり、いくつかは任意であることに注意してください。 + そして、公式のリストにはないいくつかの変数が表示されているかもしれません。 + さらに、Apache はデフォルトで用意されている基本的なものに + <a href="../env.html">あなた自身の環境変数を加える</a>ための、 + 多くの異なる方法を用意してします。</p> + + <div class="example"><p><code> + #!/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 と STDOUT</a></h3> + + + <p>サーバとクライアント間のもう一つの通信は、標準入力 + (<code>STDIN</code>)と標準出力 (<code>STDOUT</code>) + を通じて行なわれます。通常の文脈において、<code>STDIN</code> + はキーボードやプログラムが動作するために与えられるファイルを意味し、 + <code>STDOUT</code> は通常コンソールまたはスクリーンを意味します。</p> + + <p>ウェブフォームから CGI プログラムへ<code>POST</code> + したとき、フォームのデータは特別なフォーマットで束ねられ、 + <code>STDIN</code> を通して、CGI プログラムに引き渡されます。 + プログラムはデータがキーボード + もしくはファイルから来ていたかのように処理することができます。</p> + + <p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール + (=) で結ばれます。そして値の組はアンパサンド (&) で結ばれます。 + スペース、アンパサンド、イコールのような面倒な文字は、 + それらが動作を駄目にしないようにその文字に相当する 16 進に変換されます。 + 全データ文字列は、以下のようになります: + </p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p>時々、このような文字列が URL + に付加されるのを見るでしょう。その場合、サーバは + <code>QUERY_STRING</code> という環境変数にその文字列を入れます。それは + <code>GET</code> リクエストと呼ばれます。 + HTML フォームでは、データを渡すために <code>GET</code> と + <code>POST</code> のどちらを使用するかを、<code>FORM</code> タグの + <code>METHOD</code> 属性の設定で指定します。</p> + + <p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。 + 幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。 + これらは、CGI プログラムの他の面でも同様に役に立ちます。</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI モジュール/ライブラリ</a></h2> + + + <p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる + コードライブラリまたはモジュールを使うことを検討すべきです。 + これはエラーを減らし、早い開発につながります。</p> + + <p>Perl で CGI プログラムを書いているなら、モジュールは <a href="http://www.cpan.org/">CPAN</a> で提供されています。 + この目的のための最も普及しているモジュールは <code>CGI.pm</code> です。 + <code>CGI::Lite</code> も検討しましょう。これは、ほとんどのプログラム + において必要とするすべての機能の最小セットの実装です。</p> + + <p>C で CGI プログラムを書いているなら、いろいろな + オプションがあります。これらの内の一つは <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a> + で提供されている <code>CGIC</code> ライブラリです。</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">更なる情報</a></h2> + + + <p>CGI に関する情報はウェブで数多く提供されています。CGI + の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> で、 + 他のユーザと論議することができます。HTML Writers Guide の + -servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。 + <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a> + で更に多くを探し出すことができます。</p> + + <p>そしてもちろん、おそらく CGI + プログラムの動作に関する詳細の全てが記述されている + CGI の仕様を読むべきです。オリジナルバージョンを + <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> + で、アップデートされたドラフトを + <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC + プロジェクト</a>で参照することができます。</p> + + <p>CGI の問題について、加わっているメーリングリストまたはニュース + グループに質問を送るとき、起こったもの、起こってほしいこと、 + 実際に起こったことがどう違うか、使用しているサーバ、 + CGI プログラムを記述している言語に関する十分な情報と、 + 可能であれば問題のコードを提供するようにしてください。 + そうすることで、問題がより間単に見つかるようになります。</p> + + <p>Apache のソースコードにおいて問題を発見したことを確信していない限り、 + CGI の問題に関する質問を Apache + バグデータベースに<strong>送るべきでない</strong> + ことに注目してください。</p> + </div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/howto/cgi.html.ko.euc-kr b/docs/manual/howto/cgi.html.ko.euc-kr new file mode 100644 index 0000000..13f1372 --- /dev/null +++ b/docs/manual/howto/cgi.html.ko.euc-kr @@ -0,0 +1,533 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>ġ 丮: CGI - Apache HTTP Server Version 2.4</title> +<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" /> +<script src="../style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="../images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="../images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>ġ 丮: CGI </h1> +<div class="toplang"> +<p><span> : </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" title="Korean"> ko </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Ұ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI ϵ ġ ϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI α ۼϱ</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot"> ʾƿ!</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">ڿ °?</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI /̺귯</a></li> +<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo"> ...</a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="intro" id="intro">Ұ</a></h2> + + + <table class="related"><tr><th>õ </th><th>õ þ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table> + + <p>CGI (Common Gateway Interface) CGI α + Ȥ CGI ũƮ θ, ( ) ܺ + α ϴ Ѵ. Ʈ + ϰ ̴. ġ + CGI ϴ Ұϰ, CGI α + ۼغ.</p> + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="configuring" id="configuring">CGI ϵ ġ ϱ</a></h2> + + + <p>CGI α ùٷ Ϸ CGI ϵ + ġ ؾ Ѵ. ϴ .</p> + + <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3> + + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + þ ϸ ġ Ư 丮 CGI α + д. ġ 丮 ִ CGI + α̶ Ͽ Ŭ̾Ʈ ڿ ûϸ ڿ + Ϸ õѴ.</p> + + <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> + þ Ѵ.</p> + + <div class="example"><p><code> + ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ + </code></p></div> + + <p> ġ ⺻ ҿ ġ + <code>httpd.conf</code> Ͽ ִ ̴. <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> þ <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> þ URL + պκ Ư 丮 Ѵ. + <code class="directive">Alias</code> + <code class="directive">ScriptAlias</code> <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code> 丮 ۿ ִ + 丮 Ѵ. <code class="directive">Alias</code> + <code class="directive">ScriptAlias</code> + <code class="directive">ScriptAlias</code> ߰ URL պκ + ϴ CGI α ϴ ̴. + ġ <code>/cgi-bin/</code> + ϴ ڿ ûϸ + <code>/usr/local/apache2/cgi-bin/</code> 丮 + ãƼ CGI α ó϶ ˸.</p> + + <p> , URL + <code>http://www.example.com/cgi-bin/test.pl</code> + ûϸ ġ + <code>/usr/local/apache2/cgi-bin/test.pl</code> + Ͽ ȯѴ. ϰ డϸ + ε ؾ Ѵ. ġ + .</p> + + + <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias 丮 ۿ ִ CGI</a></h3> + + + <p> Ȼ CGI α <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> 丮 + Ѵ. ڴ CGI α + ִ ִ. ġ + ߴٸ ƹ 丮 CGI α + . , <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> þ Ͽ + ڰ ڽ Ȩ丮 츦 + . ڰ ڽ CGI α ϰ + <code>cgi-bin</code> 丮 ٱ ٸ, ٸ + CGI α ϰ ̴.</p> + + <p>ƹ 丮 CGI Ϸ + ʿϴ. , <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code> þ Ͽ + <code>cgi-script</code> ڵ鷯 ۵ؾ Ѵ. ι°, + <code class="directive"><a href="../mod/core.html#options">Options</a></code> þ + <code>ExecCGI</code> ؾ Ѵ.</p> + + + <h3><a name="options" id="options">Options Ͽ CGI ϱ</a></h3> + + + <p> ּϿ <code class="directive"><a href="../mod/core.html#options">Options</a></code> þ Ͽ Ư + 丮 CGI ִ.</p> + + <div class="example"><p><code> + <Directory /usr/local/apache2/htdocs/somedir><br /> + <span class="indent"> + Options +ExecCGI<br /> + </span> + </Directory> + </code></p></div> + + <p> þ ġ CGI Ѵ. + CGI ˷ Ѵ. <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> þ + Ȯڰ <code>cgi</code> <code>pl</code> + CGI α̶ ˸.</p> + + <div class="example"><p><code> + AddHandler cgi-script .cgi .pl + </code></p></div> + + + <h3><a name="htaccess" id="htaccess">.htaccess </a></h3> + + + <p><a href="htaccess.html"><code>.htaccess</code> 丮</a> + <code>httpd.conf</code> ٱ 쿡 CGI α + ִ ˷ش.</p> + + + <h3><a name="userdir" id="userdir"> 丮</a></h3> + + + <p>Ʒ ϸ 丮 <code>.cgi</code> + CGI α Ѵ.</p> + + <div class="example"><p><code> + <Directory /home/*/public_html><br /> + <span class="indent"> + Options +ExecCGI<br /> + AddHandler cgi-script .cgi<br /> + </span> + </Directory> + </code></p></div> + + <p> ϸ 丮 <code>cgi-bin</code> + 丮 ִ CGI α νѴ.</p> + + <div class="example"><p><code> + <Directory /home/*/public_html/cgi-bin><br /> + <span class="indent"> + Options ExecCGI<br /> + SetHandler cgi-script<br /> + </span> + </Directory> + </code></p></div> + + + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="writing" id="writing">CGI α ۼϱ</a></h2> + + + <p>``Ϲ'' αְ CGI α ̿ ΰ + ֵ ִ.</p> + + <p>ù° ̴ CGI α ٸ ϱ + MIME-type ؾ Ѵٴ ̴. HTTP + Ŭ̾Ʈ Ŭ̾Ʈ ްԵ ̸ ˸. + .</p> + + <div class="example"><p><code> + Content-type: text/html + </code></p></div> + + <p>ι° ̴ HTML Ȥ ִ + ؾ Ѵٴ ̴. κ HTML , + gif HTML ƴ ϴ CGI + α ۼϴ 쵵 ִ.</p> + + <p>ΰ ϰ CGI α ۼ ̹ + ٸ α ſ ϴ.</p> + + <h3><a name="firstcgi" id="firstcgi">ó CGI α</a></h3> + + + <p> CGI α . + ״ <code>first.pl</code>̶ Ͽ ϰ, + <code>cgi-bin</code> 丮 Ѵ.</p> + + <div class="example"><p><code> + #!/usr/bin/perl<br /> + print "Content-type: text/html\n\n";<br /> + print "Hello, World."; + </code></p></div> + + <p>Perl ͼ ʴ Ͼ + ִ. ù° ġ(Ȥ ϴ ) + <code>/usr/bin/perl</code> ġ ִ Ͽ + α ϶ ˸. ι° + content-type ϰ carriage-return ٹٲ + ι Ѵ. ڿ HTTP ϴ + , Ѵ. ° "Hello, World." + ڿ Ѵ. ̰ ̴.</p> + + <p> ϰ ּҸ ԷѴ</p> + + <div class="example"><p><code> + http://www.example.com/cgi-bin/first.pl + </code></p></div> + + <p> Ҹ Էϸ, â <code>Hello, World.</code> + δ. е , ѹ ϴ + ٸ õ ִ.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="troubleshoot" id="troubleshoot"> ʾƿ!</a></h2> + + + <p> CGI α Ҷ ִ + ⺻ װ.</p> + + <dl> + <dt>CGI α </dt> + <dd>! Ѵٴ ̴. Ȯ + ùٷ ó Ѵٸ, CGI α + ùٸ <code>Content-Type</code> Ͽ ȮѴ.</dd> + + <dt>CGI α ҽڵ Ȥ "POST Method Not Allowed" + </dt> + <dd>CGI α ϵ ġ + ʾҴٴ ̴. <a href="#configuring">ġ ϱ</a> + ٽ а κ ִ ãƺ.</dd> + + <dt>"Forbidden" ϴ </dt> + <dd> ִٴ ̴. <a href="#errorlogs">ġ + α</a> Ʒ <a href="#permissions">ϱ</a> + Ȯ϶.</dd> + + <dt>"Internal Server Error" </dt> + <dd><a href="#errorlogs">ġ α</a> Ƹ + CGI α Բ "Premature end of + script headers" ̴. Ʒ ϳ + ȮϿ CGI α HTTP + ߴ ˾ƺ.</dd> + </dl> + + <h3><a name="permissions" id="permissions">ϱ</a></h3> + + + <p> Ű ϶. + , ϸ Ư ( + <code>nobody</code> <code>www</code>) Ѵ. + Ϸ ʿϴ. + Ͽ <code>nobody</code> ϱ + ֱ ο ش.</p> + + <div class="example"><p><code> + chmod a+x first.pl + </code></p></div> + + <p>, α ٸ аų ٸ Ͽ + ʿϴ.</p> + + + + <h3><a name="pathinformation" id="pathinformation"> ȯ</a></h3> + + + <p> α ϸ ڵ + ȴ. , <code>PATH</code> + ã Ҹ ˷ش.</p> + + <p> α CGI α Ҷ + <code>PATH</code> ٸ ִ. ( , + <code>sendmail</code> ) CGI α ȿ ϴ + ɾ η ؾ ɾ ã + ִ.</p> + + <p> CGI α ù° ٿ + ũƮ ( <code>perl</code>) ο + Ѵ.</p> + + <div class="example"><p><code> + #!/usr/bin/perl + </code></p></div> + + <p> ȮѴ.</p> + + <p>, CGI α ٸ <a href="#env">ȯ溯</a> + Ѵٸ ġ α ؾ + Ѵ.</p> + + + + <h3><a name="syntaxerrors" id="syntaxerrors">α </a></h3> + + + <p>CGI α ϴ κ α ü + ̴. Ư ΰ Ǽ ʾҰ + ִٸ . ϱ + α غ. , + Ѵ.</p> + + <div class="example"><p><code> + cd /usr/local/apache2/cgi-bin<br /> + ./first.pl + </code></p></div> + + <p>(<code>perl</code> . + ġ ũƮ ù° ٿ ִ <a href="#pathinformation"> </a> Ͽ + ãƾ Ѵ.)</p> + + <p>α <code>Content-Type</code> + HTTP ϰ ؾ Ѵ. ٸ + Ѵٸ ġ <code>Premature + end of script headers</code> ȯѴ. ڼ + <a href="#writing">CGI α ۼϱ</a> ϶.</p> + + + <h3><a name="errorlogs" id="errorlogs"> α</a></h3> + + + <p> α״ ̴. ߸Ǹ α + . α Ѵ. Ʈ + ȣϴ α ϰ Ѵٸ, Ƹ + ٸ ü ˾ƺ Ѵ. α , + κ ľϿ ذ ִ.</p> + + + <h3><a name="suexec" id="suexec">Suexec</a></h3> + + + <p><a href="../suexec.html">suexec</a> α + ϸ ȣƮ Ȥ 丮 ִ + CGI α ٸ ִ. + Suexec ſ ϰ ˻ϸ, ˻縦 ϳ + ϸ CGI α ʰ <code>Premature + end of script headers</code> ȯѴ.</p> + + <p>suexec ϰ ִ ˷ <code>apachectl -V</code> + Ͽ <code>SUEXEC_BIN</code> ġ ȮѴ. ġ + Ҷ ҿ suexec ߰ϸ, suexec + ִ.</p> + + <p>suexec ߴٸ ؼ ȵȴ. + suexec <code>SUEXEC_BIN</code> ġ + ִ <code>suexec</code> (Ȥ ϸ + ٲٰ) ϸ ȴ. <a href="../suexec.html">suexec</a> + ϰ ʹٸ, <code>suexec -V</code> Ͽ suexec + α ġ ˾Ƴ αϿ Ģ + ִ ã´.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="behindscenes" id="behindscenes">ڿ °?</a></h2> + + + <p>CGI αֿ ͼ ڿ ϸ + ȴ. ü ϴ + ϴ ̴. "Hello, World." ϴ + α ۼ ̷ α + ̴.</p> + + <h3><a name="env" id="env">ȯ溯</a></h3> + + + <p>ȯ溯 ǻ ϴ + ٴϴ ̴. ȯ溯 path (ǻͰ Է + ɾ شϴ ã ), ڸ, ̳ + . Ϲ ȯ溯 + Ʈ <code>env</code> ԷѴ.</p> + + <p>CGI Ҷ ȯ溯 + ȯѴ. (Netscape, IE, + Lynx), (ġ, IIS, WebSite), ϴ CGI + α ִ.</p> + + <p>CGI αӴ ̷ ְ, + ȯ溯 Ŭ̾Ʈ- ſ Ϻκ Ѵ. + ü ʼ <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> ִ.</p> + + <p>Ʒ Perl CGI α ڽſ + ȯ溯 ش. ġ <code>cgi-bin</code> + 丮 ̿ α ΰ ִ. + ʼ̰ ̴. Ͽ + δ. , ġ ⺻ ϴ ȯ溯 + ܿ <a href="../env.html"> ȯ溯 + ߰ ִ</a>.</p> + + <div class="example"><p><code> + #!/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 STDOUT</a></h3> + + + <p>, Ŭ̾Ʈ ǥԷ(<code>STDIN</code>) + ǥ(<code>STDOUT</code>) Ѵ. ϻ + <code>STDIN</code> Ű峪 α óϴ + Ÿ, <code>STDOUT</code> ܼ̳ ȭ Ѵ.</p> + + <p>CGI α (form) <code>POST</code>ϸ + Ŀ Է ڷḦ Ư CGI α + <code>STDIN</code> Ѵ. α Ű峪 + Ͽ ڷḦ óϵ ڷḦ ó ִ.</p> + + <p>"Ư " ſ ϴ. ̸ ȣ(=) + ϰ, ̸ ֵ ۻ(&) + Ѵ. , ۻ, ȣ ڿ ڴ + ȥ ʵ 16 ȯѴ. ڷ ڿ + .</p> + + <div class="example"><p><code> + name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey + </code></p></div> + + <p> URL ڿ ̷ ڿ ȴ. + ڿ <code>QUERY_STRING</code>̶ ȯ溯 Ѵ. + ̸ <code>GET</code> û̶ Ѵ. <code>FORM</code> + ± <code>METHOD</code> Ӽ Ͽ HTML (form) + ڷḦ <code>GET</code> <code>POST</code> Ѵ.</p> + + <p> α ̷ ڿ ɰ + Ѵ. ̷ ڷ ó CGI α ٸ + Ǵ ̺귯 ִ.</p> + + </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div> +<div class="section"> +<h2><a name="libraries" id="libraries">CGI /̺귯</a></h2> + + + <p>CGI α ۼҶ ۾ ִ ڵ + ̺귯 Ȥ غ Ѵ. ̷ + ϸ װ ٰ α ִ.</p> + + <p>Perl CGI α ۼѴٸ <a href="http://www.cpan.org/">CPAN</a> ã + ִ. CGI ߿ θ Ǵ + <code>CGI.pm</code>̴. κ α ּ + <code>CGI::Lite</code> ִ.</p> + + <p>C CGI α ۼѴٸ . + ϳ <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a> + ִ <code>CGIC</code> ̺귯.</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"> ...</a></h2> + + + <p> ſ CGI ִ. <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> + CGI ִ. HTML Writers Guild -servers + ϸƮ ã Ǹ Ҵ. <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a> + ִ.</p> + + <p> CGI α ۿ + CGI Ծ о . <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a> + ְ, ʾ <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface + RFC Ʈ</a> ִ.</p> + + <p>ϸƮ 쿡 ݰ ִ CGI + Ҷ , + ٸ, ϴ , CGI α ۼ + , ϸ ش ڵ带 ڼ . ذå + ã .</p> + + <p>ġ ҽڵ尡 ߸Ǿٰ Ȯ ʴ CGI + ġ ͺ̽ ø <strong></strong> + ȵȴ.</p> + </div></div> +<div class="bottomlang"> +<p><span> : </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="../es/howto/cgi.html" hreflang="es" rel="alternate" title="Español"> es </a> | +<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="../ko/howto/cgi.html" title="Korean"> ko </a></p> +</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/cgi.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="../mod/"></a> | <a href="../mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html"></a> | <a href="../sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file |