典型的質問&解答集 サポートBBSに寄せられた質問の中から、頻度が高かったものと、役立ちそうなものを抜き出して、まとめて見ました。
Q.設置した「accview.cgi」が「Internal Server Error」
Q.「accview.cgi」は動いたのですが、記録が残っていないようです?
Q.「accview.cgi」をアクセスするたびにその記録が残る。
Q.「accview.cgi」で「ホスト名」がすべて不明になってしまう
Q.「accview.cgi」で表示される「同一アクセスでのページ巡回数」とは?
Q.記録の消去方法
Q.「トラブル履歴」の消去方法
Q.棒グラフをグラフィックで表示したい
Q.自分のページ間の「リンク元」記録が表示されてしまう。
Q.CGIからの呼び出し方
Q.「AshiatoLOG」のしくみ
Q.「残留ロックファイル」って何?
Q.設置した「accview.cgi」が「Internal Server Error」
設置した「accview.cgi」をブラウザでアクセスすると「500 Internal Server Error」と表示されてしまいます。いろいろな原因が考えられますが、プログラムの改造を行っていないのであれば、一番ありそうなのは、各CGIファイルの1行目(#!...perlのパス)が間違っている場合です。
各CGIの最初の行にあるperlのパスは、プロバイダによってさまざまです。 たいていは、「 #!/usr/local/bin/perl」とか「 #!/usr/bin/perl」ですが、確実に設定するために、プロバイダのサポートページを参考にするか、プロバイダに問い合わせた方がよいと思います。「accview.cgi」は、一部、perl5の機能を使用しています。そのため、プロバイダによっては、CGIプログラムの先頭に「 #!/usr/local/bin/perl5」とか「 #!/usr/bin/perl5」と書く必要がある場合があります。
それと、バイナリモードでアップロードした可能性もあります。GIFファイル(画像ファイル)以外のファイルはすべてアスキー(テキスト)モードでアップロードして下さい。
Q.「accview.cgi」は動いたのですが、記録が残っていないようです?
「accview.cgi」を表示することは出来たのですが、以前の記録が表示されていないようです。サンプルとは、表示されている項目数も少ないみたいです。どういうことでしょうか。Q.「accview.cgi」をアクセスするたびにその記録が残る。どうも集計データファイルへの記録がうまくいっていないようですね。
おそらくパーミッション(ディレクトリやファイルへのCGIからの書き込み許可)の設定がうまくいっていないのではないでしょうか。
「accdata」ディレクトリのパーミッションは「707」(drwx---rwx)になっているでしょうか。(サーバーによっては「777」(drwxrwxrwx)にする必要がある場合もあります)
それと、「accdata/access.csv」のパーミッションは「606」(rw----rw-)になっているでしょうか。(サーバーによっては「666」(rw-rw-rw-)にする必要がある場合もあります)
これらは、お使いのFTPソフトで調べられるはずです。パーミッションの変更もFTPソフトでできます。(BBS等の設置の経験があれば、そのときもパーミッションの変更を行っているはずです。)
これらの設定がうまくいっていないとCGIが集計データファイルを更新(書き換えること)できないため、「accview.cgi」への、あなたの現在のアクセスだけは表示されますが、実際は何も記録されていないことになります。サンプルに比べ、表示されている項目数も少ないのは、アクセス記録がうまくいっていないためだと思われます。記録が無いと表示されない項目や、記録開始の翌日から表示される項目などがあるためです。
※サーバー毎のパーミッションの設定の相違
ちょっと専門的になります。(ここは特に読まなくても支障ありません。)
CGIが「group」のパーミッションで起動される(ホームページ設置者と同じグループIDをホームページを訪問した人に割り当てる)サーバーでは、「解説・説明」ページに書いてあるパーミッション設定ではうまくいかない場合があります。三桁の数字のうち、下二桁を、最下位の数字にそろえる(例えば「705」と書いてあるものは「755」にする)か、下二桁の数字を入れ替える(例えば「705」と書いてあるものは「750」にする)必要があります。
CGIが「other」のパーミッションで起動される(ホームページを訪問した人に割り当てるグループIDが設置者と異なる)サーバーでは、「解説・説明」ページにあるとおりに設定すればOKです。特に、telnet接続可能なサーバーでは「777」や「666」を設定すると同一グループIDを所持している別のユーザーへの書き込み権限を与えてしまう事になり、ちょっと危ない場合があります(プロバイダがtelnet接続しているユーザーにどこまでの権限を付与しているかによります)。
「accview.cgi」を表示すると、「ACCES」というページ名で履歴が表示されますが、これを消すことはできないのでしょうか?自分のアクセスを記録しないように設定できます。
「accview.cgi」を閲覧したときに表示される「あなたのブラウザ」と「あなたのアクセスポイント」に一致するアクセスを記録しないように設定します。それ以外の訪問者がaccview.cgiを閲覧したときは、記録が残ります。
「access/access.pl」ファイルの始めのほうにある、の「〜 :: 〜」部分を、accview.cgiを閲覧したときに表示される「あなたのブラウザ」と「あなたのアクセスポイント」の文字列に書き換えることで実現します。この二つの情報が一致したアクセスは記録に残りません。%myenv = ( '1', '〜 :: 〜', # 自宅 NN '2', '〜 :: 〜', # 自宅 IE '3', '〜 :: 〜', # 会社! );
「'通し番号', 'ブラウザ :: アクセスポイント',」という具合に並べて下さい。
ここで注意しなければいけないことは、ダイアルアップ接続では、通常、接続するたびにIPアドレスが動的に割り当てられるため、「あなたのアクセスポイント」は、接続するたびに変化するということです。私の場合は、ダイアルアップ接続するたびに、
あなたのアクセスポイント = 「 pfa789c.tokyjk15.ap.so-net.ne.jp 」
あなたのアクセスポイント = 「 pfa456e.tokyjk15.ap.so-net.ne.jp 」
という具合に'pfa'の後の4文字が変化します。
そこで、変化する部分の文字は、「?」で置き換えてください。私の場合、「あなたのブラウザ」は「Mozilla/4.5 [ja] (Win98; I)」ですので、と、言うことになります。%myenv = ( '1', 'Mozilla/4.5 [ja] (Win98; I) :: pfa????.tokyjk15.ap.so-net.ne.jp', # 自宅 Netscape );
ただし、文字列の文字数も変化する場合は、「?」で置き換えることは出来ません。
その場合は、変化する分だけ、文字列を並べることになります。
例えば、
あなたのアクセスポイント = 「 ap7-kame3.foo.ne.jp 」
あなたのアクセスポイント = 「 ap7-kame5.foo.ne.jp 」
あなたのアクセスポイント = 「 ap7-tsuru7.foo.ne.jp 」
という具合に変化する場合、'kame'と'tsuru'では文字数が違いますから、という具合に並べます。%myenv = ( '1', 'Mozilla/4.5 [ja] (Win98; I) :: ap7-kame?.foo.ne.jp', # 自宅 NN '2', 'Mozilla/4.5 [ja] (Win98; I) :: ap7-tsuru?.foo.ne.jp', # 自宅 NN );ただし、「あなたのブラウザ」や「あなたのアクセスポイント」が「 *不明* 」と表示される場合、残念ながらこの機能は使えません。
Q.「accview.cgi」で「ホスト名」がすべて不明になってしまう
「accview.cgi」で集計記録を見ると、「ホスト名」がすべて「*不明*」になってしまっています。 どこを変更すれば解消されるのでしょうか。プロバイダによってはホスト名が取得できないようになっています。プロバイダを変えるか、あきらめていただくしかないと思います。
Q.「accview.cgi」で表示される「同一アクセスでのページ巡回数」とは?
集計ログの見方について質問です!
「同一アクセスでのページ巡回数(注目度)」とは、なんでしょうか?
回数と%しか表示されませんが、これはどう解釈すればいいのでしょうか?.
大雑把に言うと「AshiatoLOG」は、あなたのホームページを訪れた人が、そこにあるそれぞれのページを何ページ見たかを数えています。
別に書いたように「IPアドレス」をつかって「あ、この人はさっきもアクセスした人だ!」と判断したら、CGIは、その人の「IPアドレス」の「同一アクセスでのページ巡回数」を増やします。
それがなんの役に立つかというと、ホームページを訪れた人がどのくらい興味を示してくれたかの目安になるという事です。全然興味が無かったら表紙を見ただけで帰ってしまうでしょうからその人の巡回数は1になります。逆に、とても興味を覚えたらどのページも見ようとするので巡回数は多くなります。
「同一アクセスでのページ巡回数」では1ページしか見なかった人は何人、2ページ見た人は何人と言う具合に棒グラフで表示しています。
現在ある記録を全て消したい場合はどのようにすればいいのですか?
本CGIには記録消去機能はありません。
お使いのFTPソフトを使って、「accdata/access.csv」と「accdata/access.csv.bak」という二つのファイルを両方削除してください。(後悔しないように、削除する前に自分のパソコンにダウンロードしといたほうがいいかも知れません。)
アクセス解析表示「accview.cgi」をひらくととでてしまうのですが。。。トラブル履歴2000/09/16 15:25 残留ロックファイルを削除しました
この日付が不定期に増えていくのですが、どうしたら消せるのでしょうか?
本CGIには記録消去機能はありません。
お手数ですが、お使いのFTPソフトを使って、 「accdata/access.log」というファイルを削除してください。
「トラブル履歴」の意味は、”「残留ロックファイル」って何?”を参照ください。
サンプルページでは、棒グラフがグラフィックで表示されますが、私の設置ページでは一色で表示されています。サンプルのようにグラフィックで表示するにはどうしたらよいのですか。これは、「accview.cgi」ファイルを書き換えることで選択できるようになっています。
「accview.cgi」ファイルの始めのほうに、# 棒グラフ画像ファイルというプログラムがあります。コメントにあるとおり、ここの「$bar_gif = '';」という部分の二つの「'」の間に画像ファイルを指定すると、棒グラフが画像になります。圧縮ファイルを解凍した際に、「bar.gif」、「bar1.gif」、「bar2.gif」というファイルも解凍されているはずです。これらは棒グラフ用の画像のサンプルです。例えば、以下のように指定します。
# 次の行の1文字目の「#」を削除して''の中に画像ファイル名を入れると棒グラフが画像になる
# (CGI専用サーバーの場合は不可能)
$bar_gif = '';$bar_gif = 'bar1.gif';
例えば誰かが、私のホームページ「http://www.provider.com/~watashi/INDEX.HTM」から同じホームページの 「PROFILE.HTM」へとリンクをたどると、「http://www.provider.com/~watashi/INDEX.HTM」が集計データファイルに「リンク元」として記録されてしまいます。これを記録しないようにすることは出来ますか。
「access.pl」ファイルの始めのほうに、というプログラムがあります。ここに書いてある文字列を含むホームページアドレス(URL)は集計データファイルに記録しないようになりいます。この例では「http://www.provider.com/~watashi/」を書いておけばよいわけです。### 以下のURLからのリンクはローカルとみなし、ログのリンク記録を書き換えない ###('...'の中を書き換える) @myurls = ( 'http://www.foo.ne.jp/~hoge/', 'http://cgi.foo.ne.jp/~hoge/', 'http://www.xxx.ne.jp/~hogebekkan/cgi-lib/', );### 以下のURLからのリンクはローカルとみなし、ログのリンク記録を書き換えない
###('...'の中を書き換える)
@myurls = (
'http://www.provider.com/~watashi/',
);
日記や掲示板などのCGIからの呼び出し方がわかりません。
もう少し詳しく教えていただけないでしょうか?!
方法A. accimg.cgiによる画像の貼り付け安直な方法としては、BBSのCGI等で、画面デザイン(CGIが出力するHTML)をユーザーが書きかえれるようになっているものなら、そこに画像の形で「accimg.cgi」の呼び出しを貼り付ける(設置マニュアル参照)のが簡単・安全・確実で良いと思います。
例として、ネットサーフレスキュー【Web裏技】のminibbsをあげます。
minibbs.cgi ver.10.31では:
#◆(見出)タイトルの下位置に表示する文字列MiniBBS-EX(簡易BBSエクセレント) ver.1.14では:
$msg_top = '<IMG src="../access/accimg.cgi?id=BBS&img=images/homeicon.gif">';$SETUP{'head_message'} = <<"EOF";方法B. 集計プログラムを直接呼び出す.
<h1>フォトメっ!</h1>電子掲示板です。<br>
どうぞご利用ください。<br>
<IMG src="../access/accimg.cgi?id=BBS&img=images/homeicon.gif">
EOFさもなければ、CGIプログラムに直接呼び出しを書き加える事になります。(呼び出すプログラムファイルは「accimg.cgi」ではなく「access.pl」です。)
通常、CGIの先頭に
#!/usr/bin/perl とか #!/usr/local/bin/perlと書かれていると思います。
その直後に、## アクセス集計ライブラリ指定 ##という具合に書けば動作すると思います。
require '~/cgi-bin/access/access.pl';
## アクセス集計ファイル更新 ##
&updateAccessFile('~/cgi-bin/accdata/access.csv', '~/cgi-bin/accdata/lock.dat', 'BBS');
もちろん、'~/cgi-bin/...'の部分は自分の環境に合わせて書き換えてください。
普通は、例えば「cgi-bin/」というディレクトリ(フォルダ)の下にそれぞれのCGI毎に別のディレクトリを切ってCGIを設定していると思います。
例えば、http://www.foo.co.jp/~foo/cgi-bin/bbs/microbbs.cgiというCGIから、http://www.foo.co.jp/~foo/cgi-bin/access/access.plを呼び出したい場合、microbbs.cgiに## アクセス集計ライブラリ指定 ##と、書き加えればよいでしょう。
require '../access/access.pl';
## アクセス集計ファイル更新 ##
&updateAccessFile('../accdata/access.csv', '../accdata/lock.dat', 'BBS');また、上の例で'BBS'と書いたところは、適当な文字列に書き換えます。
「AshiatoLOG」の複数ページ記録の仕組みを教えてください。普通のホームページアクセス(HTTP通信手順)では、一つのページを見るたびにそのページのデータをホームページのサーバーが送り終わったところでホームページのサーバーとあなたのプロバイダとの回線は切断されてしまいます。リンクをたどる度にサーバーへの接続・切断を繰り返しているわけです。従ってCGIも、アクセスのたびに新たに起動されますから、CGIで同じ人がホームページ内のリンクをたどっているかどうかを直接監視し続けることは不可能です。間接的に同一人物のアクセスかどうかを知る方法はいくつか考えられるのですが、このCGIでは「IPアドレス」を使って判断しています。
あなたが、パソコンからプロバイダを経由してインターネットにアクセスしているとき、あなたのパソコンには、世界に唯ひとつの番号(IPアドレス)がプロバイダから割り当てられています。このIPアドレスをよすがにCGIは「あ、この人はさっきもアクセスした人だ!」と判断します。さてこのIPアドレスですが、通常のプロバイダとのダイアルアップ接続では、プロバイダが持っているいくつかの番号からその都度あいているものが選ばれるため、接続する度に違う番号が割り振られます。ですからあなたの今日のIPアドレスは多分、昨日のIPアドレスとは違うわけです。CGI側から見れば昨日と同じIPアドレスからのアクセスがあったからといって同一人物のアクセスと判断するわけには行きません。というわけで「access.pl」では、1時間(=3600秒)以内に同一IPアドレスからアクセスがあったら同一人物として集計しているわけです。
同一人物の1時間間隔以内でのアクセスは、他のアクセスログCGIと異なり、一つのデータとして記録されます。そのため「あしあと」という、アクセスパターンを記録できるわけです。
時々「残留ロックファイルを削除しました」のメッセージが出るのですけど、そもそも”残留ロックファイル”ってなんですか? 何のためにあるのでしょうか?二人の人が同時にアクセスしたとき、両方から書き込むと記録ファイルが破損する可能性があるため、同時に書き込まれないように書込み禁止にするしくみがロックファイルです。正常に動いている時、ロックファイルは書き込みしている間だけ存在しています。サーバーの何らかの都合(同じサーバーにあるいろんなホームページでCGIがいくつも同時に動いたりしてメモリ−やメモリー代わりのハードディスク領域が足りなくなるとか)でCGIのアクセス記録ファイル書き込みプロセスが中断されてしまった場合ロックファイルが残ってしまうことがあります。ロックファイルが残っていると書き込みはおろか読み込みも出来なくなるため(書き込み途中の記録を読んでしまわないよう、そういうプログラムになっています)、残ってしまったロックファイルを自動的に削除する機能が「AshiatoLOG」には付いています。
その機能が働いたとき、「残留ロックファイルを削除しました」のメッセージが出るわけです。また、サーバーの何らかの都合でCGIのアクセス記録ファイル書き込みプロセスが中断されてしまった場合、記録ファイル「accdata/access.csv」も消滅してしまっていることがあるので、書き込む前に直前の記録ファイルを別の名前「accdata/access.csv.bak」に変更して保存しています。そして、ファイルが消滅していた場合は直前のファイルを自動的に復活する機能もついています。
これら、自動復活機能が働いたとき、ユーザーにトラブルがあったことを知らせるため「トラブル履歴」として「accview.cgi」で表示するようにしています。