カウンタの数値で画像のリンク先を変えるには?

[上に] [前に] [次に]
橋立 [E-Mail] 1999/10/28(木) 00:29:24
トップページに設置してあるカウンタの数値がキリ番になったら、同トップページにある画像をキリ番用に変えたいのですが、どうしらできるのでしょうか。
トップページなのでHTML上でやりたいのですが、画像部とカウンター部の二個所にcgiを埋め込むと、カウントアップ時に同期がとれるか不安です。
プロバイダの環境は、SSIは使用できますが、execタグは利用できません。

<table>
<tr><td>TOP画像</td></tr>
</table>
<br><br>
<カウンター>

このような感じなのですが・・・。
良い方法がありましたら、教えてください。
よろしくお願いします。

Aurai [E-Mail] 1999/10/28(木) 00:39:01
$count =~ /^(.)\1+$|^.*0{3}$/
みたいなかんじで分岐するとか

きたむら 1999/10/28(木) 01:55:56
同期の方法、面白そうなので考えてみました。

まずカウンタCGI自体は、表示CGIのことには目もくれず
マイペースでカウントを続けるものとします。

いっぽう表示CGIは、「最後に表示したときのカウンタの値」を
記録しておきます。

でもって表示CGIは、起動されると、その時点のカウンタCGIの
記録値(count)と、自分の記録値(last)を比較します。

もし count > last なら、カウンタが先に実行されたという
ことなので、現在のカウンタの値は count だと判断します。
(番号count相当の画像を表示し、last=countを記録する)

しかし count == last なら、表示CGI自身が先に実行されたと
いうことなので、現在のカウンタの値は last+1 と判断
します。(番号last+1の画像を表示し、 last=last+1を記録)

わかりにくくてすみなせんが、どんなもんでしょう。
なんか考えが抜けてるような気もするです…。

B-Cus 1999/10/28(木) 03:13:08
> 同期の方法、面白そうなので考えてみました。
同じく。現実的かどうかは別にして、考えてみました。

n個のクライアントが(ほぼ)同時にアクセスしてきた場合、
瞬間的には表示CGIが n回多く実行されている、あるいは
その逆でカウンタCGIが n回多く実行されている状況も
ありえますよね。

やはり、カウンタCGI→表示CGIの順で実行されるように
制御するしかないんじゃないでしょうか。

 カウンタCGI
  ロックをかける
  USER_AGENT/REMOTE_ADDR をひとまとめにして file に記録
  count.dat をカウントアップ。
  カウンタ画像表示
  ロック解除

 表示CGI
  file に該当する USER_AGENT/REMOTE_ADDR があるか調べる。なければ sleep。
  存在すれば
   ロックをかける
   count.dat を読み、それに相当する画像を表示
   file から該当する USER_AGENT/REMOTE_ADDR を削除
   ロック解除

 file にはゴミが残る(片方だけリクエストされる場合があるから)ので、
 適当なタイミングで clean up。

ってな感じでどう? まぁ USER_AGENT/REMOTE_ADDR でしか
相手を特定できないというところが弱いんだけど。


多少不確実でも簡単な方法がいいなら、カウンタCGIと表示SSIの
組合せにして、SSI は
 <!--#include file="image.txt"-->
としておき、image.txt には
 <img src="hoge.png">
と書いておく。そしてカウンタCGIでは、キリ番の1つ前になったら
image.txt を
 <img src="congratulations.png">
に書き換え。キリ番になったら元に戻すとか。

J.Naka 1999/10/30(土) 12:19:18
2つのCGIの同期は、やってやれないことは無いと思いますが、処理が重くなると思うので、簡易仕様に変更してみました。(^^;

■外部仕様
 ・最初のページアクセス先は、*.HTML。
 ・トップページには通常、画像 Def.gif を表示。
 ・トップページにカウンタ設置。
 ・カウンタ値がキリ番のアクセス者には、
  Def.gif を Kiri.gif として返す。

■内部仕様
・トップアクセスページのURLは、ダミーとし、そのトップページから即、Top.cgiに飛ぶ。
・Top.cgiで、カウンタ処理と、それを反映した表示用HTML作成→表示する

-------------------------
 橋立さんの最初の、トップHTML内容では、画像CGIがカウンターCGIよりも速く起動されるので、画像CGIの知るカウンター値は少なくとも1つ前の値、アクセスが混むとその値は不確定になるような気がします。二つのCGIは、表示とアクセス順の同期はもちろん、多重(同時)アクセス時の排他処理も必要だと思います。そしたら、同期と排他処理もまた同期が必要で、ややこしいですね。
 画像CGI→カウンタCGIの動作順序を実現するのは無理ではないと思いますが、その実現は、結局、カウンタCGI→画像CGIの動作順序をシミュレートor保証することになると思うので、最初から、カウンタCGI→画像CGIでやったら良いかなと思いますぅ。

橋立 [E-Mail] 1999/11/03(水) 23:53:16
[[解決]]
カウンタCGIと表示SSIの組合せで、上手く動かすことができました。他の方法も、これから試してみたいと思います。
J.Nakaさんのご指摘はもっともで・・・。カウンタCGIを先に動かすようにしてみます。ただ、トップページの拡張子が.cgiになってしまうのは何となく格好悪いような気もして(表示を消せばいいのかな?)・・・色々と難しいですね(^^;)

ともかく、本当に助かりました。回答を下さった皆さん、どうもありがとうございます!

[上に] [前に] [次に]