1
|
- 2006年 9月 28日 第二回資料
- 担当 重定 如彦
|
2
|
- CGIとプログラム言語
- Perlの基礎知識1−5
- サンプルCGI
- CGIのアップロード
- 占いCGI
- Perlの基礎知識6−13
|
3
|
- CGIを作成する為にはプログラムを記述する必要がある
プログラム言語には様々な種類があるが、CGIには一般的にPerlやPHPというプログラム言語が良く使われている
PerlはCGIを作成する際に頻繁に必要となる文字列の処理の記述が得意なプログラム言語で、法政大学だけでなく、
多くのプロバイダのウェブサーバでサポートされている
この授業でもPerlを使ってCGIを作成する
|
4
|
- PerlをCGIで使う場合、1行目にCGIを設置するウェブサーバ上にインストールされているPerlの実行ファイルのパスを
#! の後に記述する(すべて半角で記述すること)
- 法政大学の場合は、
- #!/usr/local/bin/perl
- と1行目に記述すれば良い
他のプロバイダでPerlを使ってCGIを記述する場合に何を記述するかはそのプロバイダのCGIに関する解説文章を参照すること(Windowsと異なりパスでは
\ ではなく / を使う点に注意)
|
5
|
- プログラムの記述と実行順序
- 基本的に、1行に一つずつ命令を記述する
- 各行の最後に ; (セミコロン)を記述する
- 基本的に、上の行から順番に1行ずつ
プログラムは実行される
(ただし、1行目の#!/usr/local/bin/perl は実行されない)
- プログラムを記述する際にはテキストエディタ(メモ帳や
Emeditorなど)を使用すること。ワープロ(Wordや一太郎)を
使ってプログラムを記述すると余計なデータが保存されて
しまうため、プログラムがうまく記述できない
|
6
|
- 文字に関する注意事項
- 基本的に、半角文字しか使えない
特に全角のスペースを記述しないように注意!
- 以下の場合のみ全角文字を使っても良い
- “ と ” (ダブルクオーテーション)記号で囲まれた部分
“ と ” で囲まれた部分は文字列として認識される
- # 記号(半角)より後ろに記述された文字
#の後ろに記述された文字はコメント(注釈)とみなされ、
プログラムの実行に影響を与えない
(注:“ と ”の間に記述された # は除く)
- 例えば #!/usr/local/bin/perl は注釈なので実行されない
|
7
|
- 関数
Perlでは、プログラムで利用することが可能な、
様々な動作を行ってくれる道具が用意されている
- 関数には名前があり、名前を記述することで利用できる
- 関数名の後に () を記述する
- ( と )の間に関数に渡すデータを記述することができる。このデータのことを引数(ひきすう)と呼ぶ
引数が複数ある場合は、引数と引数の間を , で区切る
- Perlの場合、()を省略することも可能(以下省略する)
- 注意: () や , はすべて半角で記述すること
|
8
|
- print関数
print 出力する文字列; のように記述する
printは文字を出力する関数であり、出力する文字列を引数として
記述する。CGIでprint関数を実行した場合は、ウェブブラウザに送り返す
返信メッセージに文字列が出力(書き込まれる)される。
文字列は基本的に “ ” 記号の間に記述する
記述例:
print “こんにちは”;
上記の行が実行されると、 こんにちは という文字列が出力される
|
9
|
- 画面にこんにちはと表示するCGIプログラム例
以下の作業を行うこと
- メモ帳を実行する
- 下記のプログラムをそのまま入力する
注: \n は改行を表す記号
- 「renshuu1.cgi」という名前でファイルをデスクトップに保存する
注意:URLには基本的に半角文字しか使えないという決まりがあるので、
CGIを記述したファイルの名前は必ず半角文字でつけること
- 以下の3行がプログラム
- #!/usr/local/bin/perl
- print "Content-Type: text/html; charset=sjis\n\n";
- print "こんにちは";
|
10
|
- ウェブサーバがCGIを実行した場合、以下のような処理が行われる
-
CGIを無事実行できた?
|
11
|
- 先ほどのCGIが無事に実行できた場合の処理
- CGIが無事に実行できたので
返信ヘッダの一部を作成する
- 1.で作成したヘッダに、CGIの
print関数が出力した文字列を
追加し、できたものを返信メッ
セージとして送り返す
|
12
|
- 法政大学の場合、Gドライブのwwwフォルダに作成した
CGIのファイルをコピーすれば良いが、一般的なプロバイダにCGIをアップロードするには一般にFTPと呼ばれるプロトコルを使用する。そこで本授業ではFTPを使ったアップロードの
方法を紹介する
FTPソフトには様々な種類があるが、本授業では演習室のコンピュータにインストールされているFFFTP(フリーソフト)というソフトを使用する
FFFTPを家で利用したい人は法政大学市ヶ谷情報センター
利用ガイドを参照すると良いだろう
|
13
|
- 以下の手順でアップロードを行う
- FFFTPを実行する
- ホスト一覧の中からファイルをアップロードする
ホストを選択し、接続ボタンをクリックする
法政大学の場合は cs1.edu.i.hosei.ac.jp
プロバイダのウェブサーバにアップロードする場合は、
新規ホストボタンを押して設定を行えば良い
- パネルにユーザIDとパスワードを入力する
法政大学の場合はログイン時のものと同じ
|
14
|
- FFFTPの基本説明
- 画面の説明
ウィンドウの左部分:自分のコンピュータのフォルダ
ウィンドウの右部分:接続したウェブサーバのコンピュータのフォルダ
(法政大学の場合は、Gドライブの内容が表示される)
- アップロードの方法
右のフォルダをアップロードしたいフォルダに変更し、
アップロードしたいファイルを右のフォルダにドラッグする
- ダウンロードの方法
右のフォルダをダウンロードしたいファイルがあるフォルダに変更
左のフォルダをダウンロードしたいファイルを保存したいフォルダに変更右のフォルダからダウンロードしたいファイルを左のフォルダにドラッグ
|
15
|
- アップロード手順の続き
- 右のフォルダのwwwをダブルクリックし、ファイルの
アップロード先であるwwwフォルダを表示する
- デスクトップの renshuu1.cgi をFFFTPの右のフォルダに
ドラッグする(これでアップロード完了)
- 右のフォルダに表示されているrenshuu1.cgiの上にマウスカーソルを移動し、右クリックして表示されるメニューで
「属性変更」をクリックする
- パネルの中で「実行」と表示されている3つのボタンをすべてクリックしてチェックをONにし、OKボタンをクリックする
|
16
|
- 属性変更の意味
- ウェブサーバのコンピュータのように、不特定多数の人間が利用する場合、そのコンピュータに保存されている各ファイルに対して、「誰が」、「どのような」操作を行うことができるかに
ついて以下のような設定を行うことができる
これをファイルのアクセス権限と呼ぶ
|
17
|
- 属性の設定
- 一般的には、自分が作ったファイルを勝手に他人に書き換えたり、
実行されては困るので、左下のような設定を行う
CGIの場合は、ファイルの中身を実行する必要があるので、右下の
ような設定を行う必要がある。なお、この設定は一度だけ行えば良い
|
18
|
- ウェブブラウザを開いて以下のアドレスを入力し、以下のようなウェブページが表示されれば成功
http://www.edu.i.hosei.ac.jp/~ユーザID/renshuu1.cgi
|
19
|
- 先ほどのCGIは単に「こんにちは」と表示するだけで、あまりCGIっぽくなかった。そこで次は、アクセスする毎に「大吉」「中吉」「小吉」「凶」のいずれかを表示するCGIを作成する
このようなCGIを作るには以下のような知識が必要である
- 乱数の発生方法
乱数とはサイコロの出目のように出たらめな数のこと
上記の占いをつくるには1から4までの乱数を発生させる必要がある
- 変数
変数とはプログラムで使用する数字などのデータを格納する入れ物のこと
このCGIでは発生させた乱数を変数に格納して後で利用する
- 条件分岐
条件(このCGIの場合は発生させた乱数の数字)によって異なる動作を行う
プログラムの書き方のことを条件分岐と呼ぶ
|
20
|
- 変数と代入
Perlに限らず一般的なプログラム言語では、数字や文字など
のデータを変数と呼ばれる入れ物に格納することができる
Perlの変数の特徴は以下のとおり
- 変数には好きな名前をつけることができる(半角英数字を使用可)
なお、変数名はその変数に何を入れるかがわかるような
名前をつけるのが一般的である(注:一部使用できない記号あり)
- 変数は名前の前に $ 記号をつける決まりがある
- 変数には、数字や文字列を代入することができる。代入は、
$変数名 = 式;
のように記述する
- 式には + − * / のような四則演算記号を使うことができる
- 式には変数や関数を記述することもできる
その場合、変数の中身や関数の計算結果を使って式の計算が行われる
|
21
|
- 変数の代入の記述例
$tate = 5;
$yoko = 10;
$menseki = $tate * $yoko;
- 上記の3行のプログラムを実行すると、mensekiという変数に 5*10=50 が代入される
- $myname = “重定”;
文字列を代入する場合は、“ ” 記号で囲む必要がある
|
22
|
- 乱数の発生方法
乱数を発生させるにはrandという関数を使う
rand(式)
randは 0 から 式 未満までの乱数を発生させる
$ransuu = rand(4);
上記のようなプログラムを実行すると $rannsuu という変数に 0以上4未満の数字が代入される
ただし、randは小数点以下の値も含むので上記の
プログラムでは、 1.234 や 2.345 のような整数ではない
数字が$rannsuuという変数に代入されてしまう
|
23
|
- 整数の乱数の発生方法
発生させた乱数を整数に変換するにはintという関数を使う
int(式)
intは 式の値を切り捨てるという操作を行う
$ransuu = int(rand(4));
上記のようなプログラムを実行すると、右辺のrand(4)が
実行された後、その結果をintが整数に変換するので結果
として0,1,2,3のいずれかの数字が $rannsuu に代入される
0,1,2,3ではなく、1,2,3,4の乱数を発生させたい場合は
- $ransuu = int(rand(4)) + 1;
と記述すれば良い
|
24
|
- 条件分岐
条件によって実行する内容を変化させるには、条件分岐と
呼ばれる方法を使う。条件分岐は以下のように記述する
なお、{ から } の間には何行プログラムを記述しても良い
- if (条件式) {
条件式が真(正しい)の場合に実行するプログラム
}
else
{
条件式が偽(正しくない)場合に実行するプログラム
- }
|
25
|
- 条件式の書き方
条件式の部分は以下のように記述する
式1 比較演算子 式2
比較演算子には以下のものがある
|
26
|
- 条件分岐の記述例
下記のプログラムは変数$scoreの中身が50以上の場合は$seisekiという変数に 合格 、そうでなければ 不合格 という文字列を代入する
if ($score >= 50) {
$seiseki = “合格”;
}
else
{
$seiseki = “不合格”;
- }
|
27
|
- 3つ以上の条件分岐
3つ以上の条件分岐を行いたい場合は以下のように記述する
- if (条件式1) {
条件式1が真の場合に実行するプログラム
}
elsif (条件式2) {
これより上の条件式がすべて偽で、
条件式2が真の場合に実行するプログラム
- }
elsif (条件式3) {
これより上の条件式がすべて偽で、
条件式3が真の場合に実行するプログラム
- }
・・・
注: elsif の部分は必要なだけ記述できる
・・・
else {
上記のすべての条件式が偽の場合に実行するプログラム
}
|
28
|
- メモ帳を実行し、以下のプログラムを記述し、「uranai.cgi」という名前でファイルをデスクトップに保存すること
- #!/usr/local/bin/perl
- print "Content-Type: text/html; charset=sjis\n\n";
- $ransuu = int(rand(4)) + 1;
- If ($ransuu == 1) {
- print "大吉";
- }
- elsif ($ransuu == 2) {
- print "中吉";
- }
- ・・・次のスライドに続く・・・
|
29
|
- ・・・プログラムの続き・・・
- elsif ($ransuu == 3) {
- print "小吉";
- }
- else {
- print "凶";
- }
- 入力が完了したら、ファイルをFTPでウェブサーバにアップロードし、
- ファイルの属性を変更し、ウェブブラウザでCGIが正しく動作しているか
- 確認すること
|