初めてのCGI
トップページ】 【倶楽部ハウス
CGIスクリプトの設置手順
CGI(Common Gateway Interface)スクリプトは、変化に富んだホームページの運営に不可欠になっています。
ここでは、CGIスクリプトの中でも、特に Perlというプログラム言語を利用したPerlスクリプトの設置方法に関することを書いてあります。

1.CGIスクリプト利用可否確認
プロバイダのホームページをよく見て、CGIスクリプト利用に関する制限事項などを確認します。
どうしても分からない場合は、サーバ管理者(サポート担当者)に電子メールで確認して下さい。

2.実行ファイルのパス確認
CGIスクリプト利用が許可されている場合は、実行ファイルのパス(Perl・sendmailなど)がアナウンスされているはずです。
実行ファイルのパスは、CGIスクリプト設置のとき必要になりますから、必ずメモしておいてください。

3.CGIスクリプトダウンロード
気に入ったCGIスクリプトを見つけたら、自分のパソコンにダウンロードして下さい。
***.lzh というファイルは圧縮ファイルなので、リンク部分をクリックし保存先を指定すれば、自動的にダウンロードが始まります。
ダウンロードした後、ファイルが行方不明にならないよう、注意して下さい。

4.圧縮ファイル解凍
圧縮されたファイルをダウンロードし終えたら、解凍する必要があります。
圧縮ファイル解凍ソフトを使い、解凍して下さい。

5.ファイルレイアウト
CGIスクリプトの説明(readme.html or index.html)に、ディレクトリやファイルのレイアウト例が書いてあります。
必要なディレクトリやファイルは、予め自分のパソコンで作っておいた方が、作業が順調に進みます。
サーバは、ディレクトリ名やファイル名の大文字・小文字も区別して扱いますから、注意して下さい。
また、ファイル名やディレクトリ名に空白を入れたり、日本語を使ったりするのは、トラブルの種なので避けてください。

6.インタプリンタ行編集
CGIスクリプトを実行するには、「Perl実行ファイル(インタプリンタ)使ってこのスクリプトを動かす」という宣言をする必要があります。
インタプリンタ行は、CGIスクリプトの先頭で#! に続け、Perl実行ファイルのパス(絶対パス)を正確に書かなくてはなりません。
インタプリンタ行の前に改行を入れたり、#! の前に空白などを入れてはいけません。
通常のサーバでは、Perl実行ファイルの絶対パスは /usr/local/bin/perl  か /usr/bin/perl です。

7.ユーザ変数編集
CGIスクリプトでは、設置するユーザがサーバの環境や自分の好みに合わせ、変更すべきユーザ変数があります。
その中でも、ファイルの位置関係など、設置する状況に応じて変更しないとCGIスクリプトが動作しないものがあります。
ここでは、最低限必要と思えるユーザ変数の編集に留めて次のステップに進んで下さい。
二度手間にはなりますが、できるだけ原型に近い形で、最初の動作確認を行うことがトラブル無く設置するコツです。

8.ファイル転送
インタプリンタ行、最低限の編集を終えたファイルをFTPソフトで、サーバのホームページアリアに転送します。
FTPソフトによるファイル転送が出来ないサーバは、TELNETによるファイル転送を行う必要がります。
ファイル転送の方法や、利用できるツールは、プロバイダのホームページで紹介されている場合もありますから、調べて見て下さい。
ファイルを転送するときに注意することは、転送モードです。
CGIスクリプトやHTMLファイルはアスキーモード、画像ファイルなどはバイナリモードで転送します。

9.ファイル属性(パーミッション)設定
サーバに転送したファイルは、ファイルの種類に応じてパーミッションを設定設定しなくてはなりません。
パーミッションは、FTPソフトやTELNETコマンドで変更します。
詳細は、FTPソフトのヘルプファイルや、UNIXの参考書などを見て下さい。
一般的に実行ファイルは(*.cgi , *.pl)などは、パーミッション755、データファイルなどは666という指定が多いようですが・・・
サーバの設定によっては、自分のホームページエリア以外のディレクトリにアクセスできることもあるのでグループには権利を与えない方が無難です。

以下にファイル種類毎に推奨するパーミッションを示します。
種類 一般的な拡張子 パーミッション 備考
実行ファイル *.cgi , ..... 705 サーバによっては、*.pl が実行ファイルの場合もある
データ書き込みファイル *.dat , *.log , .... 606 実行ファイルがデータを書き込むためのファイル
読み込み専用ファイル *.pl , *.html , *.gif , ..... 604 実行ファイルから require される *.pl (jcode.pl)なども含みます
自動作成ファイル格納ディレクトリ   707 実行ファイルが「自動作成するファイル」「名称変更するファイル」を入れるディレクトリ

10.動作試験
動作試験は、ブラウザからCGIスクリプトを呼び出(リクエスト)して行います。
問題があれば、CGIスクリプトが返すエラーメッセージか、サーバが返すエラーメッセージが表示されます。
エラーメッセージが表示された場合は、CGIスクリプトの編集部分を再確認して、パスの設定や記述に問題がないか点検して下さい。


用語

【パスの記述】
サーバに置かれたファイルの場所を指定することを「パスを指定する」と言います。
パスの指定方法には、絶対パスで指定する場合と相対パスで指定する場合があります。
自分のホームページエリア内のファイルの場所を指定する場合は、多くの場合、相対パスで指定します。
自分のホームページエリア以外にあるファイルを指定する場合は、絶対パスで指定しなくてはなりません。
・・・例えば、Perl実行ファイルは、自分のホームページエリアにないので、絶対パスで指定する必要があります。

以下に例を示します
server roothome (サーバ利用者のエリア)
    ├ account1account2account3(自分のホームページエリア)
    │ ├ a.html
    │ └ dir1
    │    ├ b.html
    │    └ dir2
    │       └ c.html
    └ account4
※太字はディレクトリ
絶対パスで表すと・・・

a.html → /home/account3/a.html
b.html → /home/account3/dir1/b.html
c.html → /home/account3/dir1/dir2/c.html

[注意]
 /home/ は、サーバ管理者が変更する場合もあります。
 その時は、絶対パス指定部分を全て書き直す必要が生じます。
相対パスで表すと・・・

a.html (account3内のファイル)を基準にしたとき
 b.html → ./dir1/b.html
 c.html → ./dir1/dir2/c.html

b.html (dir1内のファイル)を基準にしたとき
 a.html → ../a.html
 c.html → ./dir2/c.html

c.html (dir2内のファイル)を基準にしたとき
 a.html → ../../a.html
 b.html → ../b.html


《ポイント》
 絶対パスは / (スラッシュ)で始まる。
 相対パスはスラッシュの前に . (ドット)が付いている。
   ./(ドット1個 + スラッシュ)は、同じディレクトリを表す
   ../(ドット2個 + スラッシュ)は、一階層上のディレクトリ

【パーミッション】
ホームページの設置を許可しているプロバイダのサーバは、多くの場合、UNIX系サーバを利用しています。
UNIX系サーバは、普段使っているパソコン(Windows95/98やMacOS)と異なり、複数ユーザの利用を前提にしています。
そのため、UNIX系サーバでは、ファイルやディレクトリ(フォルダ)に「誰の持ち物か?」という情報を持たせています。
そして、ファイルの持ち主は、ファイルやディレクトリ毎に、それを利用する人に応じた「権利」を設定しなくてはなりません。
ファイルやディレクトリ毎に利用者にどの権利を与えるかをパーミッションという形で設定します。

ファイルやディレクトリの利用者は、以下のように分類されます。
user ファイルを設置した人
group 同じサーバ内で同一グループと設定されている人達
 ※大抵は、同じサーバにホームページを開設しており、サーバにtelnetやFTPでログインしている人達です
other user、group 以外の人達

規定できる権利は、ファイルとディレクトリで以下のようになります。
読取権 書込権 実行権
記号表記 r w x
数値表記 4 2 1
ファイル データを読取る権利 データを書き換える権利 実行する権利
(スクリプトファイルなどの場合)
ディレクトリ ファイルリストを得る権利 ファイルを操作する権利
(作成、削除、変名する権利)
アクセスする権利

FTPソフトなどでパーミッション変更するときは、パーミッションを数値で示す場合が多いのようです。
また、ファイルリストなどでは、記号表記が一般的です。

頻繁に利用するパーミッションが示す権利の表わし方を以下に示します。

 ┌──  user の権利:7 = 読取権4(r)+ 書込権2(w)+ 実行権1(x)
 | ┌─ groupの権利:5 = 読取権4(r)+ 実行権1(x)
 | | ┌ otherの権利:5 = 読取権4(r)+ 実行権1(x)
 7 5 5(rwxr-xr-x)

 ┌──  user の権利:6 = 読取権4(r)+ 書込権2(w)
 | ┌─ groupの権利:5 = 読取権4(r)
 | | ┌ otherの権利:5 = 読取権4(r)
 6 4 4(rw-r--r--)

【転送モード】
ファイルをサーバに転送するときは、ファイルの種類により転送する方法を選ぶ必要があります。
テキスエディタでファイル内容が確認できるファイルは、アスキー(ASCCI)モードで転送します。
GIF、JPGといった種類の画像ファイルなどは、バイナリー(BINARY)モードで転送します。
アスキーモードで転送したファイルの容量は、サーバに置かれたものの方が少なくなっています。
バイナリモードで転送したファイルは、サーバに置かれたものは容量が変化しません。

【FTPソフト】
FTPソフトにも、いろいろな種類があります。
クライアント(あなたのパソコン)側とサーバ側のファイルが2画面で一覧表示されるタイプが使い易いでしょう。
Win NextFTP シェアウエァ http://www.toxsoft.com/
FFFTP フリーウェア http://www2.biglobe.ne.jp/~sota/
Mac だれか 教えて 下さい (^。^)

【テキストエディタ】
テキストエディタには、いろいろな種類があります。
可能であれば、行番号表示が可能で、シフトJIS/JIS/EUCなど複数の文字にコード対応しているものの方がいいでしょう。
Win 秀丸エディタ シェアウエァ http://hidemaru.xaxon.co.jp/
K2Editor フリーウェア http://web.kyoto-inet.or.jp/people/koyabu/
http://village.infoweb.ne.jp/~ckawa/
Mac だれか 教えて 下さい (^。^)

【解凍ソフト】
CGIスクリプトの配布形式は、LZH圧縮ファイル、ZIP圧縮ファイルで配布されることが多いようです。
優れた解凍ソフトが多数ありますが、特別なファイル(DLL)が不要でインストールし易いものがいいでしょう。
Win Lhasa フリーウェア http://www.st.rim.or.jp/~otake/
+Lhaca フリーウェア http://sapporo.cool.ne.jp/murayama/Lhaca/
Mac だれか 教えて 下さい (^。^)