bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / httpd-2.0.64 / docs / manual / howto / cgi.html.ja.utf8
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p>
15 <p class="apache">Apache HTTP サーバ バージョン 2.0</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
18 <div id="path">
19 <a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.0</a> &gt; <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI による動的コンテンツ</h1>
20 <div class="toplang">
21 <p><span>Available Languages: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="../ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
23 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
24 </div>
25 <div class="outofdate">This translation may be out of date. Check the
26             English version for recent changes.</div>
27 </div>
28 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">はじめに</a></li>
29 <li><img alt="" src="../images/down.gif" /> <a href="#configuring">CGI を許可するように Apache を設定する</a></li>
30 <li><img alt="" src="../images/down.gif" /> <a href="#writing">CGI プログラムを書く</a></li>
31 <li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">しかし、まだ動かない !</a></li>
32 <li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">裏で何が起こっているのか?</a></li>
33 <li><img alt="" src="../images/down.gif" /> <a href="#libraries">CGI モジュール/ライブラリ</a></li>
34 <li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">更なる情報</a></li>
35 </ul></div>
36 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
37 <div class="section">
38 <h2><a name="intro" id="intro">はじめに</a></h2>
39     
40
41     <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>
42
43     <p>CGI (Common Gateway Interface) は、ウェブサーバが
44     コンテンツ生成をする外部プログラムと協調して動作するための方法を
45     定義しています。そのプログラムはしばしば CGI プログラムや
46     CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な
47     コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、
48     Apache ウェブサーバで CGI を設定し、
49     CGI プログラムを書き始めるための入門書となるでしょう。</p>
50   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
51 <div class="section">
52 <h2><a name="configuring" id="configuring">CGI を許可するように Apache を設定する</a></h2>
53     
54
55     <p>CGI プログラムを正しく動作させるには、CGI を許可するように
56     Apache の設定を行う必要があります。
57     これを行なうための方法がいくつかあります。</p>
58
59     <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
60       
61
62       <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
63       ディレクティブを使用して、
64       CGI プログラム用の特別な別ディレクトリを Apache に設定します。
65       Apache は、このディレクトリ中の全てのファイルを CGI
66       プログラムであると仮定します。
67       そして、この特別なリソースがクライアントから要求されると、
68       そのプログラムの実行を試みます。</p>
69
70       <p><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
71       ディレクティブは以下のように使用します:</p>
72
73       <div class="example"><p><code>
74         ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
75       </code></p></div>
76
77       <p>デフォルト位置に Apache をインストールしたならば、
78       この例はデフォルト状態の <code>httpd.conf</code>
79       設定ファイルに含まれています。
80       <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
81       ディレクティブは、URL の前に付加するディレクトリを定義する
82       <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>
83       ディレクティブとかなり似ています。
84       <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code>
85       は通常、<code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>
86       ディレクトリ外のディレクトリのために使用されます。
87       <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code>
88       との差は、<code class="directive">ScriptAlias</code> が接頭辞で始まるすべての
89       URL は CGI プログラムとみなされるという追加の意味を含んでいることです。
90       従って、上記の例では、<code>/cgi-bin/</code>
91       で始まるリソースへのあらゆるリクエストに対して、ディレクトリ
92       <code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを
93       CGI プログラムとして扱うよう Apache に示します。</p>
94
95       <p>例えば、URL <code>http://dev.rcbowen.com/cgi-bin/test.pl</code>
96       が要求された場合、Apache は ファイル
97       <code>/usr/local/apache2/cgi-bin/test.pl</code>
98       を実行し、その出力を返すことを試みます。
99       もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。
100       そうでなければ、Apache はエラーメッセージを返します。</p>
101     
102
103     <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ディレクトリ外の CGI</a></h3>
104       
105
106       <p>CGI プログラムは、セキュリティ上の理由から 
107       <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
108       されたディレクトリに制限されることがしばしばあります。この方法により、
109       CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。
110       しかしながら、適切なセキュリティ事前対策がとられるならば、CGI
111       プログラムを任意のディレクトリで実行できないようにする理由はありません。
112       例えば、ユーザに <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>
113       ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。
114       もし、彼らが CGI プログラムを持つことを望んでいても、メインの
115       <code>cgi-bin</code> ディレクトリへのアクセスができない場合、
116       CGI プログラムを実行することができる他の場所が必要になります。</p>
117
118       <p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。
119       まず、<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> ディレクティブによって
120       <code>cgi-script</code> ハンドラが可能になっている必要があります。
121       次に、<code class="directive"><a href="../mod/core.html#options">Options</a></code> ディレクティブで
122       <code>ExecCGI</code> が指定されていなければなりません。</p>
123     
124
125     <h3><a name="options" id="options">CGI の実行を可能にするために Options を明示的に使用する</a></h3>
126       
127
128       <p>サーバのメインの設定ファイル中で <code class="directive"><a href="../mod/core.html#options">Options</a></code>
129       ディレクティブを明示的に使用することで、特定のディレクトリ配下で
130       CGI の実行を許可するように指定することができます:</p>
131
132       <div class="example"><p><code>
133         &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
134         <span class="indent">
135           Options +ExecCGI<br />
136         </span>
137         &lt;/Directory&gt;
138       </code></p></div>
139
140       <p>上記ディレクティブは、CGI ファイルの実行を可能にするよう
141       Apache に伝えます。また、どのファイルが CGI ファイルかを
142       サーバに伝える必要があります。次の
143       <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code>
144       ディレクティブの例では、<code>cgi</code> または <code>pl</code>
145       を拡張子に持つすべてのファイルを CGI
146       プログラムとしてみなすことをサーバに伝えます:</p>
147
148       <div class="example"><p><code>
149         AddHandler cgi-script .cgi .pl
150       </code></p></div>
151     
152
153     <h3><a name="htaccess" id="htaccess">.htaccess files</a></h3>
154       
155
156       <p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a>
157       は <code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを
158       使えるようにするかを説明しています。</p>
159     
160
161     <h3><a name="userdir" id="userdir">User ディレクトリ</a></h3>
162       
163
164       <p><code>.cgi</code> で終わるすべてのファイルに対して CGI プログラムの
165       実行を許可するには、以下の設定を使用できます。</p>
166
167       <div class="example"><p><code>
168       &lt;Directory /home/*/public_html&gt;<br />
169       <span class="indent">
170         Options +ExecCGI<br />
171         AddHandler cgi-script .cgi<br />
172       </span>
173       &lt;/Directory&gt;
174       </code></p></div>
175
176       <p>ユーザディレクトリの <code>cgi-bin</code> サブディレクトリの
177       すべてのファイルを CGI プログラムとして指定したい場合には
178       以下のようなものを使います。</p>
179
180       <div class="example"><p><code>
181       &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
182       <span class="indent">
183         Options ExecCGI<br />
184         SetHandler cgi-script<br />
185       </span>
186       &lt;/Directory&gt;
187       </code></p></div>
188
189     
190   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
191 <div class="section">
192 <h2><a name="writing" id="writing">CGI プログラムを書く</a></h2>
193     
194
195     <p>「通常の」プログラミングと CGI
196     プログラミングの間には主に二つの違いがあります。</p>
197
198     <p>一つは、CGI プログラムのすべての出力には MIME-type
199     ヘッダを付けなければなりません。
200     これはどのような種類のコンテンツを受け取っているかをクライアントに示す
201     HTTP ヘッダです。ほとんどの場合では、次のように出力します:</p>
202
203     <div class="example"><p><code>
204       Content-type: text/html
205     </code></p></div>
206
207     <p>もう一つは、出力を HTML
208     か、ブラウザが表示することができる何か他の形式にする必要があります。
209     大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML
210     コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p>
211
212     <p>これら二点以外では、CGI プログラムを書くことは、
213     あなたが書いている他のプログラムとよく似ているでしょう。</p>
214
215     <h3><a name="firstcgi" id="firstcgi">最初の CGI プログラム</a></h3>
216       
217
218       <p>次に示すのは、ブラウザに 1 行印字する CGI
219       プログラムの例です。以下を入力し、<code>first.pl</code>
220       というファイルに保存し、それを <code>cgi-bin</code>
221       ディレクトリに置いてください。</p>
222
223       <div class="example"><p><code>
224         #!/usr/bin/perl<br />
225         print "Content-type: text/html\n\n";<br />
226         print "Hello, World.";
227       </code></p></div>
228
229       <p>Perl に精通していなくても、
230       何が起こるかを理解することはできるでしょう。1 行目は、
231       <code>/usr/bin/perl</code> で見つけられるインタプリタに
232       このファイルを供給することでこのプログラムが実行されることを
233       Apache に (シェル上で実行しようとしているならば、そのシェルに ) 
234       示します。2 行目は、前述したとおり content-type の定義を印字します。
235       これには復帰改行の二つの組を後に付加します。
236       これにより、ヘッダの終りに空行が置かれ、HTTP
237       ヘッダの終りとボディの始まりを示します。3 行目は、"Hello, World."
238       という文字列を印字し、これで終りとなります。</p>
239
240       <p>好みのブラウザを開き、アドレス</p>
241
242       <div class="example"><p><code>
243         http://www.example.com/cgi-bin/first.pl
244       </code></p></div>
245
246       <p>あるいはファイルを置いたロケーションを指定すると、
247       <code>Hello, World.</code>
248       という 1 行がブラウザウィンドに現れるでしょう。
249       それはあまりエキサイティングなことではありません。
250       しかし、これがうまく動けば、
251       他のどのようなものでも動かすことができるようになります。</p>
252     
253   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
254 <div class="section">
255 <h2><a name="troubleshoot" id="troubleshoot">しかし、まだ動かない !</a></h2>
256     
257
258     <p>ウェブから CGI プログラムへのアクセスを行なったとき、
259     ブラウザで見る可能性がある四つの基本的なことがあります:</p>
260
261     <dl>
262       <dt>CGI プログラムの出力</dt>
263       <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。
264       出力が正常だけれども、ブラウザが正常に処理してくれない場合は、
265       正しい <code>Content-Type</code> を CGI プログラム内で
266       セットしたかを確認してください。</dd>
267
268       <dt>CGI プログラムのソースコード、または "POST Method Not Allowed"
269       というメッセージ</dt> 
270       <dd>これは、CGI プログラムを処理できるよう Apache
271       を適切に設定していなかったことを意味します。<a href="#configuring">「CGI を許可するように
272       Apache を設定する」</a>の章を読み直し、
273       あなたが何を間違えたかを探してみてください。
274       </dd>
275
276       <dt>メッセージが "Forbidden" で始まっている</dt>
277       <dd>これはパーミッションの問題ということを意味します。
278       <a href="#errorlogs">Apache のエラーログ</a>と、後述の<a href="#filepermissions">「ファイルのパーミッション」</a>
279       の章をチェックしてください。
280       </dd>
281
282       <dt>"Internal Server Error" というメッセージ</dt>
283       <dd><a href="#errorlogs">Apache
284       のエラーログ</a>をチェックすると、"Premature end of script headers"
285       というログが記録されていると思います。そして、おそらく CGI
286       プログラムによって生成されたエラーメッセージも記録されているでしょう。
287       この場合、CGI プログラムが適切な
288       HTTP ヘッダを出力できない原因を知るために、
289       以下の各章でチェックしてみてください。</dd>
290     </dl>
291
292     <h3><a name="permissions" id="permissions">ファイルのパーミッション</a></h3>
293       
294
295       <p>サーバはあなたの権限で実行されていないのを忘れないように。
296       つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code>
297       や <code>www</code> の権限で実行されます。したがって、あなたが所有する
298       ファイルを実行するには別のパーミッションが必要となります。
299       通常、<code>nobody</code> が実行するのに十分なパーミッションを与える方法は、
300       ファイルに誰でも実行可能とするパーミッションを与えることです:</p>
301
302       <div class="example"><p><code>
303         chmod a+x first.pl
304       </code></p></div>
305
306       <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、
307       それらのファイルは、これが可能となる正しいパーミッション
308       を持っている必要があります。</p>
309
310     
311
312     <h3><a name="pathinformation" id="pathinformation">パス情報と環境</a></h3>
313       
314
315       <p>コマンドラインからプログラムを実行するとき、
316       意識しなくてもシェルに渡される情報があります。
317       例えば、参照するファイルのためにどこを検索したらよいかを
318       シェルに伝える <code>PATH</code> があります。</p>
319
320       <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、
321       それは同じ <code>PATH</code> ではないかもしれません。
322       CGI プログラム内で呼び出すあらゆるプログラム
323       (例えば、<code>sendmail</code> のようなもの) は、
324       フルパスで指定する必要があるでしょう。それにより、CGI
325       プログラムを実行しようとしたとき、
326       シェルはそのようなプログラムを見つけることができます。</p>
327
328       <p>同様なことは、スクリプトのインタプリタ (しばしば <code>perl</code>)
329       へのパスで、CGI プログラムの 1 行目に次のように示されます:</p>
330
331       <div class="example"><p><code>
332         #!/usr/bin/perl
333       </code></p></div>
334
335       <p>これがインタープリタへの実際のパスであることを確実にしておきます。</p>
336     
337
338     <h3><a name="syntaxerrors" id="syntaxerrors">プログラムエラー</a></h3>
339       
340
341       <p>CGI
342       プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。
343       一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、
344       まず間違いなくそうでしょう。ブラウザを使ってテストする前に
345       まず確認することは、コマンドラインからプログラムが実行できることです。
346       例えば、以下を実行してみてください:</p>
347
348       <div class="example"><p><code>
349       cd /usr/local/apache2/cgi-bin<br />
350       ./first.pl
351       </code></p></div>
352
353       <p>(<code>perl</code> インタプリタは呼ばないでください。
354       シェルと Apache がスクリプトの最初の行の <a href="#pathinformation">パス情報</a> を使って見つけます。)</p>
355
356       <p>最初にプログラムから出力されるのは <code>Content-Type</code> を含み、
357       後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている
358       場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには
359       <code>Premature end of script headers</code> エラーを出力します。詳細は
360       上記の <a href="#writing">CGI プログラムを書く</a> を読んでください。</p>
361     
362
363     <h3><a name="errorlogs" id="errorlogs">エラーログ</a></h3>
364       
365
366       <p>エラーログは友達です。
367       全てのうまくいかないことは、エラーログにメッセージを生成します。
368       必ずそれを最初に見るべきです。
369       もし、あなたがウェブサイトを主催している場所が
370       エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。
371       エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、
372       迅速に解決されるということが分かるでしょう。</p>
373     
374
375     <h3><a name="suexec" id="suexec">Suexec</a></h3>
376       
377
378       <p><a href="../suexec.html">suexec</a> サポートプログラムは
379       バーチャルホストやユーザのホームディレクトリの場所に依って
380       CGI プログラムを違うユーザ権限の下で走らせることを可能にします。
381       Suexec の権限のチェックは非常に厳しく、それを満たさない場合は
382       CGI プログラムが <code>Premature end of script headers</code> エラーで
383       実行されません。</p>
384
385       <p>suexec を使っているかどうかを調べためには <code>apachectl
386       -V</code> を実行して、<code>SUEXEC_BIN</code> の場所を調べてください。
387       Apache がそこに suexec のバイナリを発見した場合は、suexec が
388       使用されます。</p>
389
390       <p>suexec を完全に理解していない限り、使うべきではありません。
391       suexec を無効にするには、<code>SUEXEC_BIN</code> から指されている
392       <code>suexec</code> バイナリを削除 (か名前を変更) するだけです。
393       <a href="../suexec.html">suexec</a> を読んだ後で、まだそれを
394       使いたいのであれば、<code>suexec -V</code> を実行して suexec の
395       ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を
396       見つけてください。</p>
397     
398   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
399 <div class="section">
400 <h2><a name="behindscenes" id="behindscenes">裏で何が起こっているのか?</a></h2>
401     
402
403     <p>CGI プログラミングに習熟すると、
404     裏で起こっていることについて更に理解すること役に立ちます。
405     ブラウザとサーバがどのように相互通信するかについては特にそうです。
406     なぜなら、"Hello, World."
407     を印字するプログラムを書くことはおおいに結構ですが、
408     それは特に有益ではありません。</p>
409
410     <h3><a name="env" id="env">環境変数</a></h3>
411       
412
413       <p>環境変数は、
414       あなたがコンピュータを使うときに辺りに存在している値です。
415       それらは、パス
416       (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、
417       ユーザ名、端末型などのような便利なものです。
418       通常、普段使用している環境変数の完全なリストを調べるには、
419       コマンドプロンプトで <code>env</code> を入力します。</p>
420
421       <p>CGI の処理中、サーバとブラウザも環境変数を設定し、
422       それにより相互に通信することができるようになります。
423       その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ
424       (Apache, IIS, WebSite)、実行されている CGI
425       プログラムの名前などです。</p>
426
427       <p>これらの変数は CGI プログラマが使用できます。
428       そして、それはクライアントとサーバの通信の話の半分です。
429       必要な変数の完全なリストは <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> にあります。</p>
430
431       <p>以下の単純な Perl CGI
432       プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、
433       Apache ディストリビューションの <code>cgi-bin</code>
434       ディレクトリに二つ含まれています。
435       いくつかの変数が必須であり、いくつかは任意であることに注意してください。
436       そして、公式のリストにはないいくつかの変数が表示されているかもしれません。
437       さらに、Apache はデフォルトで用意されている基本的なものに
438       <a href="../env.html">あなた自身の環境変数を加える</a>ための、
439       多くの異なる方法を用意してします。</p>
440
441       <div class="example"><p><code>
442         #!/usr/bin/perl<br />
443         print "Content-type: text/html\n\n";<br />
444         foreach $key (keys %ENV) {<br />
445         <span class="indent">
446           print "$key --&gt; $ENV{$key}&lt;br&gt;";<br />
447         </span>
448         }
449       </code></p></div>
450     
451
452     <h3><a name="stdin" id="stdin">STDIN と STDOUT</a></h3>
453       
454
455       <p>サーバとクライアント間のもう一つの通信は、標準入力
456       (<code>STDIN</code>)と標準出力 (<code>STDOUT</code>)
457       を通じて行なわれます。通常の文脈において、<code>STDIN</code>
458       はキーボードやプログラムが動作するために与えられるファイルを意味し、
459       <code>STDOUT</code> は通常コンソールまたはスクリーンを意味します。</p>
460
461       <p>ウェブフォームから CGI プログラムへ<code>POST</code>
462       したとき、フォームのデータは特別なフォーマットで束ねられ、
463       <code>STDIN</code> を通して、CGI プログラムに引き渡されます。
464       プログラムはデータがキーボード
465       もしくはファイルから来ていたかのように処理することができます。</p>
466
467       <p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール
468       (=) で結ばれます。そして値の組はアンパサンド (&amp;) で結ばれます。
469       スペース、アンパサンド、イコールのような面倒な文字は、
470       それらが動作を駄目にしないようにその文字に相当する 16 進に変換されます。
471       全データ文字列は、以下のようになります:
472       </p>
473
474       <div class="example"><p><code>
475         name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
476       </code></p></div>
477
478       <p>時々、このような文字列が URL
479       に付加されるのを見るでしょう。その場合、サーバは
480       <code>QUERY_STRING</code> という環境変数にその文字列を入れます。それは
481       <code>GET</code> リクエストと呼ばれます。
482       HTML フォームでは、データを渡すために <code>GET</code> と
483       <code>POST</code> のどちらを使用するかを、<code>FORM</code> タグの
484       <code>METHOD</code> 属性の設定で指定します。</p>
485
486       <p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。
487       幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。
488       これらは、CGI プログラムの他の面でも同様に役に立ちます。</p>
489     
490   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
491 <div class="section">
492 <h2><a name="libraries" id="libraries">CGI モジュール/ライブラリ</a></h2>
493     
494
495     <p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる
496     コードライブラリまたはモジュールを使うことを検討すべきです。
497     これはエラーを減らし、早い開発につながります。</p>
498
499     <p>Perl で CGI プログラムを書いているなら、モジュールは <a href="http://www.cpan.org/">CPAN</a> で提供されています。
500     この目的のための最も普及しているモジュールは <code>CGI.pm</code> です。
501     <code>CGI::Lite</code> も検討しましょう。これは、ほとんどのプログラム
502     において必要とするすべての機能の最小セットの実装です。</p>
503
504     <p>C で CGI プログラムを書いているなら、いろいろな
505     オプションがあります。これらの内の一つは <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
506     で提供されている <code>CGIC</code> ライブラリです。</p>
507   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
508 <div class="section">
509 <h2><a name="moreinfo" id="moreinfo">更なる情報</a></h2>
510     
511
512     <p>CGI に関する情報はウェブで数多く提供されています。CGI
513     の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> で、
514     他のユーザと論議することができます。HTML Writers Guide の
515     -servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。
516     <a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>
517     で更に多くを探し出すことができます。</p>
518
519     <p>そしてもちろん、おそらく CGI
520     プログラムの動作に関する詳細の全てが記述されている
521     CGI の仕様を読むべきです。オリジナルバージョンを
522     <a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
523     で、アップデートされたドラフトを
524     <a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
525     プロジェクト</a>で参照することができます。</p>
526
527     <p>CGI の問題について、加わっているメーリングリストまたはニュース
528     グループに質問を送るとき、起こったもの、起こってほしいこと、
529     実際に起こったことがどう違うか、使用しているサーバ、
530     CGI プログラムを記述している言語に関する十分な情報と、
531     可能であれば問題のコードを提供するようにしてください。
532     そうすることで、問題がより間単に見つかるようになります。</p>
533
534     <p>Apache のソースコードにおいて問題を発見したことを確信していない限り、
535     CGI の問題に関する質問を Apache
536     バグデータベースに<strong>送るべきでない</strong>
537     ことに注目してください。</p>
538   </div></div>
539 <div class="bottomlang">
540 <p><span>Available Languages: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
541 <a href="../ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
542 <a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
543 </div><div id="footer">
544 <p class="apache">Copyright 2009 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>
545 <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div>
546 </body></html>