はじめに
CGIを利用するには、 転送モードやパーミッションの設定など、少し知識が必要です。CGIやサーバ(ホームページなどを置いているコンピュータ)についての知識が不十分だと、 図らずもセキュリティーホール(セキュリティー上の弱点)を作ってしまったり、 最悪の場合サーバのダウン(サーバが正常に動作しなくなること)さえ引き起こします。
とは言っても最初は誰でも初心者です。 ここではCGIについて最低限の基本的なことを少しだけ説明していますので、 ちょっとでも勉強していってください。
注1:ここでは多くのプロバイダが標準的に使用しているUNIX系サーバーを前提に説明しています。
注2:当倶楽部で提供しているCGIはUNIX系サーバーでの動作を前提としています。
CGIってなんだろう
CGI(Common Gateway Interface)とは、インターネット経由などでサーバー上のプログラムに何らかの処理を行わせ、 その結果をホームページなどに反映するインターフェース(規格・方法)のことです。CGIを利用することによって、入力フォーム(ホームページの入力欄など)に入力された内容を あらかじめ指定しておいたメールアドレスにメールを送信させたり、ホームページへの来訪者数をカウントする アクセスカウンタなどを実現することができます。
そういった処理をさせるためのプログラムをCGIプログラムと呼び、 CGIプログラムはPerlやC言語といったプログラム言語などで 記述されます。
(CGIプログラムを「CGI」「CGIスクリプト」と呼ぶこともあります)
CGIが使えるか使えないか
CGIは使い方によってはセキュリティーホールの原因などに なることがあります。そういったことから、サーバによっては CGIの使用を許可していないところもあります。CGIの使用が許可されているか いないかは、ホームページを置いているサーバの管理者(加入しているプロバイダなど)にお尋ねください。サーバでCGIの使用を許可していない場合は、残念ながら ご自分のホームページディレクトリにCGIを設置することはできません。 ただし、CGIの使用が許可されていない場合でも、 別のサーバにあるCGIを自分のホームページから呼び出すことは可能です。 パブリックカウンタ(他のサーバに設置しているカウンタCGIを 呼び出すことで実現することのできるアクセスカウンタ)などがその例です。
また、CGIが使用できる場合はCGIプログラムの設置場所 (サーバ上でファイルを置くディレクトリ)にも注意してください。 サーバによっては設置場所を指定している所もあります。
設定ファイル(.htaccess)
サーバによってはCGIを使うために、ホームページディレクトリに .htaccessという設定ファイルを置いておかなければならないことがあります。 .htaccessが必要かどうかはサーバ管理者に尋ねてください。.htaccessが必要な場合は、Windowsならメモ帳など、MacintoshならSimpleTextなどのエディタで 以下の1行を書き、.htaccessという名前で保存した後、ASCII(テキスト)モードで ホームページディレクトリに転送してください。
AddType application/x-httpd-cgi .cgi
指定しなきゃだめ
CGIプログラムの先頭行でCGIを実行するために、 多くの場合ある指定をする必要があります。BooCGIプログラムのページでご提供しているような Perlで記述されたプログラムですと、 #!/usr/local/bin/perl というような記述があると思います。 この #! 以降の部分でCGIプログラムを処理するためのプログラム (実行プログラムと言います)のパス(どこにあるかを指定する道筋のこと)を 指定しているのです。
これがないとサーバはどの言語として処理したらいいのか分からずに エラーとなります。
また、日本語を認識するようにしたJperlというものがあり、 これが導入されているサーバの場合、通常の(日本語に対応していない)Perl用に作られたプログラムは 正常に動かないことがあります。そういった場合にはプログラムの先頭行に-bというオプションを指定することで 正常に動くようになります。 これは-bというオプションを指定することでJperlがPerlと同じ動作をするようになるためです。
例)#!/usr/local/bin/perl -b
なお、CGIプログラムは、Windowsならメモ帳など、MacintoshならSimpleTextなど のエディタで開いて編集します。
転送時の注意
CGIをサーバへ転送する時に注意しなければならないことがあります。 それは、必ずASCIIモード(テキストモード)で転送するということです。 (C言語で書かれたCGIなどの場合、例外もあります)転送にはバイナリ(生データ・RAW)モードとASCII(テキスト)モードがあり、 バイナリモードは主に画像などのような文字以外のデータを転送する際に利用し、 ASCIIモードは主に文字データを転送する際に利用します。
転送の方法はFTPソフトにより異なりますので、お手 持ちのソフトでご確認ください。ASCIIモードで転送しなければならないCGIを バイナリモードで転送すると サーバがCGIプログラムの内容を理解できなくなってエラーとなりますので、 それらのCGIプログラムは必ずASCIIモードで転送してください。
また、一般的に拡張子が .pl のファイルも内容はCGIプログラムで すのでASCIIモードで転送します。
パーミッション
サーバ上では各ファイルに、「ファイルの作者・指定された グループ・それ以外の外部」のそれぞれに対し、「ファイルの読み込み・ ファイルへの書き込み・ファイルの実行」という3種類の 権限が指定されます。それがパーミッション(アクセス権限)です。
例)AさんがBさんに掲示板プログラムを貰ったとします。A さんは貰ったプログラムをサーバ上のホームページで使用し、 その掲示板にCさんが書き込みをしたとします。
このとき、ファイルを転送し、サーバ上にファイルを作った のはBさんではなくAさんですから、ファイルの作者はAさんと なります。そしてCさんは外部となります。Aさんも、ホームペ ージで掲示板に書き込みをする時は、読む側となりますので外部 となります。つまりAさんはFTPなどでファイルを操作してい る時は作者となり、ブラウザでホームページを見ている時は外部 となります。
グループというのはサーバ管理者により指定された一定のグル ープを指しますので、ホームページやCGIでは無視して構いま せんが、一般的にグループのアクセス権限は外部のアクセス権限 と同一にします。
ただし、サーバによっては、同じサーバのユーザを同 一のグループにしてあったり、アカウント頭文字のアルファベッ トごとにグループとして設定してあったりする場合があります。
そういった場合、グループと外部を同じパーミッションにしてお くと、同じプロバイダのユーザが、FTP接続の際に自分のデ ィレクトリ内を覗くことができてしまうことがあります。 こういった場合はグループのパーミッションを常に0にしておきます。 (例:705など)
パーミッションの設定
パーミッションの設定は「ファイルの作者・指定されたグルー プ・それ以外の外部」のそれぞれを1桁ずつの数字で表します。 読み込み権は4・書き込み権は2・実行権は1として、 それぞれの権限を足した数字を使用します。作 者 = 読み込み権・書き込み権 = 4+2
グループ = 読み込み権 = 4
外 部 = 読み込み権 = 4
のように権限を設定する場合は、644と表します。
ここでは数字で表す方法で説明しますが、他に 「ファイルの作者・指定されたグループ・それ以外の外部」について、 それぞれ読み込み権をr・書き込み権をw・実行権をxとして、 rwx rw- rw- といったように表す場合もあります。
パーミッションは大抵の場合、デフォルトでは644となって います。HTML文書や画像などは、普通この644に設定され ていれば問題ありません。
さて、CGIプログラムですが、CGIプログラムのパーミッ ションは755にします。これは作者のみ、読み書きおよび実行 が可能で、それ以外は読み込みと実行が可能であることをあらわ しています。CGIはプログラムですから実行権がないと動作し ないわけです。
パーミッションの設定方法はFTPソフトにより異なりますので お手持ちのソフトでご確認ください。
CGIプログラムの改変
CGIとCGIを記述している言語についてある程度理解している方以外は、 ReadMeファイル等で設定として指定されている部分以外のCGIプログラムの 改変は、できるだけ行わないようにしましょう。最後に
CGIプログラムは利用する前に、パーミッションの設定や転送方法、 あるいはパスの記述の仕方などといった、ある程度の知識を身につけた上で、 自分の責任で設置し、自分の責任で利用・管理してください。 インターネットでは個々の作者自身が責任をもってサイトを運営することが 大切ですよね。個性のあるよりよいサイトを運営してください。