[1] [[w3m]] は local file ([CODE(URI)[[[file:]]]] URI であらわされる資源) を [[HTTP]] のように [[CGIスクリプト]]として扱う local CGI 機能があります。少々の w3m の動作の取得・制御も可能です。 [2] 安全上の理由から、 local CGI script と認識され得るのは [CODE(URI)[file:///cgi-bin/]] 以下とかに限られます。 (このディレクトリは仮想で、実体は w3m の設定で指定します。) * メタ変数 [9] [[Apache]] などと同じように、[[メタ変数]]は[[環境変数]]として提供されます。 [[CGI/1.1]] で規定されているほとんどのメタ変数を用意してくれます。独自拡張の [CODE(CGI)[[[REQUEST_URI]]]] にも対応しています。 詳しくはソース (>>8) を見て下さい。 [CODE(CGI)[[[HTTP_*]]]] 変数群は、 [CODE(CGI)[[[HTTP_REFERER]]]] 以外は用意しないようです。 [10] 注意しておきたい点としては、 [CODE(CGI)[[[REMOTE_ADDR]]]] と [CODE(CGI)[[[REMOTE_HOST]]]] には常に [CODE(CGI)[[[127.0.0.1]]]] と [CODE(CGI)[[[localhost]]]] が、 [CODE(CGI)[[[SERVER_NAME]]]] と [CODE(CGI)[[[SERVER_PORT]]]] にも常に [CODE(CGI)[localhost]] と [CODE(CGI)[[[80]]]] が入るようになっています。 [CODE(CGI)[[[SEFVER_PROTOCOL]]]] も常に [CODE(CGI)[[[HTTP/1.0]]]] です。 最後の2つは local でない CGI を emulate するためでしょうが、 このおかげで local でない CGI と local CGI を完全に区別する方法はありません。 [11] とはいっても、 local でない CGI と local CGI を区別するのは簡単です。 [CODE(CGI)[[[SERVER_SOFTWARE]]]] には普段の HTTP 要求で [CODE(HTTP)[[[User-Agent]]]] 欄に送る値が入っていますから、これが [CODE(CGI)[w3m]] で始まれば w3m が local CGI 機能を使っていると分かります。 (w3m variant でこの文字列が [CODE(CGI)[w3m]] で始まらなかったら困るかもしれませんが。) [14] 変数 [CODE(CGI)[[[LOCAL_COOKIE_FILE]]]] には、 local [[Cookie]] に使用できるファイルの名前が入ります。 古い版 (2003年1月くらいの版まで) では、 [CODE(CGI)[[[LOCAL_COOKIE]]]] が使われてました。 こちらの変数には[[セッション]]識別子に使える値が入るみたいです。 [12] この他に、 [CODE[W3M_[VAR[*]]]] 変数群から情報を取得することもできます。 [[#comment]] * CGI 頭欄 [13] w3m 独自の [CODE(CGI)[[[w3m-control]]]] 欄が用意されています。 これを使うと任意の機能を実行できます。 [CODE(file)[README.func]] に機能の一覧があります。 この欄を複数個出力すれば、その順に実行できます。 なお、 local CGI スクリプトからではない通常の [[HTTP]] [[応答]]でこの欄は認識されません。[WEAK[されるとしたら危険なことに。。。]] [[#comment]] * 参考文献 - [7] ''w3m manual'' - [8] ''w3m/w3m/local.c'' : 実装のソース。 - [15] : 実際の local CGI を使ったスクリプトがありますから、参考になるでしょう。 - [6] w3m-990406 以降で実装されている。 - [3] w3m の local CGI 機能 - [4] w3m の local CGI その2 - [5] - [16] あとは 2ch の w3m スレの話題にも結構上がります。スクリプトが投稿されていたりもするので参考になるかも。 * 関連 [17] [[ELink]] でも同様の機能が実装されています。 ;; [CITE@en[The ELinks Manual]] ([[Petr Baudis, Jonas Fonseca Madsen, Miciah Dashiel Butler Masters]] 著, [CODE[2007-03-18 16:03:15 +09:00]] 版) [81] [[Web Forms 2.0]] でも [CODE(URI)@en[[[file:]]]] [[URL]] の[[フォーム提出]]の[[処理モデル]]で同様の機能が ([[参考]]としてながら) 定義されていました。 [82] [[Webブラウザー]]やその[[拡張機能]]として [[URL scheme]] [CODE(URI)@en[[[cgi:]]]]、[CODE(URI)@en[[[cgi+:]]]] といった [[local CGI]] と類似した機能が実装されていることもあります。