カウンタの数値で画像のリンク先を変えるには?
[上に]
[前に]
[次に]
橋立
[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になってしまうのは何となく格好悪いような気もして(表示を消せばいいのかな?)・・・色々と難しいですね(^^;)
ともかく、本当に助かりました。回答を下さった皆さん、どうもありがとうございます!
[上に]
[前に]
[次に]