Perl初心者の部屋  目次  イントロ  モジュール  特定のプログラミング質問  セキュリティ
                       .d8888b.    .d8888b.   8888888
                      d88P  Y88b  d88P  Y88b    888
                      888    888  888    888    888
                      888         888           888
                      888         888  88888    888
                      888    888  888    888    888
                      Y88b  d88P  Y88b  d88P    888
                       "Y8888P"    "Y8888P88  8888888

                       PCP => Perl CGI Program (ming)

                                Version 1.0

Shishir Gundavaram <shishir@ora.com>
Tom Christiansen <tchrist@perl.com>

3.0 - CGI と WWW サーバ

Q3.1: 私のPCPは実行するのにどこに住まわせるべきでしょうか?  cgi-binディレクトリは何のためにあるのですか?

Q3.2: ファイルアクセス権限とは何ですか?  どうしたらそれを変更できますか?

Q3.3: PerlをどこにインストールすればPerlを実行できるようになりますか?

Q3.4: "Server: Error 500"メッセージが出るのですが、どうしてでしょうか?

Q3.5: データをセーブするためにファイルをオープンするよう書いているのですが、 open()コマンドが失敗します。 どうなっているのでしょうか?


3.0 - CGI と WWW サーバ


Q3.1: 自分のPCPを実行するにはどこに置いておけばよいのでしょうか?  cgi-binディレクトリは何のためにあるのですか?

一般的なサーバ設定がされていれば、サーバは"cgi-bin"ディレクトリに置いている CGIスクリプトを実行します。しかしながら、サーバ管理者はサーバ設定ファイル で別名(エイリアス)を設定することもでき、その結果、ある拡張子 (例:.cgi, .pl)を持ったスクリプトも実行させることが可能になります。


Q3.2: ファイルアクセス権限とは何ですか? どうしたらそれを変更できますか?

ファイル権限には読込、書込、実行権限があり、(uidとして知られる) ユーザ認証と特定のグループへのメンバーシップ[訳注:そのグループに 属しているという事]に基づいて各利用者への権限が認可されます。 ファイルの権限を変更するにはコマンド:chmodを使用します。 以下はその一例です。:
[訳注:頭に%がついているのはUNIXのCシェルを使っている事を示しています。 当然の事ながらそのままではWindowsやMacでは使えません。]

% ls -ls form.cgi

  1 -rwx------  1 shishir       974 Oct 31 22:15 form.cgi*
これには0700(8進数)の権限があります。つまり(所有者を除いて) 誰もこのファイルに対し読込、書込、実行ができないことを意味します。 chmodを使って権限を変更してみましょう。:
% chmod 755 form.cgi
% ls -ls form.cgi

  1 -rwxr-xr-x  1 shishir       974 Oct 31 22:15 form.cgi*
これで権限が変更され、"shishir"と同じグループにいる利用者も その他の一般利用者も同様にこのファイルの読込、実行権限を 持つようになりました。

様々な8進コードの詳細な説明については、manページのchmodコマンドを参照して ください。


Q3.3: PerlをどこにインストールすればPerlを実行できるようになりますか?

Perlはシステムのどこにでもインストール可能です!  あなたが確認しなければならない唯一のことは、サーバがchrootされた 環境では走っていない、つまりはちゃんとインタープリタにアクセスできて いるかということです。 別な言い方をすれば、システム管理者はルートディレクトリを変更できるわけで、 "/"が実際のルート("/")ではなく、別のディレクトリを指してはいないかと いうことです。


Q3.4: "Server: Error 500"メッセージが出るのですが、どうしてでしょうか?

次のような理由でサーバエラーを受け取っている可能性があります。:


Q3.5: データをセーブするためにファイルをオープンするよう書いているのですが、 open()コマンドが失敗します。 どうなっているのでしょうか?

一般にHTTPサーバはユーザ"nobody"、あるいは"www"、あるいは最小限の権限を 有するある別のユーザIDで実行されています。 その結果、(あなたがファイルを新規作成しようとしている)ディレクトリは このプロセスIDで書き込めるようになっていなければなりません。
[訳注:このユーザIDはUNIXのHTTPサーバでよく使われているものです。 WindowsのIIS等ではまた違ったIDが使われています。 Perl初心者のFAQ参照]

安全な側にいるようにするには、成功したかどうかわかるように常にopenコマンド からの戻り値を確認しなさい。:
[訳注:以下のサンプルは優れものですから、 常に組み込むようにしましょう。(^^)]


open (FILE, "/abc/data.txt")
    || error ("Could not open file /abc/data.txt");

	.
	.	
	.

sub error {
    my ($message) = @_;
	
    print <<End_of_Error;
Content-type: text/html
Status: 500 CGI Error

<HTML>
<HEAD><TITLE>CGI Error</TITLE></HEAD>
<BODY>
<H1>Oops! Error</H1>
<HR>
$message
<HR>
</BODY>
</HTML>

End_of_Error
}

This document, and all its parts, are Copyright (c) 1996, Shishir Gundavaram and Tom Christiansen. All rights reservered. Permisson to distribute this collection, in part or full, via electronic means (emailed, posted or archived) or printed copy are granted providing that no charges are involved, reasonable attempt is made to use the most current version, and all credits and copyright notices are retained. Requests for other distribution rights, including incorporation in commercial products, such as books, magazine articles, or CD-ROMs should be made to either of the authors.

ご意見、ご要望は、 電子メールまたは 投稿にお願い致します。

ホームページへ戻る。