<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> いくつかの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>などは、 <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> などで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ローカルファイル</anchor>を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>として実行する機能として <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> を実装していました。このような機能は<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ローカルCGI<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">local CGI</rt></rubyb></dfn>
などと呼ばれています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">w3m</anchor> は local file (<code class="URI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file:</anchor></code> URI であらわされる資源) を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> のように <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>として扱う local CGI 機能があります。少々の w3m の動作の取得・制御も可能です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 安全上の理由から、 local CGI script と認識され得るのは <code class="URI">file:///cgi-bin/</code> 以下とかに限られます。 (このディレクトリは仮想で、実体は w3m の設定で指定します。)</p><section><h1>メタ変数</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> などと同じように、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境変数</anchor>として提供されます。</p><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI/1.1</anchor> で規定されているほとんどのメタ変数を用意してくれます。独自拡張の <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REQUEST_URI</anchor></code> にも対応しています。
詳しくはソース (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;8</anchor-internal>) を見て下さい。</p><p><code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP_*</anchor></code> 変数群は、
<code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP_REFERER</anchor></code> 以外は用意しないようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 注意しておきたい点としては、 <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REMOTE_ADDR</anchor></code>
と <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">REMOTE_HOST</anchor></code> には常に
<code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">127.0.0.1</anchor></code> と <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">localhost</anchor></code>
が、 <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SERVER_NAME</anchor></code> と <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SERVER_PORT</anchor></code>
にも常に <code class="CGI">localhost</code> と <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">80</anchor></code>
が入るようになっています。 <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SEFVER_PROTOCOL</anchor></code>
も常に <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP/1.0</anchor></code> です。
最後の2つは local でない CGI を emulate するためでしょうが、
このおかげで local でない CGI と local CGI
を完全に区別する方法はありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> とはいっても、 local でない CGI と local CGI
を区別するのは簡単です。 <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SERVER_SOFTWARE</anchor></code>
には普段の HTTP 要求で <code class="HTTP"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">User-Agent</anchor></code>
欄に送る値が入っていますから、これが <code class="CGI">w3m</code>
で始まれば w3m が local CGI 機能を使っていると分かります。
(w3m variant でこの文字列が <code class="CGI">w3m</code>
で始まらなかったら困るかもしれませんが。) </p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 変数 <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOCAL_COOKIE_FILE</anchor></code> には、
local <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Cookie</anchor> に使用できるファイルの名前が入ります。</p><p>古い版 (2003年1月くらいの版まで) では、
<code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">LOCAL_COOKIE</anchor></code> が使われてました。
こちらの変数には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">セッション</anchor>識別子に使える値が入るみたいです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> この他に、 <code>W3M_<var>*</var></code> 変数群から情報を取得することもできます。</p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>CGI 頭欄</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> w3m 独自の <code class="CGI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">w3m-control</anchor></code> 欄が用意されています。
これを使うと任意の機能を実行できます。
<code class="file">README.func</code> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/doc-jp/README.func">http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/doc-jp/README.func</anchor-external>
に機能の一覧があります。</p><p>この欄を複数個出力すれば、その順に実行できます。
なお、 local CGI スクリプトからではない通常の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応答</anchor>でこの欄は認識されません。<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">されるとしたら危険なことに。。。</weak></p><form xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" ref="comment"></form></section><section><h1>参考文献</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <em>w3m manual</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://w3m.sourceforge.net/MANUAL#LocalCGI">http://w3m.sourceforge.net/MANUAL#LocalCGI</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <em>w3m/w3m/local.c</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/local.c">http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/local.c</anchor-external> : 
実装のソース。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/scripts/">http://cvs.sourceforge.net/viewcvs.py/w3m/w3m/scripts/</anchor-external> : 実際の local CGI を使ったスクリプトがありますから、参考になるでしょう。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> w3m-990406 以降で実装されている。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> w3m の local CGI 機能 <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.mnet.ne.jp/~tnomura/w3m2.html">http://www.mnet.ne.jp/~tnomura/w3m2.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> w3m の local CGI その2 <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.mnet.ne.jp/~tnomura/localcgi.html">http://www.mnet.ne.jp/~tnomura/localcgi.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.felix.jp/~yugo/diary/2000_08/diary18.html">http://www.felix.jp/~yugo/diary/2000_08/diary18.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> あとは 2ch の w3m スレの話題にも結構上がります。スクリプトが投稿されていたりもするので参考になるかも。</li></ul></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ELink</anchor> でも同様の機能が実装されています。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><cite xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">The ELinks Manual</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Petr Baudis, Jonas Fonseca Madsen, Miciah Dashiel Butler Masters</anchor> 著, <code xmlns="http://www.w3.org/1999/xhtml">2007-03-18 16:03:15 +09:00</code> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://elinks.or.cz/documentation/manual.html#CONFIG-CGI">http://elinks.or.cz/documentation/manual.html#CONFIG-CGI</anchor-external></comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Webブラウザー</anchor>やその<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">拡張機能</anchor>として <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL scheme</anchor>
<code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cgi:</anchor></code>、<code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cgi+:</anchor></code> といった <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">local CGI</anchor>
と類似した機能が実装されていることもあります。</p></section><section><h1>歴史</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Web Forms 2.0</anchor> には <code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">file:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> への<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォーム提出</anchor>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor>
により処理することに
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参考</anchor>としてではありますが) 言及がありました。 (現在の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTML Standard</anchor> にはありません。)</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <cite xml:lang="en-GB-x-Hixie">Web Forms 2.0</cite> (<time>2009-01-05 11:07:15 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.whatwg.org/specs/web-forms/current-work/#for-file">https://www.whatwg.org/specs/web-forms/current-work/#for-file</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <cite xml:lang="en">lynx(1) - Linux man page</cite>
(<time>2020-10-01T08:27:18.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://linux.die.net/man/1/lynx">https://linux.die.net/man/1/lynx</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite>w3m manual</cite>
(<time>2001-11-27T03:32:53.000Z</time>, <time>2020-10-01T08:28:26.484Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://w3m.sourceforge.net/MANUAL.ja.html#LocalCGI">http://w3m.sourceforge.net/MANUAL.ja.html#LocalCGI</anchor-external></p></section></body></html>