前へ戻る

ちょっと物知り博士のちょこっと講座

第10回 続my ホームページを作ってみよう・CGIについて

8. CGI について

プロフェショナルWEBエンジニアになるためには 「CGI(common gateway interface)」 は避けて通ることはできません。 もちろん[CGI]をマスターしたからと言って必ずしも プロフェショナルWEBエンジニア とは呼べないでしょうが…。

システム総研のホームページを開いてみてください。 画面の左上にカウンターがついていますね。これは、このページがWWWサーバーにCALL がかかった回数を表示しているのです。 即ちシステム総研のホームページが何回見てもらったのかを示しています。
ここまでは、今まであちこちのWEBサイトを見た経験がある貴方なら、よーく知っていることです。

どんな方法を使っているんでしょうね。 1.ホームページがブラウザに表示される仕組み を見たらわかるように、WWWサーバーは要求があったページをクライアントへ送り出すだけ、クライアントのWEBブラウザは送られてきた HTML テキストを解析して、画面に表示する、あらかじめ作成された画像ファイルを画面上へ展開表示するだけの機能しかありません。
結局この一連の手順の中にはあらかじめ作られたテキストデータ、画像データを転送、表示する機能のほかにはないのです。
ブラウザ画面から入力した(FORM 機能を使えばホームページ画面から入力は出来ます。相手には伝わりませんが)数値を元に四則演算をする、 ブラウザ画面からお客さんのコードを入力してお客さんの住所を知る、等々、皆さんがコンピュータに期待している機能のほとんどが、html 、ブラウザ の機能には含まれていません。


種明かしをしましょう。
基本的な流れは上の図のように、WEBサーバーより受け取ったhtml テキストファイルを ブラウザが解析している途中に CGI を実行する記述があったとき、ブラウザはWEBサーバーにそのプログラムを実行する依頼電文を発行します。
WEBサーバーは依頼を受けたCGIプログラムを所定のフォルダ(通常html ファイルとは別の場所に格納されます)より呼び出して、指定されたCGIプログラムを実行するプログラムデーモンに処理を任せます。
処理結果を送信元クライアントに返す処理はCGIプログラムが行ないます。
クライアントのブラウザは、送信されてきた結果を、画面上に表示します。

[カウンタCGI プログラムを自分のホームページに使ってみましょう]

通常、レンタルスペースを提供しているプロバイダは貴方が設置するホームページのアクセスカウンタ用のCGI を用意しています。そして、面倒くさいことに、アクセスカウンタ用CGI のhtml での記述の仕方は 夫々のプロバイダによって異なります。
これはあたりまえのことで、アクセスカウンタ用CGI といっても 共通した取り決めがあるわけではなく、夫々のプロバイダがサービス用に独自に作ったものなので、違いがあるのが普通です。

ISI が契約しているOCNでも当然アクセスカウンタ用CGIはサービスとして用意されています。
が、これを使用しないで、今回は、社内のWEBサーバーを使ったホームページの作成練習ですから、筆者が作成した(パチったというのが正しいか) カウンタCGI を使ってみましょう。

作成したホームページのカウンタを表示したい任意の個所の html ソースに次の行を追加してみてください
<TR>
<TD height="12" align="center" width="138"><!--#exec cgi="/cgi-local/counter_ssi/counter.cgi"-->
</TD>
</TR>

さらに、この行を入れたページの ファイル拡張子を .htm から .shtml に変更してください。
訂正後、サーバへアップロードして、ブラウザから見てください。 カウンタが動いているはずです。
ちょっと余談ですが、このCGIプログラムはちょっと特殊なCGIでSSIと呼ばれているものです。
詳しいことは筆者も勉強不足なので説明しかねます。 SSI プログラムを使う場合は、Html ファイルの拡張子を .shtml にするんだとだけ覚えておいて下さい。

さて、先に使った、カウンタCGIプログラムは、他のプロバイダで使えるかどうかはわかりません。
ISI が契約している OCNのホスティングサービスでは、このカウンタCGIプログラムが(SSI)使用できますが、一般的に、SSIは使用を許されていません。 従って貴方が他のプロバイダと契約してホームページを更改する場合は、そこのCGI の規則を調べて、規則に合うようにHTMLを 書き換える必要があります。
そうなんです、カウンタCGIはプログラムとしては単純なんですが、プロバイダごとに用意してあるのでかえって煩わしいのです。

[CGI プログラムはどんなときに使用するのでしょうか]

前に述べたように、WWWサーバーは要求があったページをクライアントへ送り出すだけ、クライアントのWEBブラウザは送られてきたHTML テキストを解析して、画面に表示する、あらかじめ作成された画像ファイルを画面上へ展開表示するだけの機能しかありません。
ですから、 さっきの アクセスカウントを ホームページに表示したい、刻々と変わる時刻を表示したい、ホームページを見た人の意見を収集したい、投稿してくれた内容に手を加えて返信したい、掲示板を作りたい、等々、サーバーの助けを借りないと実現できないものは全て、CGI にたよらねばなりません。

[CGI プログラムを作ってみましょう]

プログラム言語習得の王道は 「真似る」「慣れる」「繰り返す」 といいます。 細かい説明を長々と聞くよりは(長々としているのは・・ワシだ!)実際にプログラムを作ってみるほうが早く覚えられます。
実習の前に常識として知っておいて欲しいことだけ述べます。

CGI プログラムは 一般的に PERL という言語で記述します。 他にも VB、C、C++ 等サーバーで動作可能な言語なら何でもいいのですが、現在は、CGI といったらPERLで作成するのが一般的です。

CGI プログラムは WEBサーバーの特殊なフォルダに置く必要があります。 Html のファイルとは
別の場所に置くのが一般的です。
ISI の契約している OCN ホスティングサービスでは/local-cgi へユーザーCGIを置くように指定されます。
そのフォルダには他のhtmlファイルは置いてはならないと規定されています。
/local-bin を指定しているプロバイダもあるようですが、筆者は見たことがありません。

CGIプログラムは、html よりcall されるようにも作れますし。 ブラウザから直接呼ばれて単独で動作するようにも作れます。どちらの形式にするかは、何をやらせるのかによって決められるもので、特にその形式に ついての規則なんかはありません。

CGI のプログラム中に html 形式で記述することも出来ます。 またCGI プログラムから 別のCGI
プログラムを呼ぶことも出来ます。

CGIプログラム用に特別のエディタ、開発環境はありません。普通のテキストエディタ(WIN のメモ帳で充分) でダイレクトに記述します。

次のことは実際にテストをするときに発生する間違いやすいことですが、あらかじめ基礎知識として持って 置いて欲しいものですが
@ WINDOWS と LINUX(UNIX) のテキストの改行コードが異なる
( win では 最後 CR,LF だが LINUX では CRのみ)ので、出来上がったプログラムをサーバーへ転送して、ブラウザから実行しようとすると、 INTERNAL ERROR となります。これは、FTP プログラムでの転送モードを設定することで解決します。
html 、 CGI 、 トランザクションファイル: アスキーモード
gif,jpg : バイナリ-モード

A WIN とLINUX では漢字コードが異なるので、日本語を取り扱う CGIプログラムは JPERL で漢字変換を施す こと。

B ISI の社内サーバーを使ってテストをするのは、一向に差し支えないけれど、作成した CGI プログラムを いきなり外部のサーバーに転送することは絶対にしないこと。

LINUX(UNIX) サーバーはアクセス及びエラーの全てのログが記録されるので、もし自分のCGIプログラムにバグが あったら、長いERROR LOGがプロバイダのサーバーに吐き出されてしまいます。 もしかしてシステムをとめてしまうような重大なエラーを含んでいるかもしれません。
どんな小さな、簡単な修正でも必ず、社内のサーバーでテストして完全動作するようにしてから、公式サーバーへアップロードしましょう。

C またISI の社内サーバーへUPLOAD したあと、LINUX のサーバーで直接perl スクリプトを動作させて、プログ ラムのチェックも出来ます。 シンタックスエラーがなくなるまで繰り返してください

cd /home/httpd/cgi-local/gori で自分のCGIが格納されているフォルダへ移る
perl gorio.cgi でperl が起動されて gorio.cgi の解析と実行を行なう
エラーがあれば行番号をつけて表示してくれる

D LINUX(UNIX) のシステムの大きな機能として ファイルの権限があります。 Owner, groupe, guest に対して 夫々permissionが指定されます。このユーザーpermission の細かいことはいずれ LINUX の学習会で説明します。
ここでは、CGI プログラムをサーバーに転送したとき必ずファイルのpermission を指示する必要があることだけを 知っておいて下さい。
実行プログラム 755
実行プログラムで読み書きするトランザクションファイル 666
それ以外(html gif) 644
プログラムを格納するフォルダ 777
このpermission の指定は最初にファイルをアップロードしたときに指定するだけでよく、再ロードの時には必要ありません。