cgi.html.ja.utf8 revision 4aa603e6448b99f9371397d439795c91a93637ea
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose This file is generated from xml source: DO NOT EDIT
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<title>Apache Tutorial: CGI による動的コンテンツ - Apache HTTP サーバ</title>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<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" />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<script src="/style/scripts/prettify.min.js" type="text/javascript">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<link href="/images/favicon.ico" rel="shortcut icon" /></head>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<p class="menu"><a href="/mod/">モジュール</a> | <a href="/mod/quickreference.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">用語</a> | <a href="/sitemap.html">サイトマップ</a></p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<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.5</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI による動的コンテンツ</h1>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<p><span>翻訳済み言語: </span><a href="/en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/ja/howto/cgi.html" title="Japanese"> ja </a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 最近更新された内容を見るには英語版をご覧下さい。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#intro">はじめに</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#configuring">CGI を許可するように Apache を設定する</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#writing">CGI プログラムを書く</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#troubleshoot">しかし、まだ動かない !</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#behindscenes">裏で何が起こっているのか?</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#libraries">CGI モジュール/ライブラリ</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<li><img alt="" src="/images/down.gif" /> <a href="#moreinfo">更なる情報</a></li>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose</ul><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <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>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI (Common Gateway Interface) は、ウェブサーバが
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose コンテンツ生成をする外部プログラムと協調して動作するための方法を
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 定義しています。そのプログラムはしばしば CGI プログラムや
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI スクリプトと呼ばれます。CGI は、ウェブサイトに動的な
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose コンテンツを置くための最も簡単で一般的な方法です。このドキュメントは、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache ウェブサーバで CGI を設定し、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムを書き始めるための入門書となるでしょう。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="configuring" id="configuring">CGI を許可するように Apache を設定する</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI プログラムを正しく動作させるには、CGI を許可するように
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache の設定を行う必要があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose これを行なうための方法がいくつかあります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 注: Apache が共有モジュール機能着きでビルドされている場合、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose モジュールがロードされていることを確認してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose がコメントアウトされていないことを確認してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 正常に設定されていれば次のようになるはずです:
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブを使用して、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラム用の特別な別ディレクトリを Apache に設定します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache は、このディレクトリ中の全てのファイルを CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムであると仮定します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そして、この特別なリソースがクライアントから要求されると、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そのプログラムの実行を試みます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブは以下のように使用します:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>デフォルト位置に Apache をインストールしたならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 設定ファイルに含まれています。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブは、URL の前に付加するディレクトリを定義する
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_alias.html#alias">Alias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブとかなり似ています。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose は通常、<code class="directive"><a href="/mod/core.html#documentroot">DocumentRoot</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクトリ外のディレクトリのために使用されます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive">Alias</code> と <code class="directive">ScriptAlias</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose との差は、<code class="directive">ScriptAlias</code> が接頭辞で始まるすべての
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose URL は CGI プログラムとみなされるという追加の意味を含んでいることです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose で始まるリソースへのあらゆるリクエストに対して、ディレクトリ
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムとして扱うよう Apache に示します。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>例えば、URL <code>http://www.example.com/cgi-bin/test.pl</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose が要求された場合、Apache は ファイル
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を実行し、その出力を返すことを試みます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そうでなければ、Apache はエラーメッセージを返します。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ディレクトリ外の CGI</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI プログラムは、セキュリティ上の理由から
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose されたディレクトリに制限されることがしばしばあります。この方法により、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムを使用できるユーザを管理者が厳しく制御することができます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose しかしながら、適切なセキュリティ事前対策がとられるならば、CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムを任意のディレクトリで実行できないようにする理由はありません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 例えば、ユーザに <code class="directive"><a href="/mod/mod_userdir.html#userdir">UserDir</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブで彼らのホームディレクトリ配下にウェブコンテンツを持たせたいとします。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose もし、彼らが CGI プログラムを持つことを望んでいても、メインの
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムを実行することができる他の場所が必要になります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>任意のディレクトリで CGI の実行を許可するには二段階の設定が必要です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose まず、<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> ディレクティブによって
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 次に、<code class="directive"><a href="/mod/core.html#options">Options</a></code> ディレクティブで
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="options" id="options">CGI の実行を可能にするために Options を明示的に使用する</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>サーバのメインの設定ファイル中で <code class="directive"><a href="/mod/core.html#options">Options</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブを明示的に使用することで、特定のディレクトリ配下で
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI の実行を許可するように指定することができます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <Directory /usr/local/apache2/htdocs/somedir><br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options +ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </Directory>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>上記ディレクティブは、CGI ファイルの実行を可能にするよう
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache に伝えます。また、どのファイルが CGI ファイルかを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose サーバに伝える必要があります。次の
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_mime.html#addhandler">AddHandler</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を拡張子に持つすべてのファイルを CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムとしてみなすことをサーバに伝えます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose AddHandler cgi-script .cgi .pl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="htaccess" id="htaccess">.htaccess ファイル</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose は <code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 使えるようにするかを説明しています。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="userdir" id="userdir">User ディレクトリ</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 実行を許可するには、以下の設定を使用できます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <Directory /home/*/public_html><br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options +ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose AddHandler cgi-script .cgi<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </Directory>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose すべてのファイルを CGI プログラムとして指定したい場合には
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 以下のようなものを使います。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <Directory /home/*/public_html/cgi-bin><br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose SetHandler cgi-script<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </Directory>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="writing" id="writing">CGI プログラムを書く</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>「通常の」プログラミングと CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラミングの間には主に二つの違いがあります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>一つは、CGI プログラムのすべての出力には<a class="glossarylink" href="/glossary.html#mime-type" title="用語集を参照">MIME タイプ</a>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ヘッダを付けなければなりません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose これはどのような種類のコンテンツを受け取っているかをクライアントに示す
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose HTTP ヘッダです。ほとんどの場合では、次のように出力します:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>もう一つは、出力を HTML
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose か、ブラウザが表示することができる何か他の形式にする必要があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>これら二点以外では、CGI プログラムを書くことは、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose あなたが書いている他のプログラムとよく似ているでしょう。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="firstcgi" id="firstcgi">最初の CGI プログラム</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>次に示すのは、ブラウザに 1 行印字する CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクトリに置いてください。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <pre class="prettyprint lang-perl">#!/usr/bin/perl<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Boseprint "Hello, World.";</pre>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>Perl に精通していなくても、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 何が起こるかを理解することはできるでしょう。1 行目は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose このファイルを供給することでこのプログラムが実行されることを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache に (シェル上で実行しようとしているならば、そのシェルに )
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 示します。2 行目は、前述したとおり content-type の定義を印字します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose これには復帰改行の二つの組を後に付加します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose これにより、ヘッダの終りに空行が置かれ、HTTP
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ヘッダの終りとボディの始まりを示します。3 行目は、"Hello, World."
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose という文字列を印字し、これで終りとなります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>あるいはファイルを置いたロケーションを指定すると、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose という 1 行がブラウザウィンドに現れるでしょう。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それはあまりエキサイティングなことではありません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose しかし、これがうまく動けば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 他のどのようなものでも動かすことができるようになります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="troubleshoot" id="troubleshoot">しかし、まだ動かない !</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>ウェブから CGI プログラムへのアクセスを行なったとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ブラウザで見る可能性がある四つの基本的なことがあります:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 出力が正常だけれども、ブラウザが正常に処理してくれない場合は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose セットしたかを確認してください。</dd>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dt>CGI プログラムのソースコード、または "POST Method Not Allowed"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose というメッセージ</dt>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd>これは、CGI プログラムを処理できるよう Apache
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を適切に設定していなかったことを意味します。<a href="#configuring">「CGI を許可するように
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache を設定する」</a>の章を読み直し、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose あなたが何を間違えたかを探してみてください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd>これはパーミッションの問題ということを意味します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <a href="#errorlogs">Apache のエラーログ</a>と、後述の<a href="#permissions">「ファイルのパーミッション」</a>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose の章をチェックしてください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose のエラーログ</a>をチェックすると、"Premature end of script headers"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose というログが記録されていると思います。そして、おそらく CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムによって生成されたエラーメッセージも記録されているでしょう。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose この場合、CGI プログラムが適切な
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose HTTP ヘッダを出力できない原因を知るために、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 以下の各章でチェックしてみてください。</dd>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="permissions" id="permissions">ファイルのパーミッション</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>サーバはあなたの権限で実行されていないのを忘れないように。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ファイルを実行するには別のパーミッションが必要となります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ファイルに誰でも実行可能とするパーミッションを与えることです:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それらのファイルは、これが可能となる正しいパーミッション
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を持っている必要があります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="pathinformation" id="pathinformation">パス情報と環境</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>コマンドラインからプログラムを実行するとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 意識しなくてもシェルに渡される情報があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 例えば、参照するファイルのためにどこを検索したらよいかを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラム内で呼び出すあらゆるプログラム
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose フルパスで指定する必要があるでしょう。それにより、CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムを実行しようとしたとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose シェルはそのようなプログラムを見つけることができます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose へのパスで、CGI プログラムの 1 行目に次のように示されます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>また、CGI プログラムが他の<a href="#env">環境変数</a>に依存している場合は、その環境変数が
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache から渡されるようにする必要があります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="syntaxerrors" id="syntaxerrors">プログラムエラー</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose まず間違いなくそうでしょう。ブラウザを使ってテストする前に
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose まず確認することは、コマンドラインからプログラムが実行できることです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 例えば、以下を実行してみてください:</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose シェルと Apache がスクリプトの最初の行の <a href="#pathinformation">パス情報</a> を使って見つけます。)</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p>最初にプログラムから出力されるのは <code>Content-Type</code> を含み、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 後に空行の続く HTTP ヘッダでなければなりません。他のものが出力されている
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 場合は、Apache はこのプログラムをサーバ経由で実行しようとしたときには
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <code>Premature end of script headers</code> エラーを出力します。詳細は
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 上記の <a href="#writing">CGI プログラムを書く</a> を読んでください。</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <h3><a name="errorlogs" id="errorlogs">エラーログ</a></h3>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p>エラーログは友達です。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 全てのうまくいかないことは、エラーログにメッセージを生成します。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 必ずそれを最初に見るべきです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose もし、あなたがウェブサイトを主催している場所が
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 迅速に解決されるということが分かるでしょう。</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose バーチャルホストやユーザのホームディレクトリの場所に依って
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose CGI プログラムを違うユーザ権限の下で走らせることを可能にします。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose Suexec の権限のチェックは非常に厳しく、それを満たさない場合は
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose CGI プログラムが <code>Premature end of script headers</code> エラーで
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 実行されません。</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose -V</code> を実行して、<code>SUEXEC_BIN</code> の場所を調べてください。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose Apache がそこに <code class="program"><a href="/programs/suexec.html">suexec</a></code> のバイナリを発見した場合は、suexec が
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>suexec を完全に理解していない限り、使うべきではありません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="program"><a href="/programs/suexec.html">suexec</a></code> バイナリを削除 (か名前を変更) するだけです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 見つけてください。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="behindscenes" id="behindscenes">裏で何が起こっているのか?</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI プログラミングに習熟すると、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 裏で起こっていることについて更に理解することの役に立ちます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ブラウザとサーバがどのように相互通信するかについては特にそうです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose なぜなら、"Hello, World."
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を印字するプログラムを書くことはおおいに結構ですが、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それは特に有益ではありません。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose あなたがコンピュータを使うときに辺りに存在している値です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose ユーザ名、端末型などのような便利なものです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 通常、普段使用している環境変数の完全なリストを調べるには、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI の処理中、サーバとブラウザも環境変数を設定し、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それにより相互に通信することができるようになります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (Apache, IIS, WebSite)、実行されている CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムの名前などです。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>これらの変数は CGI プログラマが使用できます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そして、それはクライアントとサーバの通信の話の半分です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 必要な変数の完全なリストは <a href="http://hoohoo.ncsa.uiuc.edu/cgi/env.html">http://hoohoo.ncsa.uiuc.edu/cgi/env.html</a> にあります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>以下の単純な Perl CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクトリに二つ含まれています。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose いくつかの変数が必須であり、いくつかは任意であることに注意してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そして、公式のリストにはないいくつかの変数が表示されているかもしれません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose さらに、Apache はデフォルトで用意されている基本的なものに
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 多くの異なる方法を用意してします。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <pre class="prettyprint lang-perl">#!/usr/bin/perl
の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> で、
<p><span>翻訳済み言語: </span><a href="/en/howto/cgi.html" hreflang="en" rel="alternate" title="English"> en </a> |
</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>
var comments_identifier = 'http://httpd.apache.org/docs/trunk/howto/cgi.html';
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);
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
<p class="apache">Copyright 2014 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/quickreference.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[//><!--