Apache :: ASP
< % Web Applications with Apache & mod_perl % >
はじめに
インストール
設定
構文
イベント
オブジェクト
SSI
セッション
XML/XSLT
% CGI
PERLスクリプト
FAQ
チューニング
謝辞
サポート
使用サイト
リソース
計画
履歴
ライセンス

実例

ASP 工作室
日本語訳について

Powered by Apache::ASP
Powered by ModPerl and Apache
Powered by Perl
Links Checked by NodeWorks
SourceForge.jp
CGI


CGI は、ASP が出てくる以前は、長い間、Web アプリケーションを設置する標準的な方法でした。
CGI ゲートウェイの世界では、CGI.pm が CGI アプリケーション構築に、
広く使われたモジュールであり、Apache::ASP でも、CGI.pm を用いた、
スクリプトに互換性があるようになっています。
また、Version 2.19 からは、Apache::ASP は、
mod_perl が利用できない、
Apache Web サーバでも、スタンドアローンの CGI モードで運用できるようになりました。
  下段の "Standalone CGI Mode" セクション参照してください。
以下は、CGI と CGI.pm との互換性に関する特記すべきノートです。 CGI.pm を使うことができるようになるには、多少なりとも、 仕事量が大きくなりますし、他の Perl ASP を実行する上で、 互換性を保証されるものではなく、限界もあることも起こりうることです。

mod_perl なしのスタンドアローンな CGI モード CGI ヘッダ
CGI.pm CGI における print()
問い合わせオブジェクト初期化 File アップロード

mod_perl なしのスタンドアローンな CGI モード


version 2.19 で、Apache::ASP スクリプトは、
スタンドアローンな、CGI スクリプトとして、
Apache (サーバ)に、mod_perl が組み込まれていなくても稼動するようになりましたが、
Unix プラットフォームの Apache で、mod_cgi 
で動いていたスクリプトも、他の Web サーバないし Win32 オペレーティングシステムでは、さらなる改変をしなければ、多少なりとも違った動き方になるでしょう。
CGI スクリプトとして、./site/eg スクリプトを動かすには、 ./site ディレクトリを、Web サーバがアクセスできる、適当な場所にコピーしてください。 ここの例では、/usr/local/apache/htdocs/aspcg にあるものとします。 httpd.conf で、Apache::ASP CGI スクリプトを始動するには 以下のようにします。
 Alias /aspcgi/ /usr/local/apache/htdocs/aspcgi/
 <Directory /usr/local/apache/htdocs/aspcgi/eg/ >
   AddType application/x-httpd-cgi .htm
   AddType application/x-httpd-cgi .html
   AddType application/x-httpd-cgi .asp
   AddType application/x-httpd-cgi .xml
   AddType application/x-httpd-cgi .ssi
   AllowOverride None
   Options +ExecCGI +Indexes
 </Directory>
次に、ディストリビューションから、CGI と ASP スクリプトを、 インストールした、./site/eg ディレクトリにコピーします。 以下のように、これらのスクリプトの冒頭ラインに書くと、 ASP ラッパが動くようになります。
 #!/usr/local/bin/perl asp
(この)ASP スクリプトは、通常の mod_perl ハンドラリクエストの代りに、 Apache::ASP 環境で、CGI ラッパとして設定されます。 mod_cgi では、Apache->dir_config() データが得られないので、 ASP スクリプトは、dir_config() データをハッシュ化させた %Config のデータに 埋め込ませるように asp.config ファイルを読み込むようにしています。 複雑な、asp.config ファイルの実例は、./site/eg/asp.config に示します。
普通の、asp.config フィルは、以下のようになることでしょう。
 # asp.config
 %Config = (
   'Global' => '.',
   'StateDir' => '/tmp/aspstate',
   'NoState' => 0,
   'Debug' => 3,
 );
NoState のデフォールトは、CGI モードでは、1 ですが、 $Session & $Application のようなオブジェクトが定義されているように、 0 にセットしてください。

CGI.pm


CGI.pm は、非常に有用なモジュールで、開発者が、アプリケーション構築のさい、
手助けになっていますので、Apache::ASP でも、
CGI.pm でコールされる関数と互換性があるようにしました。
ほとんど CGI で書かれた ASP スクリプトのサンプルとして、
./site/eg ディレクトリにある
cgi.htm をご覧ください。
version 0.09 で、Apache::ASP で働く場合、 CGI.pm の使用では、入力、出力ともに継ぎ目なく行われるようになりました。 既存の、CGI スクリプトを、Apache::ASP へ移植したい時は、 <% %> でスクリプト実行部分を包み込まなければなりません。 この機能の実装で、開発者は、Web アプリケーション構築する上で、 両方の領域のベスト(な部分)を持てることになります。

問い合わせオブジェクト初期化


CGI.pm $query オブジェクトは、次のように作成することが出来ます。
  use CGI;
  my $query = new CGI;
Apache::ASP version 0.09 で、フォーム入力が、 CGI.pm で初期化されたものに上書きされて、読み込まれるようになりました。 以前は、Apache::ASP は、$Request->Form() へ読み込まれる時に、 フォーム入力(の値)を、消滅させていましたが、 現在は、フォーム入力はキャッシュされ、CGI.pm の入力ルーチンにて、 使用されます。

CGI ヘッダ


ヘッダの機能は停止されるが、CgiHeaders 設定オプションを、
真にセッティングするために、
CGI.pm $query->header() メソッドを使用できるだけでなく、
print "Header: value\n" として、
以下のような行をスクリプトの先頭に追加することもできます。
  Some-Header: Value
  Some-Other: OtherValue

 <html><body> スクリプトの本体がここから開始
CGI スタイルのヘッダがないか、あるいは、改行がなければ、 ただちにスクリプト本体が開始されます。 それで、以下のような、ASP スクリプトがありますと、
  print join(":", %{$Request->QueryString});
行は、セミコロンがあるのでヘッダとして解釈され、 出力なしに終わることになります。 <html> でページをスタートするかぎり、 基本的なデバグの際には、この問題を避けるようにしてください。

CGI におけるprint()

CGI では、print() 命令文が、よく知られていますし、
CGI.pm の関数は、通常、print() の文字列戻り値になっています。
Apache::ASP でも、$Response->Write() の別名になっていますので、
使用できます。$| は効果がないことに注意してください。

  print $query->header();
  print $query->start_form();

File アップロード


CGI.pm は、ファイルをアップロードし、フォーム入力を読み込む実装が、
よく使われます。望みのままに、ファイルアップロードフォームを
作ることができるので、$Request->Form() を使って、
アップロードしたファイルから、データをリカバリできます。
ファイルアップロードからのデータは、ファイルハンドルへと書き込まれ、
次には、(ファイルハンドルから)読み込まれます。
アップロードされた、元のファイル名は、ファイルハンドルの名前になります。

  my $filehandle = $Request->Form('file_upload_field_name');
  print $filehandle; # ファイルの名前を示す。
  my $data;
  while(read($filehandle, $data, 1024)) {
    # アップロードされたファイルからのデータを $data へ書き込む
  };
このトピックの詳細情報は、CGI.pm のドキュメントを見てください。 (perldoc CGI と試してください) 使用法の実例は、./site/eg/file_upload.asp を見てください。
ファイルアップロードでの詳細データを使っての、 $Request->FileUpload() API 拡張(例)を示します。 以下のプロパティは、問い合わせ時に、使用できます。
  my $file_upload = $Request->{FileUpload}{upload_field};
  $file_upload->{BrowserFile}
  $file_upload->{FileHandle}
  $file_upload->{ContentType}

  # FileUploadTemp がセットされている場合のみ
  $file_upload->{TempFile}	

  # ファイルアップロードで、MIME ヘッダが送出されると
  # 必ず、"keys %$file_upload" が調べられる。
  $file_upload->{?Mime-Header?}
詳細情報は、オブジェクト での $Request セクションを見てください。
 
Copyright © 1998-2002, Joshua Chamas, Chamas Enterprises Inc.