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