宝探しCGI Ver.0.2 
特徴 / Sample / ダウンロード / 設置方法 / その他 / おまけのJavaScript/
▲
○特徴
- ファイルへのアクセス数やアクセス期間などを制限できる。
- 複数のファイルについて、それぞれに制限の設定ができる。
- アクセス不可の際のメッセージをHTMLで自由に表現できる。(エラーメッセージは別)
- アクセスログを記録きる。
- 連続アクセス防止。(Ver.0.2から)
- 管理用CGI付き。設定やその変更、アクセスログの集計・閲覧・削除とダウンロードがWeb上でできる。
- 名前は”宝探し”ですが、アクセス制限のCGIです。作者が宝探し用に作っただけ。
- サイト内のわかりにくいところへCGIのリンクを隠しておけば、宝探し的に使えます。
- リンク先のファイルは、HTMLでなくてもよいので、ダウンロードの制限などにも使えます。
- ファイルへの直リンクの制限はできません。一度アクセスすると、URLも知られてしまいます。
▲
○サンプル
- 探してもらうのも申し訳ないので、クイズ形式にしてみました(笑)
この入力フォームはJavaScriptを利用しています。- 正解すれば、心理分析のスクリプト一覧ページへ飛びます。ただし、1日先着5名様まで。
(アクセス数の制限ができるのは、このページからのリンクだけです。)
間違えれば、「その答えは違います!」と表示されます。
(↑これはエラーメッセージ。連続のアクセスには「ごめんねページ」を表示。)
- 実はもう一つのサンプルが、このページのどこかに隠れています。よかったら探してね。こっちはクリックするだけです。
心理分析21の質問ページへ飛びます。(1日先着5名様まで。)
- 管理用画面
パスワードはmasterです。ただし、サンプルにつき、実際の編集はできません。▲
○ダウンロード
下から、設置に必要なファイルがダウンロードできます。
(指定した名前をつけて保存してください。指定がないときはそのファイル名で)
- takarasagashi.txt------CGI本体。ファイル名をtakarasagashi.cgiにしてください。
- ad_tsgsh.txt------管理用CGI本体。ファイル名をad_tsgsh.cgiにしてください。
- jcode.pl-----日本語変換perl。管理用CGIで必要。
- takarafile.dat-------------コード設定ファイル。(空ファイル)
- accesslog.dat------------アクセスログファイル。(空ファイル)
- gomenne.html------------アクセス不可のメッセージファイル(ごめんねページ)サンプル。HTMLファイルです。自由に作成してください。
▲
○設置方法
- あなたのサーバーでCGIが使えるかどうか確認する。
- CGIの設定を変更する。
テキストエディタで、takarasagashi.cgiとad_tsgsh.cgiを開き、初期設定の部分を修正します。
1行目のperlへのパスを、お使いのプロバイダの設定にあわせて訂正してください。
例: #!/usr/local/bin/perl
また、全てのファイルは同じフォルダに入れてください。(違うフォルダに入れる場合は、それにあわせて項目を修正してください。)
基本的に、
$変数名 = "値";
という形式なので、この値の部分を変更してください。"(ダブルクォーティション)や'(シングルクォーティション)、;(セミコロン)を消さないように気をつけてください。
数は半角で。
以下に、初期設定部分を示します。
- 赤字の部分は変更必須です。
- 青字の部分はご自分のHPに合わせてください。
- 灰色の部分は注意書きです。必要なければ削除してかまいません。
- 黒字の部分は特に変更の必要はありません。
ただし、takarasagashi.cgiとad_tsgsh.cgiで変数名が同じもの(太字の部分)は、必ず同じ値にしてください。
takarasagashi.cgiの初期設定部分
$kanri = "あなたの名前"; #管理者名
$email = "xxxx\@xxx.ne.jp"; #管理者メールアドレス(@の前には必ず\をつけること。)
$home = '../index.html'; #戻り先アドレス http://〜から始まるURLまたはCGIからの相対パスで。
$codename = "'宝物"; #アクセスコードの名称
$datafile = "takarafile.dat"; #コード設定ファイル。このファイルを見られると、コードも隠したURLもばれてしまうので、必ず変更する。
$logfile = "accesslog.dat"; #アクセスログファイル。
#-----次の$message[n]は、アクセス不可の理由メッセージ。
#starttimeは開始時刻に、endtimeは終了時刻に、limit_countは制限されたアクセス数に
#それぞれ設定ファイルを元に置き換えられます。
#宝探しらしく、メッセージを直してください。改行は<br>で。タグ有効です。
$message[0] = 'まだここへのリンクは許可はしていません!ここへのリンクが許可できるのはstarttimeからです。'; #アクセス開始時刻前のアクセスに対して。
$message[1] = 'もうこちらへのリンクは終了しました!<p>ここへのリンク許可はendtimeまででした。<p>またのチャンスをお待ちください。'; #アクセス終了時刻後のアクセスに対して。
$message[2] = 'ここへは本日既に<br>limit_count人の人が到達しましたので、<br>本日分のリンクを終了しました。'; #一日のアクセス制限数を超えた場合のアクセスに対して。
$message[3] = 'このリンクは既にlimit_count人の人が到達しましたので、<br>リンクを終了しました。'; #アクセス制限数を超えた場合のアクセスに対して。
$message[4] = 'さきほどアクセスしてくださった方と同じ方では・・・?<p>人数制限がありますので、他の方のために何度もクリックするのはおやめくださいね。'; #先にアクセスした人と同じホストとブラウザだった場合。
#-------以下は特に変更の必要なし。
$body = '<body bgcolor="#ffffff">'; #エラーメッセージのBODYタグ。画像などのファイル指定はhttp://〜から始まるURLまたはCGIからの相対パスで。
$lockdir = "temp_t"; #Lockディレクトリ
$ad_lockdir = "temp_ad"; #管理用Lockディレクトリ
$logwrite = "on"; #アクセスデータファイルにアクセスデータを書き込むかどうか。書き込むときはon。書き込まないときはoff
$messagehtml = "gomenne.html"; #ごめんねページ。
#以下は作成者のHPへのリンクです。ページ右下隅に表示されます。不用なら削除。
$credit = '<a href="http://www.nmt.ne.jp/~misao/" style="font-size:8pt">宝探し用CGI Ver.0.2</a>';ad_tsgsh.cgiの初期設定部分
require 'jcode.pl';
$datafile = "takarafile.dat"; #コード設定ファイル。必ずtakarasagashi.cgiで設定したファイル名と同じにすること。
$logfile = "accesslog.dat"; #アクセスログファイル。必ずtakarasagashi.cgiで設定したファイル名と同じにすること。
$home = '../index.html'; #戻り先アドレス。相対パスまたはhttp://から記述したURL。
$password = "master"; #管理用パスワード
#---------以上は変更必須。以下は変更必要なし。
$admin = "ad_tsgsh.cgi";
$method = "POST";
$lockdir = "temp_t"; #Lockディレクトリ。必ずtakarasagashi.cgiで設定した値と同じにすること。
$ad_lockdir = "temp_ad"; #管理用Lockディレクトリ。必ずtakarasagashi.cgiで設定した値と同じにすること。
$body = '<body bgcolor="#ffffff">'; #BODYタグ
#--------以下は作成者のHPへのリンク。管理用画面の右下隅に表示されます。不要の場合は削除してください。
$credit = '<a href="http://www.nmt.ne.jp/~misao/" style="font-size:8pt">宝探しデータ管理用CGI Ver.0.1</a>';
- アクセス不可のときのメッセージを作成する。
HTMLファイルです、サンプルを参考に自由に作成してください。ただし、CGIが一旦読み込んで使用しますので、画像ファイルの指定やリンクなどはCGIの位置からの相対パスまたはhttp://〜から記述したURLにしてください。 (CGIと同じフォルダに置けば、気にすることはありませんが)。
HTML中に、
msg<!--msg-->
と書けば(小文字で。途中改行しないこと)、その部分がアクセス不可の理由メッセージに置き換えられます。同じく、
credit<!--credit-->
の部分は、このHPへのリンクとスクリプト名の表示に置き換えます。不用なら削除してください。 CGIスクリプトの初期設定中で、$creditの部分を削除または空欄にすると、メッセージページでも表示されません。
- サーバーにアップロードする。
- FTPソフトでサーバーに、スクリプト本体, 管理用スクリプト本体、コード設定ファイル, アクセスログ記録ファイル, アクセス不可メッセージファイル をアップロードしてください。そのとき、必ずアスキーモード(テキストモード)にすること。
- 背景画像の画像等をアップロードしてください。こちらはバイナリモードで。
- パーミッションを変更する。
- takarasagashi.cgiとad_tsgsh.cgiのパーミッションを755に変更する。
- コード設定ファイル, アクセスログ記録ファイルのパーミッションを666に変更する。
- CGIを入れているフォルダのパーミッションを777に変更する。
- プロバイダの設定によって違います。以上は一般的な場合ですので、CGIを設置するプロバイダの設定にあわせてください。
- webページから呼び出す。(動作確認)
- http://(takarasagashi.cgiのあるフォルダまでのパス)/takarasagashi.cgi
で呼び出すと、「アクセスコードを指定してください!」というメッセージが出るはずです。
- http://(ad_tsgsh.cgiのあるフォルダまでのパス)/ad_tsgsh.cgi
へアクセスしてください。うまく設置できていれば、処理選択画面が表れます。「コードの設定」を選択し、パスワードを入力して、送信してください。コード設定画面になります。
- http://(takarasagashi.cgiのあるフォルダまでのパス)/takarasagashi.cgi?コード
で呼び出すと、ad_tsgsh.cgiで設定したコードに対応するURLへアクセスします。
(これもカウントしますので、最後にad_tsgsh.cgiへアクセスし、「アクセスログ集計・閲覧・削除」画面からアクセスログを削除します。 「コード設定変更・現状確認」から、コード設定ファイルに記録されたカウント数等も訂正してください。)
- リンクを貼る
takarasagashi.cgi?コード へリンクを貼ってください。 このリンクにアクセスした数をカウントし、制限します。
例。<a href="http://www.nmt.ne.jp./~misao/cgi-bin/find/takarasagashi.cgi?teacher">宝物</a>
?コードをつけるのを忘れないでください。また、コードは正確に記述すること。
- コードの登録と変更、および現状確認、アクセスログの集計や削除、ダウンロードをするときは、管理用CGIへアクセスしてください。どこかにリンクをはるか、お気に入りに登録しておくといいでしょう。
▲
○その他
- アクセスログファイルの見方。
- アクセスログを記録する設定にした場合、アクセス不可メッセージを出した場合も、アクセスの記録は取っています。(コードが一致しなかったり、エラーだったりした場合は別。)
管理用CGIからweb上で見ることもできますが、ダウンロードもできます。ダウンロードされたファイルはタブ区切りのデータファイルになっていますので、表計算ソフトなどで集計が可能です。
見方は、1行が1アクセスの記録になっていて、
アクセスコード(tab)アクセス日時(tab)アクセスした時点の1970年1月1日からの経過秒数(tab)アクセスできたかどうか(tab)アクセスの順番(tab)ユーザー名(tab)ホスト(tab)ブラウザ情報(tab)直前に参照していたURL
という順序になっています。(tab)はタブの印で区切りです。
アクセスできたかどうか、ですが、指定したURLにアクセスできた場合1、できなかった場合0になります。
アクセスの順序は、一日○人、という制限をしている場合、日が変わると、1からカウントし直します。1日のアクセス数を制限していない場合は、最初から順番にカウントします。
ユーザー名は、.htaccessでアクセス制限をして、ユーザー名を設定している場合に有効です。それ以外のときは、空白になります。
直前に参照していたURLは取得できなかったり、あてにならないこともありますので、ご承知ください。
- 更新履歴。
- ◆Ver.0.1-----2000年12月31日、作成。
◆Ver.0.2-----2001年1月4日。連続アクセスを防止できるようにした。
◆Ver.0.2-----2001年2月9日。管理用CGIに合わせて、初期設定部分を整理。
◆管理用CGI Ver.0.1-----2001年2月9日、作成。
- Ver.0.1→Ver.0.2
- ログの互換性はありません。データの記述も違います。
- 感想。と、今後の予定。
- ようやく管理用CGIができました。2〜3日でできると思っていたら、集計部分が思ったより手間取って時間がかかりました。 他はそんなに悩むことなく作ることができたのですけども。
管理用CGIのバージョンは0.1になっていますが、たぶんもうバージョンアップはしなくてすむんじゃないかな、と思います。 ミスがある場合はともかくとして、できるだけの機能は盛り込んだと思いますので。
宝探しCGIも、たぶんもうバージョンアップはしないでしょう。ただ、これをもとにして、スタンプラリーやポイント制の宝探し(アクセスごとにポイントアップ)を作りたいと思っています。▲
○おまけのJavaScript
サンプルを宝探しではなく、クイズ形式にしてみました。この方法だと、ソースを見ても答えはわかりません。 このパスワード入力フォームの作り方を説明します。
よくJavaScriptの解説やサンプルで見る、パスワードによるアクセス制限スクリプトの応用です。
基本。応用。
- HTMLファイルのヘッダ部分に、以下のように記述する。(赤字の部分をコピー&ペーストしてね)
<SCRIPT language="JavaScript">宝探しスクリプトのURLはあなたのページに合わせて記述してね。その後の?が重要!忘れないで!
<!--
function gateKeeper() {
var location="宝探しスクリプトのURL?" + document.pass.pwd.value;
this.location.href = location;
}
//-->
</SCRIPT>
- 同じHTMLファイルのパスワード入力欄を作りたい部分に、以下のように記述する。(赤字の部分をコピー&ペーストしてね)
<form name="pass">設定したアクセスコードを答えさせてください。その場合は英数半角にすること。また、大文字小文字も区別させてください。
”先生”を英語で言うと・・・?(英数半角小文字で!)
<input type="password" size=10 name="pwd" value="">
<input type="button" name="OK" value="OK" OnClick="gateKeeper()">
<input type="reset" value="取り消し">
</form>
以上は、PageTutor.com - HTML Tutorials, Javascript and Web Design: GateKeeperを元に、みさおが手直ししました。
- フレームを使用していて、別フレームの方に表示させたい場合。
ヘッダ部分に記述したスクリプトの、this.location.href = location;
の行を、次のように書き換えます。
parent.framename.location = location;
framename.は、ページを表示させるフレームの名前にしてください。
- パスワード入力ウィンドウを出したい場合。
HTMLファイルのヘッダ部分を、以下のようにする。
<SCRIPT language="JavaScript">
<!--
function gateKeeper() {
var password = prompt("”先生”を英語で言うと・・・?\n(英数半角小文字で!)", "")
var location="宝探しスクリプトのURL?" + password;
this.location.href = location;
}
//-->
</SCRIPT>
そして、リンクを貼りたい部分に以下のように記述する。
<a href="javascript:gateKeeper()">クイズに答えて宝物。</a>