cgi.html.ja.utf8 revision 4aa603e6448b99f9371397d439795c91a93637ea
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<?xml version="1.0" encoding="UTF-8"?>
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 -->
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</script>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<link href="/images/favicon.ico" rel="shortcut icon" /></head>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<body id="manual-page"><div id="page-header">
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<p class="apache">Apache HTTP サーバ バージョン 2.5</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<img alt="" src="/images/feather.gif" /></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div id="path">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<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.5</a> &gt; <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache Tutorial: CGI による動的コンテンツ</h1>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="toplang">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<p><span>翻訳済み言語: </span><a href="/en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<a href="/ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose</div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="outofdate">この日本語訳はすでに古くなっている
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 可能性があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 最近更新された内容を見るには英語版をご覧下さい。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose</div>
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<div class="section">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="intro" id="intro">はじめに</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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
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<div class="section">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="configuring" id="configuring">CGI を許可するように Apache を設定する</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI プログラムを正しく動作させるには、CGI を許可するように
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache の設定を行う必要があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose これを行なうための方法がいくつかあります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="warning">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 注: Apache が共有モジュール機能着きでビルドされている場合、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose モジュールがロードされていることを確認してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose つまり <code>httpd.conf</code> で
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="directive"><a href="/mod/mod_so.html#loadmodule">LoadModule</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose がコメントアウトされていないことを確認してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 正常に設定されていれば次のようになるはずです:
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose LoadModule cgi_module modules/mod_cgi.so
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブは以下のように使用します:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>デフォルト位置に Apache をインストールしたならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose この例はデフォルト状態の <code>httpd.conf</code>
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 従って、上記の例では、<code>/cgi-bin/</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose で始まるリソースへのあらゆるリクエストに対して、ディレクトリ
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>/usr/local/apache2/cgi-bin/</code> から提供し、それらを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムとして扱うよう Apache に示します。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>例えば、URL <code>http://www.example.com/cgi-bin/test.pl</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose が要求された場合、Apache は ファイル
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>/usr/local/apache2/cgi-bin/test.pl</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を実行し、その出力を返すことを試みます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose もちろん、ファイルが存在し、実行可能であり、決められた方法で出力を返します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そうでなければ、Apache はエラーメッセージを返します。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="nonscriptalias" id="nonscriptalias">ScriptAlias ディレクトリ外の CGI</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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 <code>cgi-bin</code> ディレクトリへのアクセスができない場合、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラムを実行することができる他の場所が必要になります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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>cgi-script</code> ハンドラが可能になっている必要があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 次に、<code class="directive"><a href="/mod/core.html#options">Options</a></code> ディレクティブで
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>ExecCGI</code> が指定されていなければなりません。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="options" id="options">CGI の実行を可能にするために Options を明示的に使用する</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>サーバのメインの設定ファイル中で <code class="directive"><a href="/mod/core.html#options">Options</a></code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクティブを明示的に使用することで、特定のディレクトリ配下で
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI の実行を許可するように指定することができます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;Directory /usr/local/apache2/htdocs/somedir&gt;<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <span class="indent">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options +ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </span>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;/Directory&gt;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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 ディレクティブの例では、<code>cgi</code> または <code>pl</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を拡張子に持つすべてのファイルを CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムとしてみなすことをサーバに伝えます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose AddHandler cgi-script .cgi .pl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="htaccess" id="htaccess">.htaccess ファイル</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><a href="htaccess.html"><code>.htaccess</code> チュートリアル</a>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose は <code>httpd.conf</code> を変更できない場合にどうやって CGI プログラムを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 使えるようにするかを説明しています。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="userdir" id="userdir">User ディレクトリ</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p><code>.cgi</code> で終わるすべてのファイルに対して CGI プログラムの
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 実行を許可するには、以下の設定を使用できます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;Directory /home/*/public_html&gt;<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <span class="indent">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options +ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose AddHandler cgi-script .cgi<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </span>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;/Directory&gt;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>ユーザディレクトリの <code>cgi-bin</code> サブディレクトリの
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose すべてのファイルを CGI プログラムとして指定したい場合には
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 以下のようなものを使います。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;Directory /home/*/public_html/cgi-bin&gt;<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <span class="indent">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Options ExecCGI<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose SetHandler cgi-script<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </span>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose &lt;/Directory&gt;
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="section">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="writing" id="writing">CGI プログラムを書く</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>「通常の」プログラミングと CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラミングの間には主に二つの違いがあります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Content-type: text/html
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>もう一つは、出力を HTML
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose か、ブラウザが表示することができる何か他の形式にする必要があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 大抵の場合は HTML でしょうが、GIF イメージや他の非 HTML
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose コンテンツを出力する CGI プログラムを書くこともあるでしょう。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>これら二点以外では、CGI プログラムを書くことは、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose あなたが書いている他のプログラムとよく似ているでしょう。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="firstcgi" id="firstcgi">最初の CGI プログラム</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>次に示すのは、ブラウザに 1 行印字する CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムの例です。以下を入力し、<code>first.pl</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose というファイルに保存し、それを <code>cgi-bin</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクトリに置いてください。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <pre class="prettyprint lang-perl">#!/usr/bin/perl<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Boseprint "Content-type: text/html\n\n";<br />
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Boseprint "Hello, World.";</pre>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>Perl に精通していなくても、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 何が起こるかを理解することはできるでしょう。1 行目は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>/usr/bin/perl</code> で見つけられるインタプリタに
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
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>好みのブラウザを開き、アドレス</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose http://www.example.com/cgi-bin/first.pl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>あるいはファイルを置いたロケーションを指定すると、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code>Hello, World.</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose という 1 行がブラウザウィンドに現れるでしょう。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それはあまりエキサイティングなことではありません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose しかし、これがうまく動けば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 他のどのようなものでも動かすことができるようになります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="section">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="troubleshoot" id="troubleshoot">しかし、まだ動かない !</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>ウェブから CGI プログラムへのアクセスを行なったとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ブラウザで見る可能性がある四つの基本的なことがあります:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dl>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dt>CGI プログラムの出力</dt>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd>素晴らしい ! それはすべてがうまく動いたことを意味します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 出力が正常だけれども、ブラウザが正常に処理してくれない場合は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 正しい <code>Content-Type</code> を CGI プログラム内で
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose セットしたかを確認してください。</dd>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dt>メッセージが "Forbidden" で始まっている</dt>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd>これはパーミッションの問題ということを意味します。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <a href="#errorlogs">Apache のエラーログ</a>と、後述の<a href="#permissions">「ファイルのパーミッション」</a>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose の章をチェックしてください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </dd>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dt>"Internal Server Error" というメッセージ</dt>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <dd><a href="#errorlogs">Apache
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose のエラーログ</a>をチェックすると、"Premature end of script headers"
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose というログが記録されていると思います。そして、おそらく CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムによって生成されたエラーメッセージも記録されているでしょう。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose この場合、CGI プログラムが適切な
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose HTTP ヘッダを出力できない原因を知るために、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 以下の各章でチェックしてみてください。</dd>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </dl>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="permissions" id="permissions">ファイルのパーミッション</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>サーバはあなたの権限で実行されていないのを忘れないように。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose つまり、起動するとき、サーバは特権をもたないユーザ - 通常 <code>nobody</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose や <code>www</code> の権限で実行されます。したがって、あなたが所有する
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ファイルを実行するには別のパーミッションが必要となります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 通常、<code>nobody</code> が実行するのに十分なパーミッションを与える方法は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ファイルに誰でも実行可能とするパーミッションを与えることです:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose chmod a+x first.pl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>また、もしあなたのプログラムが他のファイルを読み書きするならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それらのファイルは、これが可能となる正しいパーミッション
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を持っている必要があります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="pathinformation" id="pathinformation">パス情報と環境</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>コマンドラインからプログラムを実行するとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 意識しなくてもシェルに渡される情報があります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 例えば、参照するファイルのためにどこを検索したらよいかを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose シェルに伝える <code>PATH</code> があります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>プログラムが CGI プログラムとしてウェブサーバによって実行されるとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それは同じ <code>PATH</code> ではないかもしれません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose CGI プログラム内で呼び出すあらゆるプログラム
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (例えば、<code>sendmail</code> のようなもの) は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose フルパスで指定する必要があるでしょう。それにより、CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムを実行しようとしたとき、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose シェルはそのようなプログラムを見つけることができます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>同様なことは、スクリプトのインタプリタ (しばしば <code>perl</code>)
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose へのパスで、CGI プログラムの 1 行目に次のように示されます:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose #!/usr/bin/perl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </code></p></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>これがインタープリタへの実際のパスであることを確認しておきます。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>また、CGI プログラムが他の<a href="#env">環境変数</a>に依存している場合は、その環境変数が
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache から渡されるようにする必要があります。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="syntaxerrors" id="syntaxerrors">プログラムエラー</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムが失敗するのは大抵、プログラム自身に問題がある場合です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 一度 CGI の使い方を理解し、前述の二つの誤りを犯していないならば、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose まず間違いなくそうでしょう。ブラウザを使ってテストする前に
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose まず確認することは、コマンドラインからプログラムが実行できることです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 例えば、以下を実行してみてください:</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <div class="example"><p><code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose cd /usr/local/apache2/cgi-bin<br />
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose /first.pl
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose </code></p></div>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p>(<code>perl</code> インタプリタは呼ばないでください。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose シェルと Apache がスクリプトの最初の行の <a href="#pathinformation">パス情報</a> を使って見つけます。)</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
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
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <h3><a name="errorlogs" id="errorlogs">エラーログ</a></h3>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p>エラーログは友達です。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 全てのうまくいかないことは、エラーログにメッセージを生成します。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 必ずそれを最初に見るべきです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose もし、あなたがウェブサイトを主催している場所が
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose エラーログの参照を許していないならば、きっと他のサイトで主催するべきです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose エラーログの読み方を学ぶことで、ほとんど全ての問題が迅速に確認され、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 迅速に解決されるということが分かるでしょう。</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <h3><a name="suexec" id="suexec">Suexec</a></h3>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p><a href="/suexec.html">suexec</a> サポートプログラムは
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose バーチャルホストやユーザのホームディレクトリの場所に依って
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose CGI プログラムを違うユーザ権限の下で走らせることを可能にします。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose Suexec の権限のチェックは非常に厳しく、それを満たさない場合は
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose CGI プログラムが <code>Premature end of script headers</code> エラーで
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 実行されません。</p>
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose <p>suexec を使っているかどうかを調べためには <code>apachectl
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>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>suexec を完全に理解していない限り、使うべきではありません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose suexec を無効にするには、<code>SUEXEC_BIN</code> から指されている
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <code class="program"><a href="/programs/suexec.html">suexec</a></code> バイナリを削除 (か名前を変更) するだけです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <a href="/suexec.html">suexec</a> を読んだ後で、まだそれを
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 使いたいのであれば、<code>suexec -V</code> を実行して suexec の
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ログファイルの位置を調べ、そのログファイルを使ってポリシー違反を
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 見つけてください。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<div class="section">
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose<h2><a name="behindscenes" id="behindscenes">裏で何が起こっているのか?</a></h2>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI プログラミングに習熟すると、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 裏で起こっていることについて更に理解することの役に立ちます。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ブラウザとサーバがどのように相互通信するかについては特にそうです。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose なぜなら、"Hello, World."
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose を印字するプログラムを書くことはおおいに結構ですが、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それは特に有益ではありません。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <h3><a name="env" id="env">環境変数</a></h3>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>環境変数は、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose あなたがコンピュータを使うときに辺りに存在している値です。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それらは、パス
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (コマンドをタイプしたときに実行する実際のファイルを探し出すところ)、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose ユーザ名、端末型などのような便利なものです。
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose 通常、普段使用している環境変数の完全なリストを調べるには、
3cbbfb4b05d0eb0a0809704e83589d0075e117a0Sumit Bose コマンドプロンプトで <code>env</code> を入力します。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>CGI の処理中、サーバとブラウザも環境変数を設定し、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose それにより相互に通信することができるようになります。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose その環境変数は、ブラウザタイプ (Netscape, IE, Lynx)、サーバタイプ
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose (Apache, IIS, WebSite)、実行されている CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムの名前などです。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
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
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <p>以下の単純な Perl CGI
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose プログラムは、渡される全ての環境変数を表示します。同様のプログラムは、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose Apache ディストリビューションの <code>cgi-bin</code>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose ディレクトリに二つ含まれています。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose いくつかの変数が必須であり、いくつかは任意であることに注意してください。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose そして、公式のリストにはないいくつかの変数が表示されているかもしれません。
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose さらに、Apache はデフォルトで用意されている基本的なものに
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <a href="/env.html">あなた自身の環境変数を加える</a>ための、
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose 多くの異なる方法を用意してします。</p>
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Bose <pre class="prettyprint lang-perl">#!/usr/bin/perl
d064fef06dcbcb5f6c1be03e286b1a3433d6dfd7Sumit Boseprint "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --&gt; $ENV{$key}&lt;br&gt;";
}</pre>
<h3><a name="stdin" id="stdin">STDIN と STDOUT</a></h3>
<p>サーバとクライアント間のもう一つの通信は、標準入力
(<code>STDIN</code>)と標準出力 (<code>STDOUT</code>)
を通じて行なわれます。通常の文脈において、<code>STDIN</code>
はキーボードやプログラムが動作するために与えられるファイルを意味し、
<code>STDOUT</code> は通常コンソールまたはスクリーンを意味します。</p>
<p>ウェブフォームから CGI プログラムへ<code>POST</code>
したとき、フォームのデータは特別なフォーマットで束ねられ、
<code>STDIN</code> を通して、CGI プログラムに引き渡されます。
プログラムはデータがキーボード
もしくはファイルから来ていたかのように処理することができます。</p>
<p>「特別なフォーマット」はとても単純です。フィールド名と値はイコール
(=) で結ばれます。そして値の組はアンパサンド (&amp;) で結ばれます。
スペース、アンパサンド、イコールのような面倒な文字は、
それらが動作を駄目にしないようにその文字に相当する 16 進に変換されます。
全データ文字列は、以下のようになります:
</p>
<div class="example"><p><code>
name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey
</code></p></div>
<p>時々、このような文字列が URL
に付加されるのを見るでしょう。その場合、サーバは
<code>QUERY_STRING</code> という環境変数にその文字列を入れます。それは
<code>GET</code> リクエストと呼ばれます。
HTML フォームでは、データを渡すために <code>GET</code> と
<code>POST</code> のどちらを使用するかを、<code>FORM</code> タグの
<code>METHOD</code> 属性の設定で指定します。</p>
<p>CGI プログラムは、その文字列を役に立つ情報に分割する責任があります。
幸いにも、そのデータ処理を助けるライブラリやモジュールが存在します。
これらは、CGI プログラムの他の面でも同様に役に立ちます。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="libraries" id="libraries">CGI モジュール/ライブラリ</a></h2>
<p>CGI プログラムを書くとき、面倒な仕事の大部分をしてくれる
コードライブラリまたはモジュールを使うことを検討すべきです。
これはエラーを減らし、早い開発につながります。</p>
<p>Perl で CGI プログラムを書いているなら、モジュールは <a href="http://www.cpan.org/">CPAN</a> で提供されています。
この目的のための最も普及しているモジュールは <code>CGI.pm</code> です。
<code>CGI::Lite</code> も検討しましょう。これは、ほとんどのプログラム
において必要とするすべての機能の最小セットの実装です。</p>
<p>C で CGI プログラムを書いているなら、いろいろな
オプションがあります。これらの内の一つは <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>
で提供されている <code>CGIC</code> ライブラリです。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
<div class="section">
<h2><a name="moreinfo" id="moreinfo">更なる情報</a></h2>
<p>CGI に関する情報はウェブで数多く提供されています。CGI
の問題については Usenet の <a href="news:comp.infosystems.www.authoring.cgi">comp.infosystems.www.authoring.cgi</a> で、
他のユーザと論議することができます。HTML Writers Guide の
-servers メーリングリストは、あなたの質問に回答してくれる偉大なリソースです。
<a href="http://www.hwg.org/lists/hwg-servers/">http://www.hwg.org/lists/hwg-servers/</a>
で更に多くを探し出すことができます。</p>
<p>そしてもちろん、おそらく CGI
プログラムの動作に関する詳細の全てが記述されている
CGI の仕様を読むべきです。オリジナルバージョンを
<a href="http://hoohoo.ncsa.uiuc.edu/cgi/interface.html">NCSA</a>
で、アップデートされたドラフトを
<a href="http://web.golux.com/coar/cgi/">Common Gateway Interface RFC
プロジェクト</a>で参照することができます。</p>
<p>CGI の問題について、加わっているメーリングリストまたはニュース
グループに質問を送るとき、起こったもの、起こってほしいこと、
実際に起こったことがどう違うか、使用しているサーバ、
CGI プログラムを記述している言語に関する十分な情報と、
可能であれば問題のコードを提供するようにしてください。
そうすることで、問題がより間単に見つかるようになります。</p>
<p>Apache のソースコードにおいて問題を発見したことを確信していない限り、
CGI の問題に関する質問を Apache
バグデータベースに<strong>送るべきでない</strong>
ことに注目してください。</p>
</div></div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="/en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="/fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="/ja/howto/cgi.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="/ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;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>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/howto/cgi.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 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[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>