1,C G I |
2,P e r l |
3,アクセスカウンター(数値編) |
4,アクセスカウンター(ログ編) |
○ | |
○ |
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」を加えれば
転送モードを気にしなくても済みます。
○ | |
○ |
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>;
これで、ファイルからデータを読み込めます。
○ | |
○ |
この機能を利用するにはプロバイダーがCGIとSSIの使用を許可
している必要があります。
使用を許可しているプロバイダーは全体の30%程度です。
プロバイダーがインターネットWINの方は
http://www.win.or.jp/~m-agawa/COUNTER/Homepage_Counter.html
に具体的・詳細に載っているのでそちらを参考にした方がいいでしょう。
以下は単に数値を表示する簡単なPerlプログラムです。
これらのファイルをまとめたものは
を利用してください。
このファイルには訪問者の番号を記録させます。
「メモ帳」、「mule」、「クラリス」などで 0 を書き込んで置いてください。
これが、プログラム本体です。
#!/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にこだわることはありません。
つまり、アクセスカウンターをつけたいページにSSIを埋め込むという作業が必要です。
埋め込むコードは次のようになります。
<!--#exec cgi="/cgi-bin/kazu.cgi"-->
CGIを実行すると、この部分は実際には数値に変わります。
アクセスカウンターは通常、トップページに置くので、拡張子がhtmlでも
実行するようにする必要があります。
そこで、「.htaccess」ファイルをおきます。
「.htaccess」ファイルの中身は次の通りです。
Addtype text/x-server-parsed-html .shtml Addtype text/x-server-parsed-html .html
これは、拡張子が「shtml」と「html」の両ファイルともSSIを使うということを
サーバーに伝えるものです。
これらのファイルができたらアップロードします。
ディレクトリーの構造は次のようになります。
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ソフトはサーバーによって違います。
これは、サーバーの管理者に尋ねてください。
もし、場所がわかったらcome.cgiの最初の行を変更してください。
CGIは70%のプロバイダーで禁止されています。
また、許可されているとしても登録する必要があったり
呼び出し方がcgi−binではなくusername−binだったりします。
これもプロバイダーに尋ねてください。
○ | |
○ |
繰り返しになりますが、この機能を利用するには
プロバイダーがCGIとSSIの使用を許可している必要があります。
アクセスカウンター(数値編)は、数値を記録して行くだけだったのですが
これをもっと発展させて数値のカウント+クライアント情報の記録という
機能を持ったSoftがあります。
前作よりバージョンアップし、どのページを見たのかということまでわかります。
これらのファイルをまとめたものは
を利用してください。
先ほどと同じです。 0とだけ入力してください。
訪問者の訪れたカウント値、時間、ホスト名、ブラウザ、リンク元、見たページが書き込まれます。
中身は空白にします。
プログラムは次のようになります。
先ほどのプログラムにユーザー情報を書き込む部分が追加してあります。
#!/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;
どのページをいつ見たのかを調べるプログラムです。
#!/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;
先ほどと同じです。ファイル名だけ変更しています。
<!--#exec cgi="/cgi-bin/come.cgi"-->
※添付のindex.htmlファイルを置くというのではなく
カウンターを置くページに今の記述をするということです。
すべてのHTMLファイル内に以下の記述をします。
<!--#exec cgi="/cgi-bin/page.cgi"-->
※添付のsonota.htmlファイルを置くというのではなく
すべてのHTMLファイルに今の記述をするという意味です。
先ほどと同じです。
これらのアップロード先のディレクトリーは次のようになります。
ファイルモードは次のようになります。
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があります。
ご利用の際はVisual C++(47KB)の使用承諾書に同意してください。
これを用いることによってどの時間にどれだけの訪問者があったかを一覧できます。
画面は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に戻る