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
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.3</p>
16 <img alt=
"" src=
"../images/feather.gif" /></div>
17 <div class=
"up"><a href=
"./"><img title=
"<-" alt=
"<-" src=
"../images/left.gif" /></a></div>
19 <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=
"../">バージョン
20 2.3</a> > <a href=
"./">How-To / チュートリアル
</a></div><div id=
"page-content"><div id=
"preamble"><h1>Apache Tutorial: CGI による動的コンテンツ
</h1>
22 <p><span>言語:
</span><a href=
"../en/howto/cgi.html" hreflang=
"en" rel=
"alternate" title=
"English"> en
</a> |
23 <a href=
"../fr/howto/cgi.html" hreflang=
"fr" rel=
"alternate" title=
"Français"> fr
</a> |
24 <a href=
"../ja/howto/cgi.html" title=
"Japanese"> ja
</a> |
25 <a href=
"../ko/howto/cgi.html" hreflang=
"ko" rel=
"alternate" title=
"Korean"> ko
</a></p>
27 <div class=
"outofdate">この日本語訳はすでに古くなっている可能性があります。
28 更新された内容を見るには英語版をご覧下さい。
</div>
30 <div id=
"quickview"><ul id=
"toc"><li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#intro">はじめに
</a></li>
31 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#configuring">CGI を許可するように Apache を設定する
</a></li>
32 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#writing">CGI プログラムを書く
</a></li>
33 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#troubleshoot">しかし、まだ動かない !
</a></li>
34 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#behindscenes">裏で何が起こっているのか?
</a></li>
35 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#libraries">CGI モジュール/ライブラリ
</a></li>
36 <li><img alt=
"" src=
"../images/down.gif" /> <a href=
"#moreinfo">更なる情報
</a></li>
38 <div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
40 <h2><a name=
"intro" id=
"intro">はじめに
</a></h2>
43 <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>
45 <p>CGI (Common Gateway Interface) は、ウェブサーバが
46 コンテンツ生成をする外部プログラムと協調して動作するための方法を
47 定義しています。そのプログラムはしばしば CGI プログラムや
48 CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な
49 コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、
50 Apache ウェブサーバで CGI を設定し、
51 CGI プログラムを書き始めるための入門書となるでしょう。
</p>
52 </div><div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
54 <h2><a name=
"configuring" id=
"configuring">CGI を許可するように Apache を設定する
</a></h2>
57 <p>CGI プログラムを正しく動作させるには、CGI を許可するように
59 これを行なうための方法がいくつかあります。
</p>
62 注: Apache が共有モジュール機能着きでビルドされている場合、
63 モジュールがロードされていることを確認してください。
64 つまり
<code>httpd.conf
</code> で
65 <code class=
"directive"><a href=
"../mod/mod_so.html#loadmodule">LoadModule
</a></code>
66 がコメントアウトされていないことを確認してください。
67 正常に設定されていれば次のようになるはずです:
69 <div class=
"example"><p><code>
70 LoadModule cgi_module modules/mod_cgi.so
71 </code></p></div></div>
73 <h3><a name=
"scriptalias" id=
"scriptalias">ScriptAlias
</a></h3>
76 <p><code class=
"directive"><a href=
"../mod/mod_alias.html#scriptalias">ScriptAlias
</a></code>
78 CGI プログラム用の特別な別ディレクトリを Apache に設定します。
79 Apache は、このディレクトリ中の全てのファイルを CGI
81 そして、この特別なリソースがクライアントから要求されると、
84 <p><code class=
"directive"><a href=
"../mod/mod_alias.html#scriptalias">ScriptAlias
</a></code>
85 ディレクティブは以下のように使用します:
</p>
87 <div class=
"example"><p><code>
88 ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
91 <p>デフォルト位置に Apache をインストールしたならば、
92 この例はデフォルト状態の
<code>httpd.conf
</code>
94 <code class=
"directive"><a href=
"../mod/mod_alias.html#scriptalias">ScriptAlias
</a></code>
95 ディレクティブは、URL の前に付加するディレクトリを定義する
96 <code class=
"directive"><a href=
"../mod/mod_alias.html#alias">Alias
</a></code>
98 <code class=
"directive">Alias
</code> と
<code class=
"directive">ScriptAlias
</code>
99 は通常、
<code class=
"directive"><a href=
"../mod/core.html#documentroot">DocumentRoot
</a></code>
100 ディレクトリ外のディレクトリのために使用されます。
101 <code class=
"directive">Alias
</code> と
<code class=
"directive">ScriptAlias
</code>
102 との差は、
<code class=
"directive">ScriptAlias
</code> が接頭辞で始まるすべての
103 URL は CGI プログラムとみなされるという追加の意味を含んでいることです。
104 従って、上記の例では、
<code>/cgi-bin/
</code>
105 で始まるリソースへのあらゆるリクエストに対して、ディレクトリ
106 <code>/usr/local/apache2/cgi-bin/
</code> から提供し、それらを
107 CGI プログラムとして扱うよう Apache に示します。
</p>
109 <p>例えば、URL
<code>http://www.example.com/cgi-bin/test.pl
</code>
110 が要求された場合、Apache は ファイル
111 <code>/usr/local/apache2/cgi-bin/test.pl
</code>
113 もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。
114 そうでなければ、Apache はエラーメッセージを返します。
</p>
117 <h3><a name=
"nonscriptalias" id=
"nonscriptalias">ScriptAlias ディレクトリ外の CGI
</a></h3>
120 <p>CGI プログラムは、セキュリティ上の理由から
121 <code class=
"directive"><a href=
"../mod/mod_alias.html#scriptalias">ScriptAlias
</a></code>
122 されたディレクトリに制限されることがしばしばあります。この方法により、
123 CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。
124 しかしながら、適切なセキュリティ事前対策がとられるならば、CGI
125 プログラムを任意のディレクトリで実行できないようにする理由はありません。
126 例えば、ユーザに
<code class=
"directive"><a href=
"../mod/mod_userdir.html#userdir">UserDir
</a></code>
127 ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。
128 もし、彼らが CGI プログラムを持つことを望んでいても、メインの
129 <code>cgi-bin
</code> ディレクトリへのアクセスができない場合、
130 CGI プログラムを実行することができる他の場所が必要になります。
</p>
132 <p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。
133 まず、
<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> ディレクティブによって
134 <code>cgi-script
</code> ハンドラが可能になっている必要があります。
135 次に、
<code class=
"directive"><a href=
"../mod/core.html#options">Options
</a></code> ディレクティブで
136 <code>ExecCGI
</code> が指定されていなければなりません。
</p>
139 <h3><a name=
"options" id=
"options">CGI の実行を可能にするために Options を明示的に使用する
</a></h3>
142 <p>サーバのメインの設定ファイル中で
<code class=
"directive"><a href=
"../mod/core.html#options">Options
</a></code>
143 ディレクティブを明示的に使用することで、特定のディレクトリ配下で
144 CGI の実行を許可するように指定することができます:
</p>
146 <div class=
"example"><p><code>
147 <Directory /usr/local/apache2/htdocs/somedir
><br />
148 <span class=
"indent">
149 Options +ExecCGI
<br />
154 <p>上記ディレクティブは、CGI ファイルの実行を可能にするよう
155 Apache に伝えます。また、どのファイルが CGI ファイルかを
157 <code class=
"directive"><a href=
"../mod/mod_mime.html#addhandler">AddHandler
</a></code>
158 ディレクティブの例では、
<code>cgi
</code> または
<code>pl
</code>
160 プログラムとしてみなすことをサーバに伝えます:
</p>
162 <div class=
"example"><p><code>
163 AddHandler cgi-script .cgi .pl
167 <h3><a name=
"htaccess" id=
"htaccess">.htaccess ファイル
</a></h3>
170 <p><a href=
"htaccess.html"><code>.htaccess
</code> チュートリアル
</a>
171 は
<code>httpd.conf
</code> を変更できない場合にどうやって CGI プログラムを
172 使えるようにするかを説明しています。
</p>
175 <h3><a name=
"userdir" id=
"userdir">User ディレクトリ
</a></h3>
178 <p><code>.cgi
</code> で終わるすべてのファイルに対して CGI プログラムの
179 実行を許可するには、以下の設定を使用できます。
</p>
181 <div class=
"example"><p><code>
182 <Directory /home/*/public_html
><br />
183 <span class=
"indent">
184 Options +ExecCGI
<br />
185 AddHandler cgi-script .cgi
<br />
190 <p>ユーザディレクトリの
<code>cgi-bin
</code> サブディレクトリの
191 すべてのファイルを CGI プログラムとして指定したい場合には
194 <div class=
"example"><p><code>
195 <Directory /home/*/public_html/cgi-bin
><br />
196 <span class=
"indent">
197 Options ExecCGI
<br />
198 SetHandler cgi-script
<br />
204 </div><div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
205 <div class=
"section">
206 <h2><a name=
"writing" id=
"writing">CGI プログラムを書く
</a></h2>
210 プログラミングの間には主に二つの違いがあります。
</p>
212 <p>一つは、CGI プログラムのすべての出力には
<a class=
"glossarylink" href=
"../glossary.html#mime-type" title=
"用語集を参照">MIME タイプ
</a>
214 これはどのような種類のコンテンツを受け取っているかをクライアントに示す
215 HTTP ヘッダです。ほとんどの場合では、次のように出力します:
</p>
217 <div class=
"example"><p><code>
218 Content-type: text/html
222 か、ブラウザが表示することができる何か他の形式にする必要があります。
223 大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML
224 コンテンツを出力する CGI プログラムを書くこともあるでしょう。
</p>
226 <p>これら二点以外では、CGI プログラムを書くことは、
227 あなたが書いている他のプログラムとよく似ているでしょう。
</p>
229 <h3><a name=
"firstcgi" id=
"firstcgi">最初の CGI プログラム
</a></h3>
232 <p>次に示すのは、ブラウザに
1 行印字する CGI
233 プログラムの例です。以下を入力し、
<code>first.pl
</code>
234 というファイルに保存し、それを
<code>cgi-bin
</code>
237 <div class=
"example"><p><code>
238 #!/usr/bin/perl
<br />
239 print
"Content-type: text/html\n\n";
<br />
240 print
"Hello, World.";
244 何が起こるかを理解することはできるでしょう。
1 行目は、
245 <code>/usr/bin/perl
</code> で見つけられるインタプリタに
246 このファイルを供給することでこのプログラムが実行されることを
247 Apache に (シェル上で実行しようとしているならば、そのシェルに )
248 示します。
2 行目は、前述したとおり content-type の定義を印字します。
249 これには復帰改行の二つの組を後に付加します。
250 これにより、ヘッダの終りに空行が置かれ、HTTP
251 ヘッダの終りとボディの始まりを示します。
3 行目は、
"Hello, World."
252 という文字列を印字し、これで終りとなります。
</p>
254 <p>好みのブラウザを開き、アドレス
</p>
256 <div class=
"example"><p><code>
257 http://www.example.com/cgi-bin/first.pl
260 <p>あるいはファイルを置いたロケーションを指定すると、
261 <code>Hello, World.
</code>
262 という
1 行がブラウザウィンドに現れるでしょう。
263 それはあまりエキサイティングなことではありません。
265 他のどのようなものでも動かすことができるようになります。
</p>
267 </div><div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
268 <div class=
"section">
269 <h2><a name=
"troubleshoot" id=
"troubleshoot">しかし、まだ動かない !
</a></h2>
272 <p>ウェブから CGI プログラムへのアクセスを行なったとき、
273 ブラウザで見る可能性がある四つの基本的なことがあります:
</p>
276 <dt>CGI プログラムの出力
</dt>
277 <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。
278 出力が正常だけれども、ブラウザが正常に処理してくれない場合は、
279 正しい
<code>Content-Type
</code> を CGI プログラム内で
280 セットしたかを確認してください。
</dd>
282 <dt>CGI プログラムのソースコード、または
"POST Method Not Allowed"
284 <dd>これは、CGI プログラムを処理できるよう Apache
285 を適切に設定していなかったことを意味します。
<a href=
"#configuring">「CGI を許可するように
286 Apache を設定する」
</a>の章を読み直し、
287 あなたが何を間違えたかを探してみてください。
290 <dt>メッセージが
"Forbidden" で始まっている
</dt>
291 <dd>これはパーミッションの問題ということを意味します。
292 <a href=
"#errorlogs">Apache のエラーログ
</a>と、後述の
<a href=
"#permissions">「ファイルのパーミッション」
</a>
296 <dt>"Internal Server Error" というメッセージ
</dt>
297 <dd><a href=
"#errorlogs">Apache
298 のエラーログ
</a>をチェックすると、
"Premature end of script headers"
299 というログが記録されていると思います。そして、おそらく CGI
300 プログラムによって生成されたエラーメッセージも記録されているでしょう。
302 HTTP ヘッダを出力できない原因を知るために、
303 以下の各章でチェックしてみてください。
</dd>
306 <h3><a name=
"permissions" id=
"permissions">ファイルのパーミッション
</a></h3>
309 <p>サーバはあなたの権限で実行されていないのを忘れないように。
310 つまり、起動するとき、サーバは特権をもたないユーザ - 通常
<code>nobody
</code>
311 や
<code>www
</code> の権限で実行されます。したがって、あなたが所有する
312 ファイルを実行するには別のパーミッションが必要となります。
313 通常、
<code>nobody
</code> が実行するのに十分なパーミッションを与える方法は、
314 ファイルに誰でも実行可能とするパーミッションを与えることです:
</p>
316 <div class=
"example"><p><code>
320 <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、
321 それらのファイルは、これが可能となる正しいパーミッション
326 <h3><a name=
"pathinformation" id=
"pathinformation">パス情報と環境
</a></h3>
329 <p>コマンドラインからプログラムを実行するとき、
330 意識しなくてもシェルに渡される情報があります。
331 例えば、参照するファイルのためにどこを検索したらよいかを
332 シェルに伝える
<code>PATH
</code> があります。
</p>
334 <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、
335 それは同じ
<code>PATH
</code> ではないかもしれません。
336 CGI プログラム内で呼び出すあらゆるプログラム
337 (例えば、
<code>sendmail
</code> のようなもの) は、
338 フルパスで指定する必要があるでしょう。それにより、CGI
340 シェルはそのようなプログラムを見つけることができます。
</p>
342 <p>同様なことは、スクリプトのインタプリタ (しばしば
<code>perl
</code>)
343 へのパスで、CGI プログラムの
1 行目に次のように示されます:
</p>
345 <div class=
"example"><p><code>
349 <p>これがインタープリタへの実際のパスであることを確認しておきます。
</p>
352 <p>また、CGI プログラムが他の
<a href=
"#env">環境変数
</a>に依存している場合は、その環境変数が
353 Apache から渡されるようにする必要があります。
</p>
355 <h3><a name=
"syntaxerrors" id=
"syntaxerrors">プログラムエラー
</a></h3>
359 プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。
360 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、
361 まず間違いなくそうでしょう。ブラウザを使ってテストする前に
362 まず確認することは、コマンドラインからプログラムが実行できることです。
363 例えば、以下を実行してみてください:
</p>
365 <div class=
"example"><p><code>
366 cd /usr/local/apache2/cgi-bin
<br />
370 <p>(
<code>perl
</code> インタプリタは呼ばないでください。
371 シェルと Apache がスクリプトの最初の行の
<a href=
"#pathinformation">パス情報
</a> を使って見つけます。)
</p>
373 <p>最初にプログラムから出力されるのは
<code>Content-Type
</code> を含み、
374 後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている
375 場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには
376 <code>Premature end of script headers
</code> エラーを出力します。詳細は
377 上記の
<a href=
"#writing">CGI プログラムを書く
</a> を読んでください。
</p>
380 <h3><a name=
"errorlogs" id=
"errorlogs">エラーログ
</a></h3>
384 全てのうまくいかないことは、エラーログにメッセージを生成します。
386 もし、あなたがウェブサイトを主催している場所が
387 エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。
388 エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、
389 迅速に解決されるということが分かるでしょう。
</p>
392 <h3><a name=
"suexec" id=
"suexec">Suexec
</a></h3>
395 <p><a href=
"../suexec.html">suexec
</a> サポートプログラムは
396 バーチャルホストやユーザのホームディレクトリの場所に依って
397 CGI プログラムを違うユーザ権限の下で走らせることを可能にします。
398 Suexec の権限のチェックは非常に厳しく、それを満たさない場合は
399 CGI プログラムが
<code>Premature end of script headers
</code> エラーで
402 <p>suexec を使っているかどうかを調べためには
<code>apachectl
403 -V
</code> を実行して、
<code>SUEXEC_BIN
</code> の場所を調べてください。
404 Apache がそこに
<code class=
"program"><a href=
"../programs/suexec.html">suexec
</a></code> のバイナリを発見した場合は、suexec が
407 <p>suexec を完全に理解していない限り、使うべきではありません。
408 suexec を無効にするには、
<code>SUEXEC_BIN
</code> から指されている
409 <code class=
"program"><a href=
"../programs/suexec.html">suexec
</a></code> バイナリを削除 (か名前を変更) するだけです。
410 <a href=
"../suexec.html">suexec
</a> を読んだ後で、まだそれを
411 使いたいのであれば、
<code>suexec -V
</code> を実行して suexec の
412 ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を
415 </div><div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
416 <div class=
"section">
417 <h2><a name=
"behindscenes" id=
"behindscenes">裏で何が起こっているのか?
</a></h2>
420 <p>CGI プログラミングに習熟すると、
421 裏で起こっていることについて更に理解することの役に立ちます。
422 ブラウザとサーバがどのように相互通信するかについては特にそうです。
424 を印字するプログラムを書くことはおおいに結構ですが、
427 <h3><a name=
"env" id=
"env">環境変数
</a></h3>
431 あなたがコンピュータを使うときに辺りに存在している値です。
433 (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、
434 ユーザ名、端末型などのような便利なものです。
435 通常、普段使用している環境変数の完全なリストを調べるには、
436 コマンドプロンプトで
<code>env
</code> を入力します。
</p>
438 <p>CGI の処理中、サーバとブラウザも環境変数を設定し、
439 それにより相互に通信することができるようになります。
440 その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ
441 (Apache, IIS, WebSite)、実行されている CGI
444 <p>これらの変数は CGI プログラマが使用できます。
445 そして、それはクライアントとサーバの通信の話の半分です。
446 必要な変数の完全なリストは
<a href=
"http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html
</a> にあります。
</p>
449 プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、
450 Apache ディストリビューションの
<code>cgi-bin
</code>
452 いくつかの変数が必須であり、いくつかは任意であることに注意してください。
453 そして、公式のリストにはないいくつかの変数が表示されているかもしれません。
454 さらに、Apache はデフォルトで用意されている基本的なものに
455 <a href=
"../env.html">あなた自身の環境変数を加える
</a>ための、
456 多くの異なる方法を用意してします。
</p>
458 <div class=
"example"><p><code>
459 #!/usr/bin/perl
<br />
460 print
"Content-type: text/html\n\n";
<br />
461 foreach $key (keys %ENV) {
<br />
462 <span class=
"indent">
463 print
"$key --> $ENV{$key}<br>";
<br />
469 <h3><a name=
"stdin" id=
"stdin">STDIN と STDOUT
</a></h3>
472 <p>サーバとクライアント間のもう一つの通信は、標準入力
473 (
<code>STDIN
</code>)と標準出力 (
<code>STDOUT
</code>)
474 を通じて行なわれます。通常の文脈において、
<code>STDIN
</code>
475 はキーボードやプログラムが動作するために与えられるファイルを意味し、
476 <code>STDOUT
</code> は通常コンソールまたはスクリーンを意味します。
</p>
478 <p>ウェブフォームから CGI プログラムへ
<code>POST
</code>
479 したとき、フォームのデータは特別なフォーマットで束ねられ、
480 <code>STDIN
</code> を通して、CGI プログラムに引き渡されます。
482 もしくはファイルから来ていたかのように処理することができます。
</p>
484 <p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール
485 (=) で結ばれます。そして値の組はアンパサンド (
&) で結ばれます。
486 スペース、アンパサンド、イコールのような面倒な文字は、
487 それらが動作を駄目にしないようにその文字に相当する
16 進に変換されます。
491 <div class=
"example"><p><code>
492 name=Rich%
20Bowen
&city=Lexington
&state=KY
&sidekick=Squirrel%
20Monkey
496 に付加されるのを見るでしょう。その場合、サーバは
497 <code>QUERY_STRING
</code> という環境変数にその文字列を入れます。それは
498 <code>GET
</code> リクエストと呼ばれます。
499 HTML フォームでは、データを渡すために
<code>GET
</code> と
500 <code>POST
</code> のどちらを使用するかを、
<code>FORM
</code> タグの
501 <code>METHOD
</code> 属性の設定で指定します。
</p>
503 <p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。
504 幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。
505 これらは、CGI プログラムの他の面でも同様に役に立ちます。
</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=
"libraries" id=
"libraries">CGI モジュール/ライブラリ
</a></h2>
512 <p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる
513 コードライブラリまたはモジュールを使うことを検討すべきです。
514 これはエラーを減らし、早い開発につながります。
</p>
516 <p>Perl で CGI プログラムを書いているなら、モジュールは
<a href=
"http://www.cpan.org/">CPAN
</a> で提供されています。
517 この目的のための最も普及しているモジュールは
<code>CGI.pm
</code> です。
518 <code>CGI::Lite
</code> も検討しましょう。これは、ほとんどのプログラム
519 において必要とするすべての機能の最小セットの実装です。
</p>
521 <p>C で CGI プログラムを書いているなら、いろいろな
522 オプションがあります。これらの内の一つは
<a href=
"http://www.boutell.com/cgic/">http://www.boutell.com/cgic/
</a>
523 で提供されている
<code>CGIC
</code> ライブラリです。
</p>
524 </div><div class=
"top"><a href=
"#page-header"><img alt=
"top" src=
"../images/up.gif" /></a></div>
525 <div class=
"section">
526 <h2><a name=
"moreinfo" id=
"moreinfo">更なる情報
</a></h2>
529 <p>CGI に関する情報はウェブで数多く提供されています。CGI
530 の問題については Usenet の
<a href=
"news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi
</a> で、
531 他のユーザと論議することができます。HTML Writers Guide の
532 -servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。
533 <a href=
"http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/
</a>
534 で更に多くを探し出すことができます。
</p>
537 プログラムの動作に関する詳細の全てが記述されている
538 CGI の仕様を読むべきです。オリジナルバージョンを
539 <a href=
"http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA
</a>
541 <a href=
"http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
542 プロジェクト
</a>で参照することができます。
</p>
544 <p>CGI の問題について、加わっているメーリングリストまたはニュース
545 グループに質問を送るとき、起こったもの、起こってほしいこと、
546 実際に起こったことがどう違うか、使用しているサーバ、
547 CGI プログラムを記述している言語に関する十分な情報と、
548 可能であれば問題のコードを提供するようにしてください。
549 そうすることで、問題がより間単に見つかるようになります。
</p>
551 <p>Apache のソースコードにおいて問題を発見したことを確信していない限り、
552 CGI の問題に関する質問を Apache
553 バグデータベースに
<strong>送るべきでない
</strong>
556 <div class=
"bottomlang">
557 <p><span>言語:
</span><a href=
"../en/howto/cgi.html" hreflang=
"en" rel=
"alternate" title=
"English"> en
</a> |
558 <a href=
"../fr/howto/cgi.html" hreflang=
"fr" rel=
"alternate" title=
"Français"> fr
</a> |
559 <a href=
"../ja/howto/cgi.html" title=
"Japanese"> ja
</a> |
560 <a href=
"../ko/howto/cgi.html" hreflang=
"ko" rel=
"alternate" title=
"Korean"> ko
</a></p>
561 </div><div id=
"footer">
562 <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>
563 <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>