前のページに戻る

CGI設置の具体的な方法 ver.2


このページでは、カウンタを例にして CGI の設置の具体的手順を説明します。

以前のこのページは少なからぬ(つまり多い)バグがありました。そこで、1999年2月14日以前にご覧になってうまくいかなかった方は、新しく書き直されたこのバージョンでもう一度トライして見てください。当然、前回のバージョンで問題無くできた方は再トライは不要です。ご迷惑をおかけして申し訳ありませんでした。

1、perl のパスを調べ、書き換える

(0)大学などで作るなら、一気に(2)に進んでください。

(1)プロバイダに載せるのならば、telnetでサーバーと接続してください。

(2)ktermなどで perl -v としてください。その時ヴァージョンが 4.xxxの場合は、 perl5 -v や、jperl -v として見てください。そして、その中でヴァージョンが 5.xxxの物に関して、 which perlや which jperlなどとしてください。

(3)(2)で、 /usr/local/bin/perl5 (これはso-netの場合)などと出てきますので、それをCGIファイルの1行目に書き換えてください。
例えば /usr/bin/perl だった場合、 #!/usr/bin/perl にすればいいということです。

(4)(2)で不幸にしてヴァージョンが4.xxxの物しかなかった場合、
こちらをご覧ください。


2、.htaccessファイルによってCGI、SSIのファイルの説明をする。

この部分を変更しました

httpdサーバ(早い話が Web サーバ)は、まずディレクトリにある.htaccess ファイル(最初の"."を忘れずにね)を読み、そこに書いてある情報によって、どの拡張子が何の形式を表しているのか判断します。ただし、html,htm,gif,jpeg位は、デフォルトで設定されていますので、これらだけを扱っている限り(ただし、SSIは使用不可)は設定不要です。

ところが、サーバによっては既にある程度設定してある場合がありますので、一概に必要だとは言い切れません。したがって、以下の要領でサーバの設定を確かめて見てください。なお、プロバイダによってはその情報を会員に公開していますので、それをご覧になってもかまいません。


iw

2.1 何も設定しなくてもSSIが使えるかどうかチェック

まず、次のファイルを"hoge.shtml"という名前にしてサーバにアップしてみてください。

<html><head><title>SSI test</title></head>
<body> 現時刻は<!--#echo var="DATE_LOCAL"-->です。 </body><html>

そしてブラウザで見てみてください。それで「現時刻はFri,15-Feb-99 18:05:32 JST です。」みたいに表示されれば、無設定で SSI が使えます。ただし、普通は SSI を使用するファイルの拡張子は「.shtml」になります。

使えた場合は2.4へ使えなかった場合は2.2へ


2.2 SSIが使えるかどうかのチェック

当然ですが、プロバイダから「SSIは使えません」とアナウンスされている場合、どんなに頑張ってもSSIは使えません。その場合は
2.4をご覧ください。

とりあえず以下の".htaccess"をアップしてください。
AddType text/x-server-parsed-html .shtml
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .pl


それからさっきの"hoge.shtml"を見てください。そして「現時刻はFri,15-Feb-99 18:05:32 JST です。」みたいに表示されれば、SSI は使えます。うまく行った方は3に進んでください。もし「現時刻はです」と表示されてしまった場合は残念ながらSSIは使用出来ませんので2.4に進んでください。

2.3 エラーメッセージが出てしまった場合

2.2のように設定たら、エラーメッセージが出てしまう場合があります。この場合、個々に対処するしかないので、間違いが無い事を確認した後、プロバイダ等の管理者にメールで問い合わせるか、
私にメールを送ってください。
ただし、私はこんなページを開設しているとはいえまだまだ初心者です。私に頼っても解決するとは限りませんし、忙しい時期は返事が遅れるかもしれません。その辺はご了承ください。

2.4 SSIが無設定で使える場合およびSSIが使えない場合の.htaccess

SSIが無設定で使える場合、.htaccessは以下のようになります。このファイルをアップしておいてください。
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .pl


3に進む

3、アップの際の注意(文字コード変換他)

さて、CGIをFTPでアップしましょう。しかし、この際に少し注意が必要です。

UNIX の perl は普通 s-jis コードのプログラムは使えません。そのため、 euc に変換する必要があります。おまけに改行コードも変えなきゃいけません。ただし、FTPソフトによっては自動で変換してくれるものもありますので、その場合はこの部分は読み飛ばしてください。

UNIXには nkf というプログラムがあり、これでコード変換はできます。アップした後に漢字コード、改行コードをUNIX用に変換してください。使い方は、ktermなどで

# nkf -e < infilename > outfilename

とすることです。ちなみにオプション(-e)を-sにするとsjisに、-jにするとjisになります。

MS-WindowsでCGIを作成された方は、改行コードを以下のようにして変換します。ktermなどで

# cat infilename | tr -d "\015" > outfilename

としてください。

MacintoshでCGIを作成された方は、改行コードを以下のようにして変換します。ktermなどで

# cat infilename | tr "\015" "\012" > outfilename

としてください。



ところで、win版の nkf (enkf)(フリーソフト)は、なんとオプションで改行コードも変換してくれます(もしかしたらUNIXのもオプションで改行コード変換もしてくれるのかな?)。また、これのGUI化するためのソフトであるEazy nkfもあり、共に以下のサイトでダウンロード可能です。両者ともにフリーソフトです。

http://www.mirai.or.jp/~cow/cowsoftj.html

DOSの「nkf162d.lzhネットワーク漢字フィルター」がメインのプログラムで、Windows 32bitの「enkf3213a.lzh漢字変換環境 Easy Nkf32」がGUI化するためのプログラムです。最低限前者をダウンロードすることが必要です。

アップする直前に euc に変換し、オプションの 「\rを削除」にもチェックを入れて変換しておきます。こうすると、アップする前に文字コード、改行コードの両方が変換できるため、アップ後に変換する必要がなくなります。

で、アップする際の注意ですが、必ず ASCIIモードでアップしてください。perl は単なる文書と同じ扱いなので、当然ですね。


4、パーミッションを書き換える。

注:パーミッションについて分からなければ、先に
下に添付した文章を読んでください。

普通のファイルのパーミッションは 744 なんていうのが一般的です。でも、それだとプログラムは実行できないので、パーミッションを755 にする必要があります。パーミッションは、kterm などで

# chmod 755 count.pl

などとすれば変更できます。何をどう変更するかは私の場合は主プログラムに必ず書いていますので、それを参考にしてください。ちなみに、掲示板のように書き込む必要があるときは、766 や 666にする必要があります。


5、コンソール(ktermとか)でチェックする。

いきなりブラウザでチェックしてもいいですが、エラーがあった場合には、[500 Internal Server Error]としかでないので、何が悪いのかが分かりません。そこで、ktermなどでチェックをします。チェックの仕方は、

# perl -c count.pl

のようにします。こうして、

count.pl Syntax OK.

と出れば、大丈夫です。不幸にして

Scalar found where operator expected at count.pl line 12, near "$nkf"
(Missing semicolon on previous line?)
syntax error at count.pl line 12, near "$nkf "
count.pl had compilation errors.


みたいに出てくれば(この場合は、12行目付近に ; を付け忘れたのではないか、と言っていますね)、「12行目で、$nkf に近い所にエラーが出ているな」と分かり、そこを修正すればいいことが分かります。

でもたまにコンソールでは問題無かったのに、ブラウザでは[500 Internal server Error]と出るときがあります(私の作ったプログラムをそのまま利用するときには出ないとは思いますが)。そんな時は、

print "Content-type: text/html\n\n";

という1行をプログラムの先頭付近に入れ忘れたのだと思いますので、入れて見てください。
また、「パスを書き換えていなかった」という事もありますので、チェックして見てください。


6、その他

再配布、改変は、それぞれのプログラム内に記載されている条件を満たせば自由に行っていただいてかまいません。通常は特に連絡する必要はありませんが、印刷物として発行する場合は必ず事前に連絡してください。著作権うんぬんというより、つまらないバグがあったら嫌なので...。

あと、「こうしたらもっと良くなった」という事や、「バグがあります」などの情報は是非
お知らせください。


パーミッションについて

以下パーミッション(アクセス権)の説明を致します。

ktermなどで # ls -l などとすると、

-rwxr-xr-x 1 iida iida 6030 Dec 22 00:29 imagemap.cgi*

などと表示されます。ここで、"-rwxr-xr-x"の部分が「アクセス権」と呼ばれるものです。全部で10桁あり、1桁ごとに意味があります。順番に説明すると

桁数内容あてはまる時あてはまらない時
1ディレクトリかどうかd-
2管理者が読めるかどうかr-
3管理者が書き込めるかどうかw-
4管理者が実行出来るかどうかx-
5グループの人が読めるかどうかr-
6グループの人が書き込めるかどうかw-
7グループの人が実行出来るかどうかx-
8その他の人が読めるかどうかr-
9その他の人が書き込めるかどうかw-
10その他の人が実行出来るかどうかx-

「グループの人」はサーバーにログインしている他の人、「その他の人」はブラウザで見に来る方を意味します。(自分自身がブラウズする時も、その他に含まれます)

"-rwxr-xr-x"を解読してみよう

・これはファイルです。
・「管理者」はこのファイルを読み、書き込み、 実行することができます。
・「グループの人」は、このファイルを読み、 実行することができます。
・「その他の人」は、このファイルを読み、実行することができます。

アクセス権設定に使われるアルファベットと数字

chmod 755 passwd.cgi
という表現がありました。755とはなんでしょうか?
実はこれが上で説明しました"rwxr-xr-x"の部分を8進数で表現したものなのです。
一番左の数字は「管理者」の設定(2〜4桁目)
真ん中の数字は「グループの人」の設定(5〜7桁目)
一番右の数字は「その他の人」の設定(8〜10桁目)
を示します。

数字とアルファベットはこのようになります。
0 = "---"
1 = "--x"
2 = "-w-"
3 = "-wx" =1+2
4 = "r--"
5 = "r-x" =4+1
6 = "rw-" =4+2
7 = "rwx" =4+2+1

数字を当てはめてみましょう。
755はrwxr-xr-x
644はrw-r--r--
となります。

つまり、「chmod 755」は、「rwxr-xr-xに変更する」ということになります。




前のページに戻る

(c)1999 Shin Iida