前へ戻る

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

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

[サンプルとして 第10回であげたカウンタCGIプログラムをやりましょう。]

1. 自分のコンピュータに 任意の名前でフォルダを作成します

2. そのフォルダへHP_02のE:\CGItestlocal\cgi-local\counter\ から counter_ssi のフォルダをコピーしてください

3. \counter_ssi\cgi-bin\counter.cgi をテキストエディタ(メモ帳でも何でもいいです)で開いてみてください
これがアクセスカウンタにCGIプログラムです。 次にそのリストを表示します
#!/usr/local/bin/perl
########################################################################
#管理者パスワードを設定する。
#counter.cgi?pass=パスワード&set=カウント値で現在のカウント数をセット
$passwd = 'passwd';
#カウント用のファイル名とここの"cnt"の名前を同じにする。
$cnt_file = 'cnt';
#0から9のGIFファイルの位置を指定する。
$img_path = '/counter_ssi/img/';
########################################################################
&frmdec;
$pass = $form{'pass'};
$set = $form{'set'};
if ($pass eq 'passwd') {
&setup;
exit;
}
open(fp,"$cnt_file");
$cnt = <fp>;
close(fp);
$cnt = $cnt + 1;
open(fp,">$cnt_file.tmp");
print fp $cnt;
close(fp);
rename("$cnt_file.tmp", $cnt_file);
print "Content-type: text/html\n\n";
if($cnt < 100000)
{
print "<IMG SRC=\"${img_path}0.gif\">";
}
if($cnt < 10000)
{
print "<IMG SRC=\"${img_path}0.gif\">";
}
if($cnt < 1000)
{
print "<IMG SRC=\"${img_path}0.gif\">";
}
if($cnt < 100)
{
print "<IMG SRC=\"${img_path}0.gif\">";
}
if($cnt < 10)
{
print "<IMG SRC=\"${img_path}0.gif\">";
}
foreach (0..length("$cnt")-1)
{
$num = substr($cnt,$_,1);
print "<IMG SRC=\"$img_path$num.gif\">";
}
sub setup {
open(fp,">$cnt_file");
print fp "$set";
close(fp);
print "Conternt-type: text/html\n\n";
print <<EOF;
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<TITLE>カウンターセットアップ</TITLE>
<HEAD>
<BODY>
カウント値を$setに設定しました。
</BODY>
</HTML>
EOF
}
sub frmdec
{
$buffer = $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);

foreach $pair (@pairs)
{
local($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$form{$name} = $value;
}
}
4.このCGI プログラムを社内サーバーへアップロードする時の フォルダ名を決めてください

/home/httpd/cgi-local/achan
ここの部分です。 夫々の人のNICNAME でいいでしょう。

3.のプログラムソースのうち $img_path = '/achan/img/';
に修正しておきます。

5.このカウンタCGI を呼ぶ html (貴方のホームページ)をhomepage builder で開いて、CGIをcallする個所を修正します
<TR>
<TD height="12" align="center" width="138"><!--#exec cgi="/cgi-local/achan/counter.cgi"-->
</TD>
</TR>

counter.cgi の名前も任意に変えてもらってよろしい。

6.FTP プログラムを起動して、FMV_04 へ接続してください

7.貴方の html をアップロードしてください

8.つづいてサーバーの方のフォルダを cgi-local にして、4.で決めたフォルダを作成してください。 作成したフォルダはpermissionを777 にしておいて下さい

9. 作成したフォルダを開いて、自分のコンピュータの \counter_ssi\cgi-bin\ から counter.cgi と cnt
(トランザクションファイル)をアップロードしてください。(このとき転送モードに気をつけます)
アップロードしたcounter.cgi と cnt のpermission を 夫々 775、 666 に設定してください

10. サーバーの方のフォルダはそのままにして、自分のコンピュータの \counter_ssi\ から img フォルダを 全てアップロードします
このフォルダ(/home/httpd/cgi-local/acahn/img)の中のファイルのpermissionはさわらなくてもいいでしょう

11. これで完了です。セッションを切断し、ブラウザから、自分のホームページをブラウズしてみてください。
うまいこと アクセスカウンタが出ていますか。 それともエラーになりましたか。
エラーになった人は原因を追求して、再度やってみてください
cd /home/httpd/cgi-local/achan として
perl counter.cgi としてみて、正常動作するか確認するのも一つのバグ潰しです。

また、ISI 社内サーバーの エラーログは vi /var/log/httpd/error_log で見ることが出来ます。

[ CGI についてのあとがき ]

PERL はCGI を作成するには 必要充分な強力な言語です。 インタプリタであって、手続き型言語ですので、 VBになれている人には最初はとっつきにくいですが、慣れれば、現在得意としている言語同様いろいろな ケースで使用できると思います。

Perl で作られたCGIプログラム はインターネット上で数多く出回っておりますし、ISI の中にも HP_02 の e:\CGItestlocal\ の中、e:\cgitestsoc の中にあれやこれや集めています。
最初はわからんなりに人まねをしてとにかく数をこなすことです。習うより慣れろのことわざどおり 慣れることが近道でしょう。(~~) 釈迦に説法になりましたな。

日本のインターネットの現状を考える の章でちょっとだけ触れましたが、向こう3ヵ年の間に、インターネットの普及は爆発的なものになると思います。
インターネットのインフラ、設備は高度に整備され、一部の先進企業は、充分なコンテンツで先進的な インターネットを享受できるだろうけれども、残された、おおよそ 5000万人の人は、置いてきぼりを食う だろうと想像します。その原因は、インターネットの使い方、学習方法を含めたコンテンツの貧弱さにある だろうと思われます。

筆者が、ISIの 技術者に望むことは、この5000万人の人の福音となるように、コンテンツを充実していくことです。
多分ここ2/3年の間は、いまクラサバの形態で考えていることの全てをWEB に置き換えて考えてみてもあながち間違いではないと思っています。

たとえば、生産管理システムにおける、部品表のデータベースをWEBで検索できるようにするにはどうするか。
生産の指示はいまペーパーで出力しているがWEBで指示できるようにならないか。
部品、材料を購入するのに、WEB にならないか、等々。

生産管理にとどまらず、日常接していることを、WEB に置き換えたらどうなるかを考え、モデルを作って形に表してみる。
もちろん今すぐにWEBに置き換わる事象ばっかりではないけれども、常に考える訓練をすることは非常に重要なことだと思う。

それから後一つ、コンテンツばっかりの充実では片手落ちで、インフラの充実とコンテンツの充実の歩調を合わせて、受け皿としてのプロバイダー(名乗りを上げるあげないは別にして)としてのハード(サーバー、回線)の充実も優先課題のうちの一つだ。 そして、このハードの充実は、やはり UNIX(LINUX) の知識、技術習得に帰着すると考えています。