CGI/SSIでアクセスカウンタを作る


CGIとは「Common Gateway Interface」の略です。通常のHTML文書などのように ブラウザの要求に対して、サーバがただ単にそのファイルを提供するだけでなく、 ブラウザの要求に対してサーバーが別のプログラムを起動し、その結果を ブラウザに返す、ということを行うインターフェイスの事を意味します。

実際は、CGIを使って呼び出されるコマンドは、どんな言語で書かれていても構わないと言われています。 ですから、一般的にはCGIを使ったプログラムの事を「CGIプログラム」と呼びます。

このCGIによって、従来の見るだけのHPから、ユーザーが参加し、新たなデータを
サーバーに提供するという、インタラクティブなHPを作ることも出来るのです。


延べ参照数 [7740 ]
  
このページの[延べ参照数]のみ、ここで作ったカウンタを使用しております。

アクセスカウンタっていうのは、エスシーシーのホームページにもある 「あなたは○○○番目の訪問者です。」の数字の部分のことですよ。 CGIや SSIがわからなくても、ここに書いてある通りにしたらアクセスカウンタが簡単に作れますよ!

「プロバイダが CGI や SSI の使用を認めてない」、「オリジナルの画像を使ったグラフィカルなカウンタをつけたい」っていう場合は、[簡単にアクセスカウンタを]のコーナーをご覧下さい。


    カウンタプログラムを用意する

 まずは以下のプログラムをカット&ペーストなどでコピーして counter.cgi っていう名前のファイルを作って下さい。


 

このプログラムは Perlという言語で記述して、1行目の #!/usr/local/bin/perl で、サーバーの Perlがある場所を指定します。インターリンクなどのプロバイダは /usr/local/bin/perl に perlがあるからこのままでいいのですが、他のプロバイダとかでは /usr/bin/perl とかに Perlがある場合もありますね。

その場合は、このプログラムの1行目のところを
#/usr/bin/perl
のように書き換えてくださいね。サーバー内のどこに Perlがあるのかわからない場合は、プロバイダに問い合わせたら教えてくれると思います。

2行目の /home/username/public_html/cgi/data/counter.logusername のとこはあなたのユーザー名(メールアドレスの@より前の部分)を入れてください。
(例:エスシーシーの場合は scc_atsu やから /home/scc_atsu/public_html/cgi/data/counter.log になる)


    専用ディレクトリやデータ用ファイルを用意する

  1. あなたの public_html ディレクトリに cgi という名前のディレクトリを作る。

  2. cgi ディレクトリに data という名前のディレクトリを作る。

  3. 中身が
    0
    と書いてあるだけの counter.log という名前のファイルを作る。
    0半角数字のゼロですよ、アルファベットの「オー」と間違えないでくださいね。)

  4. cgi ディレクトリにカウンタプログラムファイル counter.cgi を置く。
    注:必ず ASCII(テキスト)で転送!

  5. data ディレクトリに counter.log を置く。


    CGI/SSIプログラムを実行するための準備


サーバー(UNIX)のシステムは、複数のユーザによる利用が前提になっています。  
そこで、ファイル一つ一つに対して、アクセス権と言うものが設定されているんです、 例えばメールは本人にしか見ることのできないように設定されるのが普通ですよね。

逆に、public_html 内のファイルは、すべてのユーザ・その他(一般の方)から見ることができるように設定されているはずです。

なぜならWWWのサーバがファイルにアクセスすることができなければ、そのファイルに対する request にサーバが 応答することができないからです。(通常、WWW サーバは nobody というユーザによって実行されています。)

ファイルに対するアクセス権の事をファイルのパーミッションと呼びます。

この設定は、ファイル属性の1つ「モード」が管理しています。 そして、パーミッションを設定するコマンドが、chmod (change mode) です。

アクセス権の設定は、ユーザ・グループ・その他の3つのカテゴリに対して行われます。

* ユーザ(登録者本人)
ここでいう「ユーザ」とは、ファイルの所有者を指します。
アクセス権の設定・変更は、基本的にファイルの所有者のみが行うことができます。

* グループ
UNIX システムの利用者(アカウントを持つ者)は、何らかの「グループ」に属しています。
ここでは、「ユーザ」と同一の「グループ」に属している者を指します。

* その他(一般の方)
「ユーザ」でもなく、「ユーザ」と同じグループに属してもいない者は、「その他」に分類されます。

CGIやSSIを実行するには、ファイルなどを「実行可能」または「書き込み可能」に設定(パーミッションの変更)するという作業が必要なのは理解できましたね。 次にパーミッションの指定ですがdataディレクトリはすべて可能(chmod 777)に、counter.log は書き込み可能(chmod 606)に、counter.cgi は実行可能(chmod 705)に、設定します。
data(ディレクトリ)    → chmod 777 data
counter.log(ファイル) → chmod 606 counter.log
counter.cgi(ファイル) → chmod 705 counter.cgi
ちなみにWindows95での、標準のFTP設定では、この様に設定します。
           ↓
     quote site chmod *** filename

ここで「***」の部分の説明をしますね。
ここには3桁の数字が入るのですが、これがパーミッションを表わしているのです。

一桁めはユーザ登録者本人、二桁めはグループ(これに付いては一般ユーザーは無視して構いません)、そして三桁目がその他一般の方となります。 各数字の意味は以下の通りです。

  一桁目二桁目三桁目
読み込み許可444
書き込み許可222
実行許可111
転送直後のHTMLファイルは、664
通常のCGIスクリプトは、705
通常のデーターファイルは、606

上記の表の中に、いくつか例を書いておきましたが、「読み込み許可」「書き込み許可」「実行許可」のうち許可したいものの数字を足したのが パーミッションとなります。

さらに、パーミッションを記号で表すと

 r  読み込み 
 w  書き込み 
 x  実行 

このようになります。

<パーミッションを数字・記号で表す>

r=4、w=2、x=1として、これを合計し、
ユーザ(登録者本人)(rwx) 100の位 + グループ(rwx) 10の位 + その他(rwx)
として算出します。

代表的なパーミッションとして、下記の表に示します。

パーミッションと算出式 使用例 許可内容
705 = (4+2+1)+(0)+(4+1) CGIプログラム本体 rwx---r-x  ユーザ=読,書,実|他人=読,実
606 = (4+2)+(0)+(4+2) CGIで扱うデータファイル rw----rw-  ユーザ=読,書|他人=読,書
755 = (4+2+1)+(4+1)+(4+1) CGIプログラム本体 rwxr-xr-x  ユーザ=読,書,実|グループと他人=読,実
666 = (4+2)+(4+2)+(4+2) CGIで扱うデータファイル rw-rw-rw-  ユーザ=読,書|グループと他人=読,書

      <パーミッションの変更方法>

 

  FTPソフトを使えば簡単にパーミッションの変更ができます。

FTP Exprorer(for Windows)の場合
パーミッションの設定したいファイル(又はディレクトリ)に移動し色を反転させる。メニューバーの「ツール(T)」を選びその中の「サーバーへコマンド(U)」をクリックする。 そこに出てきたINPUTダイアログの中に
site chmod 705 counter.cgi
のようにパーミッションを入力すればOK!

ws_ftp(for Windows)の場合
設定変更したいファイルが置いてあるディレクトリに移動する。現在のパスが表示されているコンボボックスを右クリックする。出てきた「FTP Commands」メニューの中から [SITE] を選択しコマンド入力欄に
chmod 705 counter.cgi
のようにパーミッションを入力すればOK!

WinFTP(for Windows)の場合
「File」メニューから [Commands] → [QUOTE] を選択する。出てきた WS input ダイアログに
SITE CHMOD 705 counter.cgi
のようにパーミッションを入力すればOK!

CuteFTP(for Windows)の場合
「Commands」メニューから [Custom Commands] → [Change Files Access mask] を選択する。 出てきた WS input ダイアログに
705
のようにパーミッションを入力すればOK!

Fetch(for Macintosh)の場合
「Remote」メニューから [Send FTP Command...] を選択し
SITE CHMOD 705 counter.cgi
のようにパーミッションを入力すればOK!

 


<パーミッションの確認>

設定を確認する方法はあるのですが、表示が特殊なので、表を参照して下さい。

設定の確認は、FTP Exprorerの場合ですとサーバー接続中に確認したいディレクトリ(又はファイル)を表示させます、FTPウインドウ内のアクセス権の所にパーミッションが表示されます。 パーミッション変更後は必ずメニューバーのなかの更新をして確認をしてくださいね。
 
WS_FTPの場合ですと確認したいディレクトリ内を表示して、画面右側(サーバの窓)の[Dirlnfo]をクリックすれば、メモ帳に表示されます。

他のFTPの見方をご存じの方は教えてくださいね。

drwxrwxrwx 777
drwx---rwx 705
drwxr-xrwx 757
drwxr-xr-x 755
drwx---r-x 705
drw-rw-rw- 666
drw----rw- 606
drw-r--r-- 644
drw----r-- 604

この表示もパターンがあるので、覚えれば楽になると思います。  


    アクセスカウンタを設置する

すべての準備が終わったら、あとはアクセスカウンタを付けたいページの好きな場所に
あなたは<!--#exec cgi="/username/cgi/counter.cgi"-->番目のお客様です。
と書くだけでOKです!

username のところはあなたのユーザー名(メールアドレスの@より前の部分)を入れるんですよ。
 例:エスシーシーの場合はユーザー名が scc_atsu ですから
   <!--#exec cgi="/scc_atsu/cgi/counter.cgi"-->
   になる。

インターリンクの場合は「 SSI を使用する HTMLファイルの拡張子は .html でなければならない。」という決まりがあるので、アクセスカウンタを付けるページのファイル拡張子は、必ず .html にしてくださいね。


<よくやってしまう失敗>

CGIプログラムを書いているとエラーが出るとか、思い通りに表示できない、というような失敗がよく起こります。その様な時には、次の事を確認してみて下さい。

   

実行属性が無い
CGIをサーバーに送っても、実行パーミッションを付け忘れてることが
よくあります。あと、実行パーミッションを付けていても
それが間違っている場合もありますので、注意してください。
転送方式が違う
ファイルの転送方式には2種類あります。
「アスキー方式(テキスト方式)」と、「バイナリー方式」です。
一般にCGIプログラムは「アスキー方式」で転送しますので
間違って「バイナリー方式」で転送してないか確認してみてください。
パスが間違っている
CGIプログラムの最初の行に付けるパスが間違っていると動きません。
カウンターが使えるならそこで確認出来ますが、使えない場合には
プロバイダーの方に「perl」がどこにあるのか問い合わせてみてくださいね。
また、最初に空行を開けても動きませんから...。
リターンコードが違う
Macintosh,Windows,UNIXでは、すべて改行コードが違います。
最近は、プロバイダーの方で対処してありますが
プログラムを書いているときに「全角」で改行してしまった場合や
スクリプト中に「全角」のスペースを入れてしまった場合も
エラーとなりますので、注意して下さいね。
実はCGIが使えないサーバ
あなたのサーバーはちゃんとCGIが使えますか?
CGIなどを利用するときは最初に確認してくださいね。
一生懸命やっても、プロバイダーの方でCGIを禁止していたら
どうしようもありませんからね!


ホームページ作成の部屋へ戻る 趣味の部屋へ