Download presentation
Presentation is loading. Please wait.
Published byもえり そめや Modified 約 8 年前
1
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 1 ( 超入門編 ) Perl for Win32 利用による Web アプリケーション開 発 ( 超入門編 ) 日本ヒューレット・パッカード ( 株 ) 石堂 正樹
2
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 2 目次 CGI はどうやって動いてるの? Perl で CGI を便利に作るには Perl で書いた CGI を動かす方法 CGI 以外に Perl で Web アプリケーションを作る
3
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 3 Web アプリケーション? 静的な HTML ファイルを表 示するだけではなく、外部 からの入力を使用して動的 に HTML を生成して HTTP で 送り返すアプリケーション 外部からの入力の例 – ユーザ入力 – データベース クライアント側は Web ブラ ウザさえあれば OK!
4
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 4 知っておかなきゃいけないこと HTML の構文 Perl のプログラミング
5
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 5 知っておくといいかもしれない こと HTTP プロトコル – プロトコルのコマンド – レスポンス
6
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 6 CGI Common Gateway Interface HTTP サーバと外部プログラムが通信を行う方法 HTTP サーバ 外部プログラム 外部プログラムの標準出力は HTTP サーバへ送られ る HTTP サーバから外部プログラムへの入力はいろいろ (後述) Print ‘ \n….’;
7
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 7 外部プログラムから HTTP サー バへの出力 おまじないをひと つ –Content-Type HTML を標準出力 へ出力すればよい より細かい制御を したいのであれば 、 タグを 使用するか、 HTTP ヘッダを出 力する print ‘Content-Type: text/html\n\n’; print ‘ \n’; print ‘ \n”; print ‘ 題名 \n’; print ‘ \n’; print ‘ ようこそ \n’; print ‘ \n’;
8
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 8 HTTP サーバからの入力 3 つの方法 –GET –POST – 拡張パス名 拡張パス名はサポートしていない HTTP サーバも あるので、 注意 ! サンプル ( ただし、 UNIX のシェルスクリプト ) –http://hoohoo.ncsa.uiuc.edu/cgi/examples.html
9
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 9 GET METHOD が “GET” のフォーム URL でデータを指定 環境変数 QUERY_STRING にブラウザより送信さ れたデータが格納されている 短いデータの入力に適している
10
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 10 GET <form name=“MY_FORM” method=“GET” target=“myscript.pl”> お名前をどうぞ http://…../myscript.pl?NAME=ishido $ENV{'QUERY_STRING'}='NAME=ishido'
11
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 11 POST METHOD が “POST” のフォーム 標準入力にフォームに入力されたデータが入って くる 入ってくるデータの長さは、環境変数 CONTENT_LENGTH に設定されている
12
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 12 POST <form name=“MY_FORM” method=“POST” target=“myscript.pl”> お名前をどうぞ NAME=ishido という文字 列が CGI の標準入力へ送りこ まれる
13
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 13 入力データの処理 入ってくるデータは、エンコードされていること もあるので、その場合は元に戻してから使用する ($ENV{CONTENT_TYPE} = ‘application/x-www- form-urlencoded’) 変換されるもの – 空白文字 – 記号 (!“#$%= など ) – 2バイト文字 – 詳細は RFC2068 を参照
14
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 14 戻し方 (cgi-lib.pl より ) ‘+’ を空白にする –s/\+/ /g; 変換された文字は %xx (xx は 16 進数 ) という形にな っているので、それを元に戻す –s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge;
15
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 15 拡張パス名 CGI のパス名の後にスラッシュ “/” を続けてデータを指 定 一見、そういう名前のファイルがあるように見える 環境変数 PATH_INFO に CGI のパス名の後に追加され た拡張パス名が設定される 環境変数 PATH_TRANSLATED のパス名の後に、 Alias 処理をした後の物理パス名が設定される 使用できない HTTP サーバもあるので注意
16
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 16 HTTP ヘッダ HTTP サーバから送ら れてくるデータは、ヘ ッダとボディからなっ ている ヘッダ部をみて Web ブ ラウザは動作を決定し ている “Content-Type:” も、 実はヘッダの1部 ボディ(本体) 空行 ヘッダ
17
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 17 HTTP ヘッダ CGI から HTTP ヘッダを送りだすことが可能 例 –Content-Type –Expires –Last-Modified –Set-Cookie ボディ ( 本体 ) との間に空行をいれることを忘れず に!
18
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 18 CGI 作成用のライブラリ・モジュ ール フォームからの入力は “ 名前=値 ” で渡ってくる 値も URL Encode されている場合もある いちいち変換する部分を書くのは面倒 決まったことを何回もしなきゃいけない(例: HTML のヘッダ部分) CGI 作成用のライブラリやモジュールが作成され て公開されている
19
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 19 CGI 作成用のライブラリ・モジュ ール 例として2つ紹介 –cgi-lib.pl –http://cgi-lib.stanford.edu/cgi-lib/ –CGI.pm –http://www-genome.wi.mit.edu/ftp/pub/software/WWW/cgi_docs.html
20
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 20 Cgi-lib.pl Perl4.x, Perl5.x 双方で使用可能 オブジェクト指向はサポートしていない &ReadParse を呼び出すと、フォームの METHOD に関わらずデータを取得できる HTTP によるファイルアップロードもサポート
21
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 21 Cgi-lib.pl の使用例 require 'cgi-lib.pl'; &ReadParse(*input); print &PrintHeader; print &HtmlTop(' ようこそ! '); print "$input{’name'} さん、ようこそ! \n"; print &HtmlBot; <form name=“MY_FORM” method=“POST” target=“myscript.pl”> お名前をどうぞ
22
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 22 CGI.pm Perl5 オブジェクト指向対応(オブジェクト指向し なくても OK) 画面上のコンポーネント (Text, TextArea, Button, Checkbox など)もスクリプトから簡単に作れる cgi-lib.pl よりも多機能なので、これからはじめる のであればこちらのほうがよいかもしれない
23
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 23 CGI.pm の使用例 use CGI; $q = new CGI; print $q->header(), $q->start_html(-title=>' ようこそ !'), $q->h1(' ようこそ '), ' いらっしゃいませ ',$q->param('name'),' さん ', $q->end_html(); <form name=“MY_FORM” method=“POST” target=“myscript.pl”> お名前をどうぞ
24
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 24 ファイルアップロード HTTP を使用してサーバへ ファイルをアップロードで きる RFC1867 Internet Explore 3.02 では、 追加コンポーネントが必要
25
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 25 ファイルアップロードの実現法 (CGI.pm の場合 ) 静的フォームの場合には 動的フォームの場合には –start_multipart_form() でフォームを開始するか –start_form() で3番目のパラメータに ‘multipart/form-data’ を指定してフォームを開始 – ファイル名を入力してほしいところに filefield() を挿入 送信されたファイルは、いったんテンポラリディ レクトリに保存される
26
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 26 ファイルアップロード用フォーム の例 ファイル名を入力してください
27
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 27 アップロード用フォームを CGI.pm で作る use CGI; $q = new CGI; print $q->header(), $q->start_html(), $q->start_multipart_form(), $q->filefield(-name=>’upload_file’), $q->submit(-name=>’upload’), $q->endform; print $q->end_html;
28
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 28 アップロードされたファイルの 処理 (CGI.pm の場合 ) フィールド名として指定したパラメータ(前の例 では $q->param(“upload_file”)) にファイル名(ス カラーコンテキストの場合) ファイルハンドルとしてアクセスすると、アップ ロードされたファイルの中身が見える $filename=$q->param(‘upload_file); while ( ) { print; }
29
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 29 デバッグのこつ CGI を実行する前に文法チェック! –perl -c エラーメッセージは、 HTTP サーバのログに残る 変数をファイルに出力するようにする open(DEBUG,’>>debug.txt’); print DEBUG, $a,$b,”\n”; close DEBUG;
30
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 30 Win32 用 Web サーバ 今回取り上げるのは次の3つ –AnHTTPd – 日本産のフリーソフト –http://www.st.rim.or.jp/~nakata/ –Apache –1.3 から Win32 版が公開されている –http://www.apache.org/ –Internet Information Server –http://www.microsoft.com/japan/products/iis/
31
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 31 CGI の設定方法 (AnHTTPd)
32
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 32 CGI の設定方法 (Apache) 実行可能ディレクトリは access.conf,.htaccess ファイルで指定 –Options ExecCGI 拡張子は srm.conf ファイルで指定 スクリプトの先頭に perl インタプリタの場所を指 定 –#!c:/perl/bin/perl.exe
33
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 33 CGI の設定方法 (Internet Information Server 3.0) インターネットサービスマネージャを使用
34
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 34 CGI の設定方法 (Internet Information Server 3.0) 拡張子によって起動されるインタープリタが判別 される ActiveState 社製の Perl であれば、セットアップ時 に拡張子を指定できる 手動で指定するのであれば、レジストリを変更 –HKLM\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ ScriptMap (REG_SZ) –.pl=C:\Reskit\Perl\Bin\Perl.exe %s %s
35
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 35 CGI の設定方法 (Internet Information Server 4.0) インターネットサービスマネージャ (MMC のスナ ップイン)
36
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 36 CGI 以外の Perl による Web アプリケーション実行方法 SSI (Server Side Include) Apache –mod_perl IIS –Perl for ISAPI –Perl_Ex –ASP 上での Perl Script
37
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 37 Server Side Include HTML ファイルの中に、スクリプトの実行結果を 挿入できる 例 –
38
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 38 mod_perl(Apache) Apache 用のモジュール (DLL) Perl のスクリプトを、プロセスを生成せずに実行で きる Web アプリケーション (CGI の代り)ばかりではなく Apache の細かい制御も行うことができる CPAN より入手 –modules/by-module/Apache/JBAKER/mod_perl-1.15-bin- bindist1-i386-win32-vc5.zip
39
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 39 Perl for ISAPI IIS と AnHTTPd で使用可能 ISAPI Filter の機能を使い、新規にプロセスを生成 せずにスクリプトを実行 (IIS4.0 では別プロセスで も実行可能 )
40
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 40 Perl for ISAPI でスクリプトを実 行する際の注意 IIS と同じプロセス上のひとつのスレッドとして動 作するので、 – ワーキングディレクトリを移動することができ ない –find.pm などを使用できない – ファイルを閉じ忘れると、いつまでも開かれっ ぱなしになる
41
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 41 PerlEx ActiveState 社よりリリース –http://www.activestate.com/plex/ Perl のスクリプトをプリコンパイルしておけるの で、スクリプトを高速に実行できる
42
1998 年 11 月 13 日 Perl Conference Japan '98 Tutorial Session 42 Perl Script による ASP ActiveState 社製 ActivePerl を使用すると、 IIS の Active Server Pages で Perl をスクリプト言語と して使用することができる ASP ファイルの先頭に、 – ただし、 ASP で全部をしないほうがよい – プレゼンテーションの部分のみ – 実際の処理(データベースアクセス、データ処 理など)は、 COM オブジェクトに任せるべき
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.