典型的質問&解答集

サポートBBSに寄せられた質問の中から、頻度が高かったものと、役立ちそうなものを抜き出して、まとめて見ました。



Q.設置した「accview.cgi」が「Internal Server Error」
Q.「accview.cgi」を見ようとすると、「データ更新中です。」と表示され、記録を見ることが出来ない
Q.「accview.cgi」は動いたが、記録が残っていない?
Q.表示されないはずの画像が「×」で見えてしまう
Q.「accview.cgi」をアクセスするたびに「UPDATE」という記録が残る
Q.「accview.cgi」で「ホスト名」がすべて不明になってしまう
Q.「accview.cgi」で「リンク元」の表示が自分のページばかりになってしまう
Q.「accview.cgi」で「リンク元」がいっさい表示されない
Q.「accview.cgi」で「個別データ一覧」が見れず、「リンク元」にもジャンプできない
Q.「accview.cgi」の各データの見方
Q.記録の消去方法
Q.棒グラフをグラフィックで表示したい
Q.CGIからの呼び出し方
Q.CGIをEUCでアップロードすると
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ファイル(画像ファイル)以外のファイルはすべてアスキー(テキスト)モードでアップロードして下さい。

付録:(典型的エラー表示例「apache/1.3.x Server」)

Internal Server Error
サーバー内部エラー

The server encountered an internal error or misconfiguration and was unable to complete your request.
サーバーに内部エラーが起きたか設定ミスの為、あなたのリクエストを完了できませんでした。

Please contact the server administrator, xxx@xxxx.ne.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.
サーバー管理者 xxx@xxxx.ne.jp に連絡して、エラーが起きた時刻とその時あなたが行ったエラーの原因と思われることを知らせてください。

More information about this error may be available in the server error log.
このエラーに関する詳しい情報はサーバーのエラー記録に残っていると思います。

▲top


Q.「accview.cgi」を見ようとすると、「データ更新中です。」?

「accview.cgi」を見ようとすると、「データ更新中です。少し時間を置いてからアクセスしてください」と表示され、アクセス記録を見ることが出来ません。時間を置いてから見ようとしても、変化がありません。どういうことでしょうか。

このメッセージは、誰かがホームページに今まさにアクセスしたために、「accimg.cgi」がアクセス記録ファイルを更新中の場合に表示されます。何度か「accview.cgi」に何度かアクセスしても「データ更新中です。〜」が表示される場合は、5分以上間をおいてからアクセスしてみてください。それでも変化ないようでしたら、ロックファイルが消失した可能性があります。「accdata/lock2.dat.」ファイルが存在しているかどうかFTPで調べて見てください。消失しているようでしたら、「accdata/lock2.dat.」ファイルをアップロードしなおしてください。その際、ファイルのパーミッションを設定しなおすことを忘れずに。

設置した当初からこのメッセージが出る場合は、パーミッション(ディレクトリやファイルへのCGIからの書き込み許可)の設定がうまくいっていない可能性があります。
「accdata」ディレクトリのパーミッションは「707」(drwx---rwx)になっているでしょうか。(サーバーによっては「777」(drwxrwxrwx)にする必要がある場合もあります)
それと、「accdata/lock2.dat」のパーミッションは「606」(rw----rw-)になっているでしょうか。(サーバーによっては「666」(rw-rw-rw-)にする必要がある場合もあります)
これらは、お使いのFTPソフトで調べられるはずです。パーミッションの変更もFTPソフトでできます。(BBS等の設置の経験があれば、そのときもパーミッションの変更を行っているはずです。)

サーバー毎のパーミッションの設定の相違
ちょっと専門的になります。(ここは読まなくても特に支障ありません。)
CGIが「group」のパーミッションで起動される(ホームページ設置者と同じグループIDをホームページを訪問した人に割り当てる)サーバーでは、「解説・説明」ページに書いてあるパーミッション設定ではうまくいかない場合があります。三桁の数字のうち、下二桁を、最下位の数字にそろえる(例えば「705」と書いてあるものは「755」にする)か、下二桁の数字を入れ替える(例えば「705」と書いてあるものは「750」にする)必要があります。
CGIが「other」のパーミッションで起動される(ホームページを訪問した人に割り当てるグループIDが設置者と異なる)サーバーでは、「解説・説明」ページにあるとおりに設定すればOKです。特に、telnet接続可能なサーバーでは「777」や「666」を設定すると同一グループIDを所持している別のユーザーへの書き込み権限を与えてしまう事になり、ちょっと危ない場合があります(プロバイダがtelnet接続しているユーザーにどこまでの権限を付与しているかによります)。

▲top


Q.「accview.cgi」は動いたのですが、記録が残っていないようです。

「accview.cgi」を表示することは出来たのですが、以前の記録が表示されていないようです。サンプルとは、表示されている項目数も少ないみたいです。どういうことでしょうか。

どうも集計データファイルへの記録がうまくいっていないようですね。
原因は、以下の二つのうちどちらかだと思います。

(1) 「accimg.cgi」がうまく動作していない。

「accimg.cgi」が動作していなくとも、「accview.cgi」だけが動作していれば、「accview.cgi」を閲覧した記録だけが記録されます。
「accimg.cgi」が動作していない場合の原因・対策については、Q.表示されないはずの画像が「×」で見えてしまいます。を参照してください。
(2) パーミッションの設定がうまくいっていない。
 「access/accimg.cgi」ファイルのパーミッションは「705」(rwx---r-x)になっているでしょうか。(サーバーによっては「755」(rwxr-xr-x)にする必要がある場合もあります)
「accdata」ディレクトリのパーミッションは「707」(drwx---rwx)になっているでしょうか。(サーバーによっては「777」(drwxrwxrwx)にする必要がある場合もあります)
それと、「accdata/access.csv」のパーミッションは「606」(rw----rw-)になっているでしょうか。(サーバーによっては「666」(rw-rw-rw-)にする必要がある場合もあります)
これらの設定がうまくいっていないとCGIが集計データファイルを更新(書き換えること)できないため、「accview.cgi」への、あなたの現在のアクセスだけは表示されますが、実際は何も記録されていないことになります。
サンプルに比べ、表示されている項目数も少ないのは、アクセス記録がうまくいっていないためだと思われます。記録が無いと表示されない項目や、記録開始の翌日から表示される項目などがあるためです。
 
▲top
Q.表示されないはずの画像が「×」で見えてしまいます。 <img>タグで「accimg.cgi」を貼り付けた場所に、表示されないはずの画像が「×」という形で見えてしまいます。どういうことでしょうか。

「×」は、インターネットエクスプローラで見たときに、画像が無いか画像が壊れている場合の表示です。
原因は以下の二つのうちどちらかだと思います。

(1) accimg.cgiがうまく動作していない。

動作していれば、「accdata/access.csv」というファイルに記録が書き込まれていきます。「accdata/access.csv」ファイルをFTPでダウンロードして調べてください。記録されているようなら、原因(2)が考えられます。
動作していないとすれば、さまざまな原因が考えられます。

1.「accimg.cgi」ファイルの1行目のperlのパスを間違えている

<img>タグから呼び出されるCGIは、エラー表示は出ません。再度ご確認ください。
2.<img>タグに指定した「accimg.cgi」のパスを間違えている。
各ページに<img>タグで貼り付けた「accimg.cgi」の設定に誤りが無いか確認してください。「accimg.cgi」のパス指定など、一文字でも間違えれば動作しなくなります。以下の例のように、「http://〜」から始まるURLを全て指定するのが確実ですが、長くなるのでミスもそれだけ起きやすくなります。文字の抜けや重複が無いか、大文字小文字の区別を間違えていないか、「.」と「,」や「:」と「;」、「_」と「-」等を間違えていないか、全角文字が混じっていないか、途中で改行していないか、今一度お確かめ下さい。
<IMG src="http://www.XXX.ne.jp/~xxxx/cgi-bin/access/accimg.cgi?id=XXXXX&amp;img=1">
相対パス指定の場合は、HTMLファイルのフォルダと「access」フォルダの相対位置に気をつけてください。
例えば、フォルダ構造が
 HOME
  |
  |-index.html  ………(1)
  |
  |-subdir
  |  |
  |  |-sub.html …(2)
  |
  |-cgi-bin
     |
     |-access
        |
        |-accimg.cgi
であった場合、
(1)のindex.htmlからの相対パス指定は、
<IMG src='cgi-bin/access/accimg.cgi?id=INDEX…>
で良いのですが、
(2)のsub.htmlからの相対パス指定は、subdirディレクトリの一つ上のディレクトリからcgi-binディレクトリを指定しなければいけませんので、
<IMG src='../cgi-bin/access/accimg.cgi?id=SUB…>
としなければいけません。

確実に指定するには絶対パスで

<IMG src='http://www.XXX.ne.jp/~xxxx/cgi-bin/access/accimg.cgi?id=XXXXX…>
と指定してしまうことです。
3.「accimg.cgi」ファイルのパーミッションの設定を間違えている
 「access/accimg.cgi」ファイルのパーミッションは「705」(rwx---r-x)になっているでしょうか。(サーバーによっては「755」(rwxr-xr-x)にする必要がある場合もあります)
(2) 画像ファイルを出力するCGIが使えないサーバー。
画像タグから「accimg.cgi」を呼び出しても、画像がうまく出ない(インターネットエクスプローラなら「×」が表示される)サーバーがあります。
具体的には、バナー広告が強制的に表示されるプロバイダのサーバーの一部です。ユーザーが自分で設置したBBSなどのCGIページでも強制的にバナー広告が表示されるサーバーです。
画像を出そうとしても、企業広告入りのHTMLに強制的に書き換えられるため、画像が正常に出力されません。

CGI自体は動くので、アクセス記録をとるのに支障はないようです。
画像サイズをタグの指定で強制的に1×1にして壊れた画像を表示しないようにすれば、OKです。

<IMG src='〜/accimg.cgi?id=INDEX' border=0 width=1 height=1>
という具合です。どうせ表示されないので、「&img=1」(ダミーGIF画像出力指定)は不要です。
▲top
Q.「accview.cgi」をアクセスするたびにその記録が残る。
「accview.cgi」を表示すると、「UPDATE」というページ名で履歴が表示されますが、これを消すことはできないのでしょうか?

自分のアクセスを記録しないように設定できます。
「accview.cgi」を閲覧したときに表示される「あなたのブラウザ」と「あなたのアクセスポイント」に一致するアクセスを記録しないように設定します。それ以外の訪問者がaccview.cgiを閲覧したときは、記録が残ります。
「access/config.pl」ファイルの末尾近くにある、

%myenv = (
    '1', '〜 :: 〜', # 自宅 NN
    '2', '〜 :: 〜', # 自宅 IE
    '3', '〜 :: 〜', # 会社!
);
の「〜 :: 〜」部分を、accview.cgiを閲覧したときに表示される「あなたのブラウザ」と「あなたのアクセスポイント」の文字列に書き換えることで実現します。この二つの情報が一致したアクセスは記録に残りません。
 「'通し番号', 'ブラウザ :: アクセスポイント',」という具合に並べて下さい。
ここで注意しなければいけないことは、ダイアルアップ接続では、通常、接続するたびに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
);
という具合に並べます。

ただし、「あなたのブラウザ」や「あなたのアクセスポイント」が「 *不明* 」と表示される場合、残念ながらこの機能は使えません。

▲top


Q.「accview.cgi」で「ホスト名」がすべて不明になってしまう

「accview.cgi」で集計記録を見ると、「ホスト名」がすべて「*不明*」になってしまっています。 どこを変更すれば解消されるのでしょうか。

プロバイダによってはホスト名が取得できないようになっています。プロバイダを変えるか、あきらめていただくしかないと思います。

▲top
Q.「accview.cgi」で「リンク元」の表示が自分のページばかりになってしまう
例えば誰かが、私のホームページ「http://www.provider.com/~watashi/INDEX.HTM」から同じホームページの 「PROFILE.HTM」へとリンクをたどると、「http://www.provider.com/~watashi/INDEX.HTM」が集計データファイルに「リンク元」として記録されてしまいます。これを記録しないようにすることは出来ますか。

access/config.pl」ファイルの末尾近くに、

### 以下のURLからのリンクはローカルとみなし、ログのリンク記録を書き換えない
###('...'の中を書き換える)
@myurls = (
    'http://www.foo.ne.jp/~hoge',
    'http://cgi.foo.ne.jp/~hoge',
    'http://www.kaisha.com/~hogebekkan',
);
というプログラムがあります。ここに書いてある文字列を含むホームページアドレス(URL)は集計データファイルに記録しないようになりいます。この例では「http://www.provider.com/~watashi/」を書いておけばよいわけです。
### 以下のURLからのリンクはローカルとみなし、ログのリンク記録を書き換えない
###('...'の中を書き換える)
@myurls = (
    'http://www.provider.com/~watashi/',
);
▲top


Q.「accview.cgi」で「リンク元」がいっさい表示されない

「リンク元」や「検索CGI個別集計」、「検索単語」といった項目が表示されないのですが、どういうことでしょうか?
記録が無ければ、それらの項目自体表示されないようになっています。新しく設置して間もないホームページの場合は、どこからもリンクされていないだけかもしれません。他の人のホームページに相互リンクを申し込んだり、検索エンジンに登録するなど、ホームページをアクセスしてもらえるように努力しましょう。
それ以外の場合、記録されない原因はいくつか考えられます。

(1) 「解説・説明」ページの<方法1>で「accimg.cgi」を設置している場合

「解説・説明」ページの「既存ページの変更」に解説している<方法1>を使って「accimg.cgi」を設置した場合は、リンク元を取る機能は使えません。<方法3>をお試しください。
初めて設置する場合は、まず<方法1>が動作することをご確認の上、<方法3>をお試しください。はじめはいろいろな原因でうまく動作しないことが多いものです。<方法3>の方が設置が難しいので、何が原因で動作しないのか原因を突き止めるのが難しくなります。他の不具合を全て解決した上で<方法3>をお試しください。


(2) access/config.pl」ファイルの@myurls」の設定の仕方に問題がある場合

@myurls」は、本来、自分のホームページ内のリンクを記録しないための設定ですが、以下のように設定すると「リンク元」が一切記録されなくなる可能性があります。
@myurls = (
    'http://www.XXX.ne.jp/~xxxx',
    '',
    '',
);
最初の「'http://www.XXX.ne.jp/~xxxx'」は、自分のホームページのアドレスなので、これと一致するURLをリンク元として記録しないようにするわけですが、二行目以降の「''」は、全てのURLに一致してしまうので、あらゆるリンク元を記録しないことになります。
以下のように書き直してください。
@myurls = (
    'http://www.XXX.ne.jp/~xxxx',
);
自分のホームページ内のリンク元も記録してもかまわないという場合は、「config.pl」をいじらず初期設定のまま放っておけばOKですが、さもなければ、以下のようにして下さい。
@myurls = ();
この不都合はVer1.02で修正する予定です。
▲top


Q.「accview.cgi」で「個別データ一覧」が見れず、「リンク元」にもジャンプできない

 「config.pl」ファイルの$gatewd = '…';」を設定したところ、「個別データ一覧」を見ようとしたり、「リンク元」、「検索CGI個別集計」といった項目のリンクを辿ろうとすると、もう一度パスワード入力画面になってしまうようになりました。「エラー記録削除」をしようとしても、同様です。どういうことでしょうか?

クッキーの設定に問題がある為と思われます。(「クッキー(Cookie )」とは何かについては、アスキー日経BP社など、他のHPでお調べください。)

1) ブラウザのクッキーが無効になっている。

対策:ブラウザのクッキーを有効にする。(パスワード入力ページ「accgate.cgi」の指示に従ってください。)
2) 「config.pl」ファイルの「$accssdir = '…';」に誤ったパスを設定している。
対策:正しいパスを設定する。特に大文字小文字の区別など厳密に。「http://〜」から設定するのは誤りです。「config.pl」の該当個所の説明をよく読んでから設定してください。
3) NTサーバーなど、Windows系のサーバーの場合、フォルダ名やファイル名に大文字小文字の区別が無いため、「accview.cgi」にアクセスするとき、大文字小文字を間違えても平気でアクセスできますが、 「config.pl」ファイルの「$accssdir = '…';」の設定と「accview.cgi」のパスの大文字小文字が厳密に一致しないとクッキーが無効になります。
対策:$accssdir = '…';」と厳密に同じパスでアクセスする。
4) ドメイン名以下のアドレスに別名を使っているサーバーや、短縮URLが使えるサーバーとか短縮URLサービスを使っている場合、サーバー内部のパス名とアクセスパス名が一致しないため、「config.pl」ファイルの「$accssdir = '…';」がアクセスパス名と一致せず、クッキーが無効になる。
対策:$accssdir = '';」(無設定)にする。
5) 「トクトク」などの強制的にバナー広告が挿入されるサーバーでは、「AshiatoLOG」のクッキーが使えないものがあるようです。
対策:$accssdir = '';」(無設定)にする。
どうしてもパスワードが使いたい方は、「改造講座」を参照して、「AshiatoLOG」を改造してください。(CGIの知識が必要です)
 

上記(2)〜(5)のいずれも、「config.pl」ファイルの「$accssdir」を以下のように無設定にすれば解決します。

$accssdir = ''; #解析表示CGIのあるデイレクトリ(フォルダ)名
▲top


Q.「accview.cgi」の各表の見方

 集計ログの見方について質問です!
 「同一アクセスでのページ巡回数(注目度)」とは、なんでしょうか?
その他、それぞれの表の意味も教えてください。
大雑把に言うと「AshiatoLOG」は、あなたのホームページを訪れた人が、そこにあるそれぞれのページを何ページ見たかを数えています。
に書いたように「IPアドレス」をつかって「あ、この人はさっきもアクセスした人だ!」と判断したら、CGIは、その人の「IPアドレス」の「同一アクセスでのページ巡回数」を増やします。
それがなんの役に立つかというと、ホームページを訪れた人がどのくらい興味を示してくれたかの目安になるという事です。全然興味が無かったら表紙を見ただけで帰ってしまうでしょうからその人の巡回数は1になります。逆に、とても興味を覚えたらどのページも見ようとするので巡回数は多くなります。
「同一アクセスでのページ巡回数」では1ページしか見なかった人は何人、2ページ見た人は何人と言う具合に棒グラフで表示しています。

そのほか、各表の見方は、「集計結果の見方」をご参照ください。

▲top


Q.記録の消去方法

現在ある記録を全て消したい場合はどのようにすればいいのですか?
本CGIには記録消去機能はありません。
お使いのFTPソフトを使って、「accdata/access.csv」と「accdata/access.csv.bak」という二つのファイルを両方削除してください。(後悔しないように、削除する前に自分のパソコンにダウンロードしといたほうがいいかも知れません。)
▲top


Q.棒グラフをグラフィックで表示したい

サンプルページでは、棒グラフがグラフィックで表示されますが、私の設置ページでは一色で表示されています。サンプルのようにグラフィックで表示するにはどうしたらよいのですか。

これは、「access/config.pl」ファイルを書き換えることで選択できるようになっています。
access/config.pl」ファイルの始めのほうに、

$hbarimg = '';   #画像ファイルを省略すると単色で棒グラフ(横)を表示します。
$vbarimg = '';   #画像ファイルを省略すると単色で棒グラフ(縦)を表示します。
というプログラムがあります。コメントにあるとおり、ここの「$hbarimg = '';」という部分の二つの「'」の間に画像ファイルを指定すると、棒グラフが画像になります。圧縮ファイルを解凍した際に、「bar1.gif」、「bar1v.gif」、「bar2.gif」等のファイルも解凍されているはずです。これらは棒グラフ用の画像のサンプルです。例えば、以下のように指定します。
$hbarimg = 'bar3.gif';   #画像ファイルを省略すると単色で棒グラフ(横)を表示します。
$vbarimg = 'bar3v.gif';  #画像ファイルを省略すると単色で棒グラフ(横)を表示します。
▲top
Q.CGIからの呼び出し方
日記や掲示板などのCGIからの呼び出し方がわかりません。
もう少し詳しく教えていただけないでしょうか?!
方法A. accimg.cgiによる画像の貼り付け

安直な方法としては、BBSのCGI等で、画面デザイン(CGIが出力するHTML)をユーザーが書きかえれるようになっているものなら、そこに画像の形で「accimg.cgi」の呼び出しを貼り付ける(設置マニュアル参照)のが簡単・安全・確実で良いと思います。

例として、ネットサーフレスキュー【Web裏技】のminibbsをあげます。

minibbs.cgi ver.10.31では:

#◆(見出)タイトルの下位置に表示する文字列
$msg_top = '<IMG src="../access/accimg.cgi?id=BBS&img=1">';
MiniBBS-EX(簡易BBSエクセレント) ver.1.14では:
$SETUP{'head_message'} = <<"EOF";
<h1>フォトメっ!</h1>

電子掲示板です。<br>
どうぞご利用ください。<br>
<IMG src="../access/accimg.cgi?id=BBS&img=1">
EOF

方法B. 集計プログラムを直接呼び出す.

さもなければ、CGIプログラムに直接呼び出しを書き加える事になります。(呼び出すプログラムファイルは「accimg.cgi」ではなく「access.pl」です。)

通常、CGIの先頭に

#!/usr/bin/perl とか #!/usr/local/bin/perl
と書かれていると思います。
その直後に、 という具合に書けば動作すると思います。
もちろん、'~/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に と、書き加えればよいでしょう。

また、上の例で'BBS'と書いたところは、適当な文字列に書き換えます。

▲top

Q.CGIをEUCでアップロードすると?

CGIの入門書で「どんなCGIでも文字コードはEUCで書くべき」とあったので、AshiatoLOGもEUCコードに変換してからアップロードしたのですが文字化けなどを起こして上手く動作してくれません。どういうことでしょうか?

AshiatoLOGはShiftJISコードで書かれていることを前提に、文字列処理プログラムを記述しています。そのため、CGIを他の文字コードに変換してからアップロードすると正常に動作しません。文字コードはそのまま変換しないでアップロードするようにして下さい。

確かに、Shift JIS (SJIS)コードでかかれたCGIでは漢字コードの検索や置換、半角文字の処理などで文字化けなどを起こす可能性がありますが、殆どの環境ではShift JISが一般的なため、不特定多数の方に使っていただくことを目的として公開しているAshiatoLOGでは、むしろEUCで書くほうが設置が困難になり、トラブルが多く発生すると考え、あえてShift JISで記述しています。

▲top


Q.「AshiatoLOG」のしくみ

「AshiatoLOG」の複数ページ記録の仕組みを教えてください。

普通のホームページアクセス(HTTP通信手順)では、一つのページを見るたびにそのページのデータをホームページのサーバーが送り終わったところでホームページのサーバーとあなたのプロバイダとの回線は切断されてしまいます。リンクをたどる度にサーバーへの接続・切断を繰り返しているわけです。従ってCGIも、アクセスのたびに新たに起動されますから、CGIで同じ人がホームページ内のリンクをたどっているかどうかを直接監視し続けることは不可能です。間接的に同一人物のアクセスかどうかを知る方法はいくつか考えられるのですが、このCGIでは「IPアドレス」を使って判断しています。
あなたが、パソコンからプロバイダを経由してインターネットにアクセスしているとき、あなたのパソコンには、世界に唯ひとつの番号(IPアドレス)がプロバイダから割り当てられています。このIPアドレスをよすがにCGIは「あ、この人はさっきもアクセスした人だ!」と判断します。

さてこのIPアドレスですが、通常のプロバイダとのダイアルアップ接続では、プロバイダが持っているいくつかの番号からその都度あいているものが選ばれるため、接続する度に違う番号が割り振られます。ですからあなたの今日のIPアドレスは多分、昨日のIPアドレスとは違うわけです。CGI側から見れば昨日と同じIPアドレスからのアクセスがあったからといって同一人物のアクセスと判断するわけには行きません。というわけで「access.pl」では、30分(=1800秒)以内に同一IPアドレスからアクセスがあったら同一人物として集計しているわけです。

同一人物の30分間隔以内でのアクセスは、他のアクセスログCGIと異なり、一つのデータとして記録されます。そのため「あしあと」という、アクセスパターンを記録できるわけです。

▲top


Q.「ロックファイル」って何?

時々「ファイルロックに失敗しました。」とか「ロックファイルが残留していました。」のメッセージが出るのですけど、そもそも”ロックファイル”ってなんですか? 何のためにあるのでしょうか?

二人の人が同時にアクセスしたとき、両方から書き込むと記録ファイルが破損する可能性があるため、同時に書き込まれないように書込み禁止にするしくみがファイルロックです。ファイルロックの為だけに使うファイルを「ロックファイル」と呼んでいます。正常に動いている時、ロックファイルは書き込みしている間だけファイル名がかわっています。その間に、別の人がアクセスすると、「ファイルロックに失敗しました。」というメッセージを記録(「accdata/errlog.dat」ファイル)に残しています。
サーバーの何らかの都合(同じサーバーにあるいろんなホームページでCGIがいくつも同時に動いたりして負荷がかかり、いつまでもCGIが終了しないため等)でCGIのアクセス記録ファイル書き込みプロセスが中断されてしまった場合ロックファイルが残ってしまうことがあります。ロックファイルが残っていると書き込みはおろか読み込みも出来なくなるため(書き込み途中の記録を読んでしまわないよう、そういうプログラムになっています)、ファイル名が変ったまま残ってしまったロックファイルを自動的に元に戻す機能が「AshiatoLOG」には付いています。
その機能が働いたとき、「ロックファイルが残留していました。」のメッセージが出るわけです。

また、サーバーの何らかの都合でCGIのアクセス記録ファイル書き込みプロセスが中断されてしまった場合、記録ファイル「accdata/access.csv」も消滅してしまっていることがあるので、書き込む前に直前の記録ファイルを別の名前「accdata/access.csv.bak」に変更して保存しています。そして、ファイルが消滅していた場合は直前のファイルを自動的に復活する機能もついています。

これら、自動復活機能が働いたとき、ユーザーにトラブルがあったことを知らせるため「トラブル履歴」として「accview.cgi」で表示するようにしています。
 

▲top


戻る