ホームページの作り方(上級編)

1,C G I
2,P e r l
3,アクセスカウンター(数値編)
4,アクセスカウンター(ログ編)

1,CGI

MSIE3.0
NN3.0

CGIはSSIと同様にブラウザが実行するものではなくサーバーが行うものです。
そのため、すべてのブラウザで動きます。

CGIを使うとプロバイダーで自分のプログラムを実行することができます。
しかしプログラムの書き方次第では、ハッカーに侵入されたり、
サーバーをダウンさせてしまうかもしれません。
つまり、大変危険なものです。

そのためほとんどのプロバイダーでは、CGIを禁止しています。

CGIのプログラムはC言語、Perl、シェルスクリプトなどが一般的です。
その中でもPerlがもっとも一般的です。
以下にPerlについてのサイトを紹介します。

perl texinfo perlの文法書・リファレンスマニュアル
N88BASICで食べるperlらいす BASIC経験者がperlを学ぶためのページ

また、CGIについてのサイトも紹介します。

HTMLの初歩からCGIまで (X Link) 埼玉大学のページ、CGI,SSIまで解説
インタラクティブページの作り方 CGIやSSIについて細かく説明されている
CGI について CGIについて、簡潔に書かれている。
Make the most of your WWW server アクセスカウンター,Mapなどを中心に解説
インターネット研究会 CGIやSSIに限らず、internet全般についてのLink集

ご自身でPerlプログラムを作るときはPerlの場所を知っておく必要があります。
インターネットWINでは

#!/usr/local/bin/perl

にあります。このプログラムの実行は

1,単独で実行させる
2,SSIを使ってホームページに埋め込む

以上の2種類があります。 1は<A HREF="cgi-bin/soft.cgi">というLinkのようにします。
2は<!--#exec cmd="cgi-bin/soft.cgi"-->
<!--#exec cgi="cgi-bin/soft.cgi"-->のどちらかで実行できます。

なお、インターネットWINでは、Perlやシェルスクリプト、CによるCGI
プログラムを実行できます。(要登録 無料)
また、ファイル名を指定するときはcgi−binの部分をael−binに
変更する必要がありました。(当サイトの場合)


改行コード

CGIプログラムで注意したいのが、「改行」です。UNIXの改行は16進法で(0A)
なのですが、Windows,Dosでは(0D)(0A)、Macでは(0D)になっています。
このため、「改行コードの変換」を行う必要があります。

しかし、FTPでCGIファイルを送る際に、バイナリ形式で送るのではなく
ASCII形式で送るだけで「改行コードの変換」は行われてしまいます。

たいていのFTPの転送形式はデフォルトでAutoになっていて
拡張子がhtml,htm,txt,batなどはASCII形式、
そのほかをバイナリ形式で送るようになっています。
ここで、ASCII形式で送るものに「cgi」を加えれば
転送モードを気にしなくても済みます。

上上へ


2,Perl

MSIE3.0
NN3.0

PerlはCGIを実行するためのスクリプトの一種です。
これを実行するためには、サーバーにPerlが
インストールされている必要があります。

Perlのプログラムの最後には「;」をつける必要があります。

プログラムの最初に、

#!/usr/local/bin/perl

と、Perlの(DISK内の)位置を指定します。
ただし、Perlの場所はプロバイダーによってまちまちです。(今のはインターネットWIN)

そして、1行あけてから次のソースプログラムを書きます。

●変数

環境変数を得るためには、

$a = $ENV{'DOCUMENT_NAME'};

を使います。{ }内には、SSIで用いた変数を使います。
すると、$aに変数データが格納されます。
変数は、定義する必要はなく、BASICのようにいきなり使っていいのです。
も序も数字も区別なく、ただ、$〜とすればいいのです。

●表示

表示するには、ただ、print ””とすればいいのです。
変数も、print $aとするだけです。

ほかに少し高度な方法としてC言語のsprintfのような使いかたもできます。

printf "数字%d 文字%s 4桁の数字",$a,$b,$c;

これを実行すると$aが数値として、$bが文字、$cが4桁の数値として表示されます。
たとえば

$a=122;		$b="abcd";	$c=3.1;
printf "数字%d 文字%s 4桁の数字",$a,$b,$c;

結果

数字122 文字abcd 4桁の数字3.100

これは意外と便利です。

●ファイル

open(DAIMEI,">>test.txt");

これで、test.txtに書き継ぎする宣言ができました。
>>の部分は、ファイルのモードを指定します。
>>は、書き継ぎ、
>は、もとのデータを消して書き込み
何も書かないと、読み込みになります。

このファイルには、DAIMEIという単語でアクセスします。

print DAIMEI + ($a);

これで、ファイルにデータを書き込めます。

$a = <DAIMEI>;

これで、ファイルからデータを読み込めます。

上上へ


3,アクセスカウンター(数値編)

MSIE3.0
NN3.0

この機能を利用するにはプロバイダーがCGIとSSIの使用を許可
している必要があります。
使用を許可しているプロバイダーは全体の30%程度です。

プロバイダーがインターネットWINの方は
http://www.win.or.jp/~m-agawa/COUNTER/Homepage_Counter.html

に具体的・詳細に載っているのでそちらを参考にした方がいいでしょう。

以下は単に数値を表示する簡単なPerlプログラムです。
これらのファイルをまとめたものは

counter.lzh(0.4KB)

を利用してください。

●kazu.log

このファイルには訪問者の番号を記録させます。
「メモ帳」、「mule」、「クラリス」などで 0 を書き込んで置いてください。

●kazu.cgi

これが、プログラム本体です。

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
open (IN,"kazu.log");
$k = <IN>;
close (IN);
$k ++;
open (OUT, ">kazu.log");
flock(OUT,2);
printf OUT "%d",$k;
close (OUT);

printf "%d",$k;
exit;

●index.html

これは、index.htmlにこだわることはありません。
つまり、アクセスカウンターをつけたいページにSSIを埋め込むという作業が必要です。
埋め込むコードは次のようになります。

<!--#exec cgi="/cgi-bin/kazu.cgi"-->

CGIを実行すると、この部分は実際には数値に変わります。

●.htaccess

アクセスカウンターは通常、トップページに置くので、拡張子がhtmlでも
実行するようにする必要があります。
そこで、「.htaccess」ファイルをおきます。

「.htaccess」ファイルの中身は次の通りです。

Addtype text/x-server-parsed-html .shtml
Addtype text/x-server-parsed-html .html

これは、拡張子が「shtml」と「html」の両ファイルともSSIを使うということを
サーバーに伝えるものです。

これらのファイルができたらアップロードします。
ディレクトリーの構造は次のようになります。

ディレクトリー構造1

●ファイルモード

kazu.cgi kazu.log .htaccessについてはファイルのモードを変更する必要があります。
CuteFTP Fetchではファイルのモードが変更できます。
モードの番号は次のようになっています。
100の位・・あなたに対するモード
 10の位・・UNIXを使っている人
  1の位・・外部の人
そして、数字は8進法で表し、4は読み込み可能 2は書き込み可能
1は実行可能です。それらを足した値がファイルの番号になります。
例えば755はあなた自身には7,他の人には5となっています。
あなたは、7=4+2+1なので、読み書き実行が可能です。
他の人は5=4+1なので読み込みと実行が可能で書き込めません。

kazu.cgiは「755」に、kazu.logは「777」に
.htaccessは「744」に設定します。


確認

以上で完了です。
index.htmlを読みとると数値が表示され、Reloadするたびに
数値が増えるはずです。 もし、うまく行かないときは次の原因が考えられます。

●ファイルモード

kazu.cgiは「755」に、kazu.logは「777」に
.htaccessは「744」に設定します。

●ディレクトリー

.htaccessとindex.htmlは同一ディレクトリーに
kazu.cgiとkazu.logはその上のcgi-binディレクトリーにアップロードします。
もし、cgi-binディレクトリーをindex.htmlの上に置けないときは

<!--#exec cgi="cgi-bin/soft.cgi"-->

の、ディレクトリーの指定を変える必要があります。

また、kazu.logとcome.cgiは同一ディレクトリーに置いてください。

●Perlソフトが#!/usr/local/bin/perlにない

Perlソフトはサーバーによって違います。
これは、サーバーの管理者に尋ねてください。

もし、場所がわかったらcome.cgiの最初の行を変更してください。

●CGIとSSIの使用が許可されていますか?

CGIは70%のプロバイダーで禁止されています。
また、許可されているとしても登録する必要があったり
呼び出し方がcgi−binではなくusername−binだったりします。
これもプロバイダーに尋ねてください。

上上へ


4,アクセスカウンター(ログ編)

MSIE3.0
NN3.0

繰り返しになりますが、この機能を利用するには
プロバイダーがCGIとSSIの使用を許可している必要があります。

アクセスカウンター(数値編)は、数値を記録して行くだけだったのですが
これをもっと発展させて数値のカウント+クライアント情報の記録という
機能を持ったSoftがあります。
前作よりバージョンアップし、どのページを見たのかということまでわかります。

これらのファイルをまとめたものは

counter2.lzh(0.9KB)

を利用してください。

●kazu.log

先ほどと同じです。 0とだけ入力してください。

●come.log

訪問者の訪れたカウント値、時間、ホスト名、ブラウザ、リンク元、見たページが書き込まれます。
中身は空白にします。

●come.cgi

プログラムは次のようになります。
先ほどのプログラムにユーザー情報を書き込む部分が追加してあります。

#!/usr/local/bin/perl

print "Content-type: text/html\n\n";
open (IN,"kazu.log");
$k = <in>;
close (IN);
$k ++;
open (OUT, ">kazu.log");
flock(OUT,2);
printf OUT "%d",$k;
close (OUT);

printf "%d",$k;

$a = $ENV{'DATE_LOCAL'};
$b = $ENV{'REMOTE_HOST'};
$c = $ENV{'HTTP_USER_AGENT'};
$d = $ENV{'HTTP_REFERER'};
$t = sprintf("@%d\r\nA%s\r\nB%s\r\nC%s\r\nD%s\r\n",$k,$a,$b,$c,$d);
open(LG,">>come.log");
flock(LG,2);
printf LG "$t";
close(LG);
exit;

●page.cgi

どのページをいつ見たのかを調べるプログラムです。

#!/usr/local/bin/perl

$a = $ENV{'DOCUMENT_NAME'};
$b = $ENV{'DATE_LOCAL'};
$e = sprintf("E%s\r\nF%s\r\n",$a,$b);
open(IN,">>come.log");
flock(IN,2);
print IN "$e";
close(IN);
exit;

●index.html

先ほどと同じです。ファイル名だけ変更しています。

<!--#exec cgi="/cgi-bin/come.cgi"-->

※添付のindex.htmlファイルを置くというのではなく
カウンターを置くページに今の記述をするということです。

●sonota.html

すべてのHTMLファイル内に以下の記述をします。

<!--#exec cgi="/cgi-bin/page.cgi"-->

※添付のsonota.htmlファイルを置くというのではなく
すべてのHTMLファイルに今の記述をするという意味です。

●.htaccess

先ほどと同じです。

これらのアップロード先のディレクトリーは次のようになります。

ディレクトリー構造2

ファイルモードは次のようになります。

come.log 777
kazu.log 777
.htaccess 744
come.cgi 755
page.cgi 755

実行するとcome.logには次のように記録されます。

@4
AThursday, 11-Sep-97 11:00:00 JST
Bppp12345.win.or.jp
CMozilla/2.0 (compatible; MSIE 3.02; Update a; Windows 95)
Dhttp://www.yahoo.co.jp/Science/Space/Institutes/
East.html
FThursday, 11-Sep-97 11:00:10 JST
East1.html
FThursday, 11-Sep-97 11:00:20 JST
@5
AThursday, 11-Sep-97 12:34:56 JST
Bppp54321.win.or.jp
CMozilla/2.0 (compatible; MSIE 3.02; Update a; Windows 95)
D

専用解析Soft

これを解析するSoftがあります。

visitor3.exe(50KB)

ご利用の際はVisual C++(47KB)の使用承諾書に同意してください。
これを用いることによってどの時間にどれだけの訪問者があったかを一覧できます。

専用解析Soft

画面は3.04のものです。

Version:3.07
 制作日:1998/1/20(Tue)

3.00→3.01の変更点
 ・訪問Noを設置
 ・「ブラウザ」で「MSIE調査」を追加
 ・「ページ調査」で総参照ページ数を表示

3.01→3.02の変更点
 ・「MSIE調査」が「シェア調査」に名称変更し、より詳しく調査
 ・訪問Noでいつからいつを調査したかを表示

3.02→3.03の変更点
 ・「シェア調査」が円グラフで表示されるようになった
 ・「内容」や「訪問者No」をタグを用いて見やすくした。
 ・ファイル名を指定しないで「訪問者No」や「シェア調査」を実行したときに
  「不正な処理」をするバグを解決(0での減算を行ったため)
 ・メイン,ページ調査の「時間」に「詳細」を追加、「時間」は「時間帯」に名称変更

3.03→3.04の変更点
 ・「ページ別アクセス日」に0日から表示されるバグを修正
 ・Link,Host,シェア,時間調査に合計のアクセス回数を表示

3.04→3.05の変更点
 ・ランキングの機能が加わりました。

3.05→3.07の変更点
 ・年号が4桁で渡されると日付が表示できないバグを修正
  年号は2桁,4桁両方に対応します。
3.07→3.08の変更点
 ・メールアドレス,URLを変更しました。
 ・「訪問者」での日付の表示部分を修正

なお、このCGIで、メニューで3番目の「ページ調査」が使えるようになりました。

上上へ


戻るNoteに戻る