ktats****@users*****
ktats****@users*****
2009年 12月 21日 (月) 13:07:32 JST
Index: docs/modules/CGI-2.89/CGI/Apache.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Apache.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Apache.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,22 @@ +=head1 名前 + +CGI::Apache - CGI.pmのための後方互換性のためのモジュール + +=head1 概要 + +このモジュールは使わないように。これはdeprecateされています。 + +=head1 ABSTRACT + +=head1 DESCRIPTION + +=head1 AUTHOR INFORMATION + +=head1 BUGS + +=head1 SEE ALSO + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Carp.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Carp.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Carp.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,263 @@ +=head1 名前 + +B<CGI::Carp> - HTTPD(またはその他)にエラーログを書込むためのCGIルーチン + +=head1 概要 + + use CGI::Carp; + + croak "We're outta here!"; + confess "It was my fault: $!"; + carp "It was your fault!"; + warn "I'm confused"; + die "I'm dying.\n"; + + use CGI::Carp qw(cluck); + cluck "I wouldn't do that if I were you"; + + use CGI::Carp qw(fatalsToBrowser); + die "Fatal error messages are now sent to browser"; + +=head1 説明 + +CGIスクリプトはタイムスタンプもされず完全に識別もされないエラーログに +警告メッセージを残すという厄介な習性を持っています。エラーをおこした +スクリプトを追いかけるのは大変です。これはそれを直します。通常の + + use Carp; + +を + + use CGI::Carp + +で置き換えてください。すると標準のwarn()、die()、croak()、confess() +そしてcarp()の呼び出しが自動的に魔法のように、きれいにタイムスタンプ +がついたメッセージをHTTPサーバーエラーログに出力する関数に置き換え +られます。 + +例: + + [Fri Nov 17 21:40:43 1995] test.pl: I'm confu****@test***** line 3. + [Fri Nov 17 21:40:43 1995] test.pl: Got an error message: Permission denied. + [Fri Nov 17 21:40:43 1995] test.pl: I'm dying. + +=head1 エラーメッセージのリダイレクト + +デフォルトではエラーメッセージはSTDERRに送られます。ほとんどのHTTPDサーバは +サーバのエラーログにSTDERRを出力させます。アプリケーションによっては、 +サーバのエラーログとは区別して、プライベートなエラーログを保持したいと +思うかもしれません。あるいはブラウザがそれをうけとるようにSTDOUTに +エラーメッセージを出力させたいかもしれません。 + +この目的のためにcarpout()関数が提供されています。carpout()はデフォルトでは +エクポートされないので、以下のように明示的にインポートしなければいけません + + use CGI::Carp qw(carpout); + +carpout()関数は1つの引数を必要とします。エラーを出力したい、オープン +されているファイルハンドルへのリファレンスでなければなりません。 +コンパイラー・エラーも捕まえるよう、CGIアプリケーションの一番上で +BEGINブロックで呼ばれなければなりません。例: + + BEGIN { + use CGI::Carp qw(carpout); + open(LOG, ">>/usr/local/cgi-logs/mycgi-log") or + die("Unable to open mycgi-log: $!\n"); + carpout(LOG); + } + +現時点では、あなたに代わってcarpout()がログに対するファイルのロックを +扱うことはしません。 + +本当のSTDERRはクローズされません--それはCGI::Carp::SAVEERRに移ります。 +CGIスクリプトを取り扱うとき、いくつかのサーバではスクリプトがSTDOUTと +STDERRを閉じるとブラウザへの接続をクローズします。CGI::Carp::SAVEERRは +時期尚早なハプニングからこれを防ぐために使われます。 + +いろいろな方法でcarpout()にファイルハンドルを渡すことができます。 +Tom Christiansen によると"正しい"方法はファイルハンドルGLOBへの +リファレンスを渡すことです: + + carpout(\*LOG); + +しかしこれは奇妙に単なる死にぞこないのように見えます、そこで以下の +書き方も受け取ります: + + carpout(LOG); + carpout(main::LOG); + carpout(main'LOG); + carpout(\LOG); + carpout(\'main::LOG'); + + ... and so on + +FileHandleやその他のオブジェクトでもうまく動きます。 + +carpout()を利用することはパフォーマンス的にはよくありせん。そのため +デバッグ目的あるいは中程度で使用されるアプリケーションにお勧めします。 +このモジュールの将来では、パフォーマンスへの影響を押さえるため、 +STDERRへのリダイレクトをCGI::Carpメソッドのいずれかが呼ばれるまで +遅らせるかもしれません。 + +=head1 Perlエラーをブラウザ・ウィンドウに表示させる + +致命的な(die、confess)エラーをブラウザに送りたければ、 +特別な"fatalsToBrowser"サブルーチンをインポートします: + + use CGI::Carp qw(fatalsToBrowser); + die "Bad error here"; + +致命的なエラーは、初期のコンパイルエラーで発生したエラーであっても +見られるように最小限のHTTPヘッダをブラウザに送るようCGI::Carpで +アレンジされて、ブラウザにエコーされます。 +(carpoutによりリダイレクトされていなければ)致命的でないエラーは、 +まだログファイルにだけ出力されます。 + +=head2 デフォルト・メッセージの変更 + +デフォルトでは、ソフトウェア・エラーメッセージにはエラーの時刻と +日付とともにWebmasterにe-mailでコンタクストするような注意書きがつきます。 +このメッセージが気に入らなければ、set_message()ルーチンを使って変更する +ことが出来ます。これはデフォルトではインポートされません;use()行で +インポートしなければなりません: + + use CGI::Carp qw(fatalsToBrowser set_message); + set_message("It's not a bug, it's a feature!"); + +カスタマイズしたエラーメッセージを作るため、コードリファレンスを渡す +ことも出来ます。実行時には、あなたのコードはスクリプトを死なせた(die) +エラー・メッセージのテキストで呼び出されます。例: + + use CGI::Carp qw(fatalsToBrowser set_message); + BEGIN { + sub handle_errors { + my $msg = shift; + print "<h1>Oh gosh</h1>"; + print "<p>Got an error: $msg</p>"; + } + set_message(\&handle_errors); + } + +正確にコンパイル時のエラーを捕まえるためには、set_message()は +BEGIN{}ブロックの中から呼び出さなければいけません。 + +=head1 警告をHTMLコメントにする + +致命的でないエラーをHTMLコメントとしてあなたのプログラムの出力に +埋め込むことも出来るようにまりました。この機能を可能とするためには、 +新しい"warningsToBrowser"サブルーチンをエクスポートしてください。 +HTTPヘッダが送信される前にブラウザへ警告を送信するとエラーになるので、 +warninigsToBrowser()サブルーチンをtrueの引数で呼ぶまで、すべての警告 +は内部バッファに格納されます: + + use CGI::Carp qw(fatalsToBrowser warningsToBrowser); + use CGI qw(:standard); + print header(); + warningsToBrowser(1); + +HTMLコメントが許されない場所で内容を出力している間、ブラウザに警告が +送られるのを防ぐためwarningsToBrowser()に引数falseを与えることも出来ます: + + warningsToBrowser(0); # 警告を無効にします + print "<script type=\"text/javascript\"><!--\n"; + print_some_javascript_code(); + print "//--></script>\n"; + warningsToBrowser(1); # 再び警告を有効にします + +注意:この点でwarningsToBrowser()はfatalsToBrowser()とは根本的に違います、 +あなたは決してそれをあなた自身で呼ぶことはありません! + +=head1 プログラム名の上書き + +CGI::Carpには、ログやブラウザ・ウィンドウに書かれるメッセージに、 +エラーあるいは警告を生成したプログラムの名前が入っています。 +時にはPerlは実行されたプログラムの実際の名前がなんであるかについて +混乱してしまうこともあります。こうした場合には、CGI::Carpが全ての +メッセージに対して利用するプログラム名を上書きすることができます。 + +それをする手っ取り早い方法は、useステートメントでCGI::Carpにプログラムの +名前を伝えることです。"use"ステートメントに"name=cgi_carp_log_name"を +追加することにより、それを行うことができます。例えば: + + use CGI::Carp qw(name=cgi_carp_log_name); + +プログラムの一部分でだけ、プログラム名を変えたければ、 +代わりにC<set_progname()>関数を使うことが出来ます。これは +デフォルトではエクスポートされません。以下のようにすることにより +明示的にインポートしなければなりません + + use CGI::Carp qw(set_progname); + +一度そうすれば、ログに書かれるプログラムの名前を、以下のように呼び出す +度に、いつでも変更することができます + + set_progname(new_program_name); + +以下のように呼び出すことにより、プログラムをデフォルトに元に戻すことが +できます + + set_progname(undef); + +この上書きはプログラムのコンパイルが終了するまでは起こらないことに +注意してください。そのためコンパイルエラーは上書きされない +プログラム名のまま表示されます。 + +=head1 変更履歴 + +1.05 carpout() added and minor corrections by Marc Hedlund + <hedlu****@best*****> on 11/26/95. + +1.06 fatalsToBrowser() no longer aborts for fatal errors within + eval() statements. + +1.08 set_message() added and carpout() expanded to allow for FileHandle + objects. + +1.09 set_message() now allows users to pass a code REFERENCE for + really custom error messages. croak and carp are now + exported by default. Thanks to Gunther Birznieks for the + patches. + +1.10 Patch from Chris Dean (ctdea****@cogit*****) to allow + module to run correctly under mod_perl. + +1.11 Changed order of > and < escapes. + +1.12 Changed die() on line 217 to CORE::die to avoid B<-w> warning. + +1.13 Added cluck() to make the module orthogonal with Carp. + More mod_perl related fixes. + +1.20 Patch from Ilmari Karonen (perl****@itz*****): Added + warningsToBrowser(). Replaced <CODE> tags with <PRE> in + fatalsToBrowser() output. + +1.23 ineval() now checks both $^S and inspects the message for the "eval" pattern + (hack alert!) in order to accomodate various combinations of Perl and + mod_perl. + +1.24 Patch from Scott Gifford (sgiff****@suspe*****): Add support + for overriding program name. + +=head1 作者(AUTHORS) + +Copyright 1995-2002, Lincoln D. Stein. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +バグレポートとコメントはこちらへ: lstei****@cshl***** + +=head1 参考資料 + +Carp, CGI::Base, CGI::BasePlus, CGI::Request, CGI::MiniSvr, CGI::Form, +CGI::Response + if (defined($CGI::Carp::PROGNAME)) + { + $file = $CGI::Carp::PROGNAME; + } + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Cookie.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Cookie.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Cookie.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,242 @@ +=head1 名前 + +CGI::Cookie - Netscape クッキーへのインターフェース + +=head1 概要 + + use CGI qw/:standard/; + use CGI::Cookie; + + # 新しいクッキーを作成し、それを送信します + $cookie1 = new CGI::Cookie(-name=>'ID',-value=>123456); + $cookie2 = new CGI::Cookie(-name=>'preferences', + -value=>{ font => Helvetica, + size => 12 } + ); + print header(-cookie=>[$cookie1,$cookie2]); + + # 既にあるクッキーを取り出します + %cookies = fetch CGI::Cookie; + $id = $cookies{'ID'}->value; + + # 外部ソースから返されたクッキーを作成します + %cookies = parse CGI::Cookie($ENV{COOKIE}); + +=head1 説明 + +CGI::Cookieは、Webサーバに、接続についての永続的な情報をブラウザ側に +格納させることを可能にする新機能である、Netscape(HTTP/1.1)クッキーへの +インターフェースです。CGI::CookieはCGI.pmと一緒に使うよう意図されています +(そして事実、内部的にはそれによって使われています)が、このモジュールだけを +独立で使うことも出来ます。 + +クッキーについての完全な情報はこちらをご覧下さい + + http://www.ics.uci.edu/pub/ietf/http/rfc2109.txt + +=head1 CGI::Cookieの使い方 + +CGI::Cookieはオブジェクト指向です。各クッキーオブジェクトは名前と値を +持ちます。名前にはスカラー値が指定できます。値はスカラー、配列の値が +指定できます(連想配列も許されます)。クッキーは以下のものを含めて、 +多くの属性も持っています: + +=over 4 + +=item B<1. 有効期限(expiration date)> + +有効期限はブラウザにいつまでクッキーを保持するかを伝えます。 +もしクッキーが将来の日付を指定すれば、ブラウザはクッキーの情報を +ディスク・ファイルに格納し、(有効期限になるまで)ユーザが再接続 +するたびにサーバーに、それを返します。もしクッキーが過去の日付を +指定していたら、ブラウザはディスク・ファイルからクッキーを削除します。 +もし有効期限が指定されなければ、クッキーはユーザがブラウザを終わら +せるまで有効です。 + +=item B<2. ドメイン(domain)> + +これはクッキーが有効であるドメイン名の全体あるいは一部になります。 +ブラウザはドメイン名の一部がマッチする、全てのホストにクッキーを +返します。例えばドメイン名に".capricorn.com"を指定すれば、 +ブラウザは"www.capricorn.com", "www2.capricorn.com", +"feckless.capricorn.com"などのマシンで実行されている全ての +Webサーバにクッキーを返します。".edu"のように最上位のドメインに +マッチさせようとすることを防ぐため、ドメイン名は少なくとも2つの +ピリオドが入っていなければなりません。もしドメインが指定されなければ、 +ブラウザはクッキーが作成されたホストのサーバにだけクッキーを返します。 + +=item B<3. パス(path)> + +クッキーのpath属性を与えると、ブラウザはクッキーを返す前にスクリプトの +URLをチェックします。例えばパスを"/cgi-bin"と指定すれば、 +"/cgi-bin/tally.pl", "/cgi-bin/order.pl", そして +"/cgi-bin/customer_service/complain.pl"の、各スクリプトには返されますが、 +"/cgi-private/site_admin.pl'"には返されません。デフォルトではパスは"/"で、 +あなたのサイトのすべてのCGIスクリプトが、そのクッキーを受信します。 + +=item B<4. 安全フラグ(secure flag)> + +もし"secure"属性が設定されると、クッキーはCGIリクエストがSSLのような +セキュアなチャンネルで発行された場合にのみ送信されます。 + +=back + +=head2 新しいクッキーの作成 + + $c = new CGI::Cookie(-name => 'foo', + -value => 'bar', + -expires => '+3M', + -domain => '.capricorn.com', + -path => '/cgi-bin/database', + -secure => 1 + ); + +B<new>メソッドでクッキーを作成してください。 B<-name>とB<-value>パラメータは +必須です。名前(name)はスカラー値でなけばなりません。値(value)はスカラー、 +配列リファレンス、またはハッシュ・リファレンスにすることができます。 +(将来のどこかの時点で、クッキーは完全に一般的な +Perlオブジェクト・シライアライゼーション・プロトコルの1つをサポートするでしょう) + +B<-expires>はCGI.pmで理解されるフォーマットの相対あるいは絶対日付を +受取ります。例えば"+3M"は3ヶ月先です。詳細はCGI.pmのドキュメントを +ごらんください。 + +B<-domain>はドメイン名または完全に修飾されたホスト名を示します。 +もし指定されなければ、クッキーはそれが作成されたWebサーバーにしか +返されません。 + +B<-path>は現在のサーバーでのURLの一部を返します。クッキーは指定された +パスで始まるすべてのURLへ返されます。指定されなければ、デフォルトは"/"になります。 +これはあなたのサイトのすべてのページにクッキーを返します。 + +B<-secure>true値に設定すると暗号プロトコルが使われているときにだけ +クッキーを返すようブラウザに指示します。 + +=head2 ブラウザにクッキーを送信 + +CGIスクリプトではHTTPヘッダで1つまたは複数のSet-Cookie:フィールドを +作ることによってブラウザにクッキーを送信することが出来ます。典型的な +シーケンスは以下の通りです: + + my $c = new CGI::Cookie(-name => 'foo', + -value => ['bar','baz'], + -expires => '+3M'); + + print "Set-Cookie: $c\n"; + print "Content-Type: text/html\n\n"; + +複数のクッキーを送信するためには、複数のSet-Cookie:を作ってください。 +そうでなければクッキーを";"でつなげて、それを1つのフィールドで送る +ことが出来ます。 + +CGI.pmを使っているならば、header()メソッドに-cookie引数を与える +ことによりクッキーを送信します: + + print header(-cookie=>$c); + +Mod_perl のユーザはrequestオブジェクトのheader_out()メソッドを使って +設定できます: + + $r->header_out('Set-Cookie',$c); + +内部的にはCookieはHTTPヘッダに入れられると、そのas_string()を +呼びたすための""オペレータをオーバーロードします。as_string()は +クッキーの内部表現をRFC互換のテキスト表現に変換します。 +もし望むのであれば、as_stringを呼ぶことも出来ます: + + print "Set-Cookie: ",$c->as_string,"\n"; + +=head2 以前のクッキーの回復 + + %cookies = fetch CGI::Cookie; + +B<fetch>はブラウザから返されたすべてのクッキーが入った連想配列を +返します。その配列のキーはクッキーの名前です。クッキー全体を以下 +のようにして繰り返すことが出来ます: + + %cookies = fetch CGI::Cookie; + foreach (keys %cookies) { + do_something($cookies{$_}); + } + +スカラーコンテキストでは、fetch()はハッシュ・リファンレンスを返します。 +それは複数のクッキーを扱っているならより効率的かもしれません。 + +CGI.pmは、そのクッキーでの予約文字を保存し、元に戻すためにURLエスケープする +メソッドを使います。他のサーバによって設定されたクッキーを取り出そう +としているのであれば、このエスケープするメソッドはあなたをつまずかせる +かもしれません。代りにraw_fetch()を使ってください。これはfetch()と +同じ意味ですがアンエスケープはしません。 + +parse()クラスメソッドを使って、いくつかの外部形式に格納されたクッキーを +取り出すこともできます: + + $COOKIES = `cat /usr/tmp/Cookie_stash`; + %cookies = parse CGI::Cookie($COOKIES); + +=head2 クッキーの取り扱い + +Cookieオブジェクトはクッキー属性を取得し設定する一連のアクセサー・メソッドを +持っています。各アクセサーは同じ書式です。引数なしに呼ばれると、アクセサーは +その属性の現在の値を返します。引数付きで呼ばれると、アクセサーはその属性を +変更し、その新しい値を返します。 + +=over 4 + +=item B<name()> + +クッキーの名前を取得または設定します。例: + + $name = $c->name; + $new_name = $c->name('fred'); + +=item B<value()> + +クッキーの値を取得または設定します。例: + + $value = $c->value; + @new_value = $c->value(['a','b','c','d']); + +B<value()>はコンテキストに依存します。配列コンテキストではクッキーの値を +配列で返します。スカラー・コンテキストでは複数の値を持つクッキーの +最初の値を返します。 + +=item B<domain()> + +クッキーのドメインを取得または設定します。 + +=item B<path()> + +クッキーのパスを取得または設定します。 + +=item B<expires()> + +クッキーの有効期限を取得または設定します。 + +=back + + +=head1 作者情報(AUTHOR INFORMATION) + +Copyright 1997-1998, Lincoln D. Stein. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +バグレポートとコメントはこちらへ: lstei****@cshl***** + +=head1 バグ + +このセクションは最初はブランクのままです。 + +(訳者注:どうもデフォルトのままのようです) + + +=head1 参考資料 + +L<CGI::Carp>, L<CGI> + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Fast.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Fast.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Fast.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,171 @@ +=head1 名前 + +CGI::Fast - Fast CGIのためのCGIインターフェース + +=head1 概要 + + use CGI::Fast qw(:standard); + $COUNTER = 0; + while (new CGI::Fast) { + print header; + print start_html("Fast CGI Rocks"); + print + h1("Fast CGI Rocks"), + "Invocation number ",b($COUNTER++), + " PID ",b($$),".", + hr; + print end_html; + } + +=head1 説明 + +CGI::FastはCGI.pmによって作成されるCGIオブジェクトのサブクラスです。 +Open Market FastCGI標準でうまく機能するように特殊化されています。 +それはCGIスクリプトを永続的に実行しているサーバプロセスに変換すること +によって、そのスピードを大きく向上させます。大きなモジュールを +ロードしたり、永続的なデータベース接続を開くような時間のかかる初期化を +行うプロセスのパフォーマンスは大きく向上するでしょう。 + +=head1 パズルの他のピース + +CGI::Fastを使うためにはFastCGIが使えるWebサーバが必要です。 +Open MarketのサーバはFastCGI-savvyです。NCSA httpd 1.5とApache用にフリーで +再配布できるFastCGIモジュールもあります。Microsoft Internet Information Serverと +Netscape Communications ServerのためのFastCGIを可能にするモジュールはアナウンス +されています。 + +さらにFastCGI I/OラブラリとリンクされたPerlインタープリタのバージョンが +必要になります。DEC Alpha, HP-UX そしてSPARC/Solarisを含めて多くの +プラットフォームのためにコンパイル済みのバイナリが利用できます。あるいは +FastCGI開発者キットで提供されるパッチをあてたソースからPerlを再作成することが +できます。FastCGI Perlインタープリタはおかしな結果なしに、通常のPerlの場所で +使うことが出来ます。 + +ApacheとNCSA httpdのためのFastCGIモジュール、コンパイル済みのPerlインタープリタ、 +FastCGI開発者キットの全てが以下のURLにあります: + + http://www.fastcgi.com/ + +=head1 FASTCGI PERLスクリプトの書き方 + +FastCGIスクリプトは永続的です:サーバが初期化されると、1つまたは +複数のスクリプトのコピーが起動され、サーバが終了するか、自然死するまで +残ります。それが必要とするなんらかの1回の初期化を行った後、スクリプトは +接続が来るのを待ち、リクエストを処理し、さらに待つというループに +入ります。 + +典型的なFastCGIスクリプトは以下のようになります: + + #!/usr/local/bin/perl # FastCGIバージョンのPerlでなければなりません! + use CGI::Fast; + &do_some_initialization(); + while ($q = new CGI::Fast) { + &process_request($q); + } + +新しいリクエストがあるたび、CGI::FastはCGIオブジェクトをループに +返します。残りの時間、スクリプトはnew()の呼び出しで待っています。 +サーバがスクリプトに終了することを要求するとき、new()はundefを +返します。もちろん、そうしたければもっと早く終了することも出来ます。 +スクリプトの新しいバージョンは、その場所を占めるために再び起動 +されます(長時間実行するスクリプトでのPerlメモリ・リークを +さけるため、これが必要かもしれません)。 + +CGI.pmのデフォルトのCGIオブジェクトも同様に機能します。 +(訳者注:関数指向のことを指している)ループを単にこう変更 +してください: + + while (new CGI::Fast) { + &process_request; + } + +header()、start_form()などはすべて、現在のリクエストに影響を +与えます。 + +=head1 FASTCGIのインストール + +完全な詳細はFastCGI開発者キットドキュメントをご覧下さい。 +Appacheサーバでは、以下の行をsrm.confに追加しなければいけません: + + AddType application/x-httpd-fcgi .fcgi + +FastCGI スクリプトは拡張子 .fcgiで終わらなければなりません。 +インストールする各スクリプトについて、以下ようにsrm.confに +追加しなければなりません: + + FastCgiServer /usr/etc/httpd/fcgi-bin/file_upload.fcgi -processes 2 + +これは、起動時にfile_upload.fcgi の2つのコピーを起動するようApacheに +命令しています。 + +=head1 CGIスクリプトとしてFASTCGIスクリプトを使う + +FastCGIスクリプトとして正常に機能するすべてのスクリプトは普通の +CGIスクリプトとしてインストールされたときにも正常に機能します。 +しかしながら、パフォーマンス的な利点は見られないでしょう。 + +=head1 外部のFASTCGIサーバーの呼び出し + +FastCGIは、FastCGIスクリプトがWebサーバーの外部、おそらくはリモートのマシンで +実行することを可能にする、TCP/IP転送機構をサポートしてます。Webサーバーが +外部のFastCGIサーバーに接続するよう設定するためには、以下のものをsrm.confに +追加します: + + FastCgiExternalServer /usr/etc/httpd/fcgi-bin/file_upload.fcgi -host sputnik:8888 + +2つの環境変数が、C<CGI::Fast>が外部のFastCGIサーバーとして使われることを +許しながら、C<CGI::Fast>がどのように作成されるかに影響を与えます。( +さらなる詳細についてはC<FCGI::OpenSocket>のためのC<FCGI>のドキュメントを +ご覧ください。) + +=over + +=item FCGI_SOCKET_PATH + +外部FastCGIスクリプトが、Webサーバーからやってくる接続をリスンするために +バインドする、ソケットのアドレス(TCP/IP)あるいはパス(UNIXドメイン) + +=item FCGI_LISTEN_QUEUE + +接続を保留する待ち行列の最大長 + +=back + +例: + + #!/usr/local/bin/perl # FastCGIバージョンのPerlでなければなりません! + use CGI::Fast; + &do_some_initialization(); + $ENV{FCGI_SOCKET_PATH} = "sputnik:8888"; + $ENV{FCGI_LISTEN_QUEUE} = 100; + while ($q = new CGI::Fast) { + &process_request($q); + } + +=head1 警告 + +私はこれをあまりたくさんテストしていません。 + +=head1 作者情報(=AUTHOR INFORMATION) + +Copyright 1996-1998, Lincoln D. Stein. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +バグレポートとコメントはこちらへ: lstei****@cshl***** + +=head1 バグ + +このセクションは最初はブランクのままです。 +(訳者注:どうもデフォルトのままのようです) + + +=head1 参考資料 + +L<CGI::Carp>, L<CGI> + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Pretty.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Pretty.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Pretty.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,102 @@ +=head1 名前 + +CGI::Pretty - きれいに整形されたHTMLコードを作成するためのモジュール + +=head1 概要 + + use CGI::Pretty qw( :html3 ); + + # 1つのデータ要素を持つテーブルを出力 + print table( TR( td( "foo" ) ) ); + +=head1 説明 + +CGI::PrettyはCGIから派生したモジュールです。これはCGIのユーザに、きれいに +整形されたHTMLコードを出力することを可能にする唯一の関数です。 + +CGIモジュールを使うとき、以下のコード: + print table( TR( td( ``foo'' ) ) ); + +は、以下の出力を作成します: + <TABLE><TR><TD>foo</TD></TR></TABLE> + +結果のHTMLコードは改行もインデントもないので、たくさんの行とカラムで構成される +テーブルを作成すると、とても読みにくくなるでしょう。 + +CGI::Prettyがこの問題を解決します。これがHTMLコードに改行とインデントを加えるので、 +簡単に読むことが出来ます。 + + print table( TR( td( "foo" ) ) ); + +今度は以下のように出力します: + <TABLE> + <TR> + <TD> + foo + </TD> + </TR> + </TABLE> + + +=head2 整形されないタグ + +<A> と<PRE> タグは整形されません。これらのタグが整形されると、ブラウザ上では +余分なインデントがついてしまい、それがページの見た目を期待していたものとは違う +ものにしてしまいます。触れられないタグのリストにタグをさらに追加したければ、 +C<@AS_IS>配列にそれを追加してください: + + push @CGI::Pretty::AS_IS,qw(CODE XMP); + +=head2 インデントのカスタマイズ + +インデントの個人的な形式を持ちたければ、C<$INDENT>変数を変更することが出来ます: + + $CGI::Pretty::INDENT = "\t\t"; + +これはインデントを2つのタグにします。 + +同様に行の間をもっと開けたければ、C<$LINEBREAK>変数を変更することが出来ます: + + $CGI::Pretty::LINEBREAK = "\n\n"; + +これは行の間に2つの改行を作ります。 + +通常のCGIインデントを使うと決定したならば、以下のようにして行うことが出来ます: + + $CGI::Pretty::INDENT = $CGI::Pretty::LINEBREAK = ""; + +=head1 バグ + +このセクションは最初はブランクのままです。 + +(訳者注:どうもデフォルトのままのようです) + +=head1 作者(AUTHOR) + +Brian Paulsen <Brian****@ThePa*****>, with minor modifications by +Lincoln Stein <lstei****@cshl*****> for incorporation into the CGI.pm +distribution. + +Copyright 1999, Brian Paulsen. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +Bug reports and comments to Brian****@ThePa*****. You can also write +to lstei****@cshl*****, but this code looks pretty hairy to me and I'm not +sure I understand it! + +(最後の文だけ) + +バグレポートやコメントは Brian****@ThePa***** へ。 lstei****@cshl*****に書く +ことも出来ますが、このコードは非常に難しいようなので、わかるかどうかなんとも +いえません。 + +=head1 参考資料 + +L<CGI> + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Push.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Push.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Push.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,213 @@ +=head1 名前 + +CGI::Push - サーバープッシュへの簡単なインターフェース + +=head1 概要 + + use CGI::Push qw(:standard); + + do_push(-next_page=>\&next_page, + -last_page=>\&last_page, + -delay=>0.5); + + sub next_page { + my($q,$counter) = @_; + return undef if $counter >= 10; + return start_html('Test'), + h1('Visible'),"\n", + "This page has been called ", strong($counter)," times", + end_html(); + } + + sub last_page { + my($q,$counter) = @_; + return start_html('Done'), + h1('Finished'), + strong($counter - 1),' iterations.', + end_html; + } + +=head1 説明 + +CGI::PushはCGI.pmによって作られるCGIオブジェクトのサブクラスです。 +これはサーバ・プッシュ操作に特化しています。それは規則正しい間隔で、 +その内容を変更する、動くページを可能にします。 + +1つのページを描くサブルーチンへのポインタをCGI::Pushに与えます。 +サブルーチンが呼ばれるたび、それは新しいページを作成します。 +ページの内容は、それまであったものをそれで置き換えるという方法で +ブラウザに伝えられます。この技術はHTMLページのほか、画像ファイルでも +機能し、アニメーションGIFを作ることが可能です。 + +Netscape Navigatorだけがサーバー・プッシュをサポートします。 +Internet Explorerはサポートしていません。 + +=head1 CGI::Pushの使い方 + +CGI::Pushは1つの新しいメソッドdo_push()を標準のCGIスイートに +追加します。このメソッドを呼ぶとき、各新しいページを描くことに +責任を持つサブルーチンへのリファレンス、間隔、オプションで +最後のページを描くサブルーチンを渡します。他のオプションの +パラメータはCGI header()メソッドにより理解されるもののほとんどを +含みます。 + +好みによってオブジェクト指向のやりかたでも、そうでなくても +do_push()を呼ぶことが出来ます: + + use CGI::Push; + $q = new CGI::Push; + $q->do_push(-next_page=>\&draw_a_page); + + -あるいは- + + use CGI::Push qw(:standard); + do_push(-next_page=>\&draw_a_page); + +パラメータは以下の通りです: + +=over 4 + +=item -next_page + + do_push(-next_page=>\&my_draw_routine); + +これは必須パラメータで、新しいページを描くことに責任を持つサブルーチンへの +リファレンスを示します。そのサブルーチンはCGIオブジェクトとサブルーチンが +何回呼ばれたかを示すカウンターからなる2つのパラメータ期待します。それは +出力する1つまた複数の要素のB<配列>でページの内容を返さなければなりません。 +再描画するループを中止し、(もしあれば)最後のページを出力するように +false値(または空の配列)を返すことが出来ます。 + + sub my_draw_routine { + my($q,$counter) = @_; + return undef if $counter > 100; + return start_html('testing'), + h1('testing'), + "This page called $counter times"; + } + +特別な効果のために描画ルーチンの中でグローバルな変数を作成し、 +参照し、使用することはもちろん自由です。 + +=item -last_page + + +このオプションのパラメータは一連の最後のページを描画することに +責任を持つサブルーチンへのリファレンスを示します。それは-next_pageルーチンが +false値を返した後に呼ばれます。このサブルーチンそのものは-next_pageルーチンと +まったく同じ呼び出し方を持たなければなりません。 + +=item -type + +このオプションのパラメータは各ページのコンテント・タイプを示します。 +"text/html"がデフォルトです。通常、そのモジュールは各ページは +MIMEタイプが異なる(heterogeneous)ものと想定しています。しかし +特別な値"heterogeneous"または"dynamic"のどちらかを指定すると +(後者は長いパラメータ名が嫌いな人のための便宜のために提供されています)、 +ページ単位にMIMEタイプを-- そしてそのほかのヘッダ・フィールドも--指定することが +出来ます。詳細は"異質な(heterogeneous)ページ"をご覧下さい。 + +=item -delay + +秒単位でフレーム間の遅延を示します。遅延が小さければページは早く +リフレッシュされます。小数の値も許されます。 + +B<指定されなければ、-delay はデフォルトで1秒になります。> + +=item -cookie, -target, -expires, -nph + +これらはCGI::header()での同じ名前のパラメータと同じ意味を持ちます。 + +指定されなければ、-nphのデフォルトは1(多くのサーバーで必要とされるように、 +下記をご覧ください)。 + +=back + +=head2 異質なページ + +通常CGI::Pushにより表示されるすべてのページは共通のMIMEタイプを持ちます。 +しかしdo_push() -type パラメータで "heterogeneous"または"dynamic"を +指定すると、場合によって各ページのMIMEタイプを指定することが出来ます。 + +もしこのオプションを使えば、各ページのためのHTTPヘッダを作成する責任は、 +あなたあります。描画ルーチンを単純に以下のように変更してください: + + + sub my_draw_routine { + my($q,$counter) = @_; + return header('text/html'), # ここでヘッダを作成していることに注意 + start_html('testing'), + h1('testing'), + "This page called $counter times"; + } + +好きなヘッダ・フィールドを追加することが出来ますが、しかし(クッキーや +ステータス・フィールドを含めて)いくつかのはブラウザによって解析されない +かもしれません。1つの面白い効果は一連のページを表示し、そして最後のページを +表示した後に、ブラウザを新しいURLにリダイレクトすることです。redirect()は +機能b<しない>ので、一番簡単な方法は以下に示すように-refreshヘッダ・フィールドを +使うことです: + + sub my_draw_routine { + my($q,$counter) = @_; + return undef if $counter > 10; + return header('text/html'), # ここでヘッダを作成していることに注意 + start_html('testing'), + h1('testing'), + "This page called $counter times"; + } + + sub my_last_page { + return header(-refresh=>'5; URL=http://somewhere.else/finished.html', + -type=>'text/html'), + start_html('Moved'), + h1('This is the last page'), + 'Goodbye!' + hr, + end_html; + } + +=head2 実行時にページの遅延を変更する + +もしページ毎にページ間の遅延時間を制御したければ、描画ルーチンの中で +push_delay()を呼び出してください。push_delay()は現在のページが表示された後、 +次のものを表示する前に遅らせたい秒数を表す、1つの数値の引数を取ります。 +遅延時間は小数の値にすることができます。パラメータがなければ、 +push_delay()は単に現在の遅延を返します。 + +=head1 CGI::Pushスクリプトのインストール + +サーバ・プッシュ・スクリプトが正しく機能するためには、解析なしヘッダ(NPH) +スクリプトとしてインストールされなければいけません。UNIXシステムでは、 +これはしばしば、スクリプトの名前の前に"nph-"をつけることによって実現されます。 +NPHスクリプトの理解はWebSTARとMicrosoft IISでは自動的に行われます。 +他のサーバのユーザは、ヘルプのためにそのドキュメントをご覧になるべきです。 + +Apache Webサーバーではバージョン1.3b2からは、サーバー・プッシュ・スクリプトが +NPHスクリプトとしてインストールされる必要がありません: NPHスクリプトによって +必要とされる特別なヘッダを不能にするため、do_push() への +-nphパラメータがfalse値に設定されなければならないかもしれません。 + +=head1 作者情報(AUTHOR INFORMATION) + +Copyright 1995-1998, Lincoln D. Stein. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +バグレポートとコメントはこちらへ: lstei****@cshl***** + +=head1 BUGS + +このセクションは最初はブランクのままです。 + +(訳者注:どうもデフォルトのままのようです) + +=head1 参考資料 + +L<CGI::Carp>, L<CGI> + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Switch.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Switch.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Switch.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,22 @@ +=head1 名前 + +CGI::Switch - なくなってしまったCGI::Switchのための後方互換性のためのモジュール + +=head1 概要 + +このモジュールは使わないように。これはdeprecateされています。 + +=head1 ABSTRACT + +=head1 DESCRIPTION + +=head1 AUTHOR INFORMATION + +=head1 BUGS + +=head1 SEE ALSO + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) + Index: docs/modules/CGI-2.89/CGI/Util.pod diff -u /dev/null docs/modules/CGI-2.89/CGI/Util.pod:1.1 --- /dev/null Mon Dec 21 13:07:32 2009 +++ docs/modules/CGI-2.89/CGI/Util.pod Mon Dec 21 13:07:32 2009 @@ -0,0 +1,33 @@ +=head1 名前 + +CGI::Util - CGIモジュールによって使われる内部ユーティリティ + +=head1 概要 + +なし + +=head1 説明 + +パブリックなサブルーチンはありません。 + +=head1 作者情報(AUTHOR INFORMATION) + +Copyright 1995-1998, Lincoln D. Stein. All rights reserved. + +This library is free software; you can redistribute it and/or modify +it under the same terms as Perl itself. + +バグレポートとコメントはこちらへ: lstei****@cshl*****。バグレポートを +送るときには、あなたが使っているCGI.pmのバージョン、Perlのバージョン、 +Webサーバーの名前とバージョン、オペレーティング・システムの名前と +バージョンを教えてください。問題がリモートのブラウザに依存する +場合には、影響を与えるブラウザについての情報もお願いします。 + +=head1 参考資料 + +L<CGI> + +=head1 翻訳者 + +川合孝典(GCD00****@nifty*****) +