Back

宝探しCGI Ver.0.2

(2001.2.10最終更新)

特徴 / Sample / ダウンロード / 設置方法 / その他 / おまけのJavaScript/

○特徴

  1. ファイルへのアクセス数やアクセス期間などを制限できる。
  2. 複数のファイルについて、それぞれに制限の設定ができる。
  3. アクセス不可の際のメッセージをHTMLで自由に表現できる。(エラーメッセージは別)
  4. アクセスログを記録きる。
  5. 連続アクセス防止。(Ver.0.2から)
  6. 管理用CGI付き。設定やその変更、アクセスログの集計・閲覧・削除とダウンロードがWeb上でできる。
  • 名前は”宝探し”ですが、アクセス制限のCGIです。作者が宝探し用に作っただけ。
  • サイト内のわかりにくいところへCGIのリンクを隠しておけば、宝探し的に使えます。
  • リンク先のファイルは、HTMLでなくてもよいので、ダウンロードの制限などにも使えます。
  • ファイルへの直リンクの制限はできません。一度アクセスすると、URLも知られてしまいます。

○サンプル

  • 探してもらうのも申し訳ないので、クイズ形式にしてみました(笑)
    この入力フォームはJavaScriptを利用しています。
  • Question:「先生」を英語にしてください。(英数半角小文字で。スペースを入れないでね)
  • 正解すれば、心理分析のスクリプト一覧ページへ飛びます。ただし、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ファイルです。自由に作成してください。

○設置方法

  1. あなたのサーバーでCGIが使えるかどうか確認する。

  2. 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>';

  3. アクセス不可のときのメッセージを作成する。
       HTMLファイルです、サンプルを参考に自由に作成してください。ただし、CGIが一旦読み込んで使用しますので、画像ファイルの指定やリンクなどはCGIの位置からの相対パスまたはhttp://〜から記述したURLにしてください。 (CGIと同じフォルダに置けば、気にすることはありませんが)。
       HTML中に、
      msg<!--msg-->
       と書けば(小文字で。途中改行しないこと)、その部分がアクセス不可の理由メッセージに置き換えられます。

       同じく、
      credit<!--credit-->
       の部分は、このHPへのリンクとスクリプト名の表示に置き換えます。不用なら削除してください。 CGIスクリプトの初期設定中で、$creditの部分を削除または空欄にすると、メッセージページでも表示されません。


  4. サーバーにアップロードする。
    • FTPソフトでサーバーに、スクリプト本体, 管理用スクリプト本体、コード設定ファイル, アクセスログ記録ファイル, アクセス不可メッセージファイル をアップロードしてください。そのとき、必ずアスキーモード(テキストモード)にすること。
    • 背景画像の画像等をアップロードしてください。こちらはバイナリモードで。

  5. パーミッションを変更する。
    • takarasagashi.cgiとad_tsgsh.cgiのパーミッションを755に変更する。
    • コード設定ファイル, アクセスログ記録ファイルのパーミッションを666に変更する。
    • CGIを入れているフォルダのパーミッションを777に変更する。
    • プロバイダの設定によって違います。以上は一般的な場合ですので、CGIを設置するプロバイダの設定にあわせてください。

  6. 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へアクセスし、「アクセスログ集計・閲覧・削除」画面からアクセスログを削除します。 「コード設定変更・現状確認」から、コード設定ファイルに記録されたカウント数等も訂正してください。)

  7. リンクを貼る
       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の解説やサンプルで見る、パスワードによるアクセス制限スクリプトの応用です。

    基本。
    1. HTMLファイルのヘッダ部分に、以下のように記述する。(赤字の部分をコピー&ペーストしてね)
      <SCRIPT language="JavaScript">
      <!--
          function gateKeeper() {
              var location="
      宝探しスクリプトのURL?" + document.pass.pwd.value;
              this.location.href = location;
          }
      //-->
      </SCRIPT>
      宝探しスクリプトのURLはあなたのページに合わせて記述してね。その後の?が重要!忘れないで!

    2. 同じ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>
      設定したアクセスコードを答えさせてください。その場合は英数半角にすること。また、大文字小文字も区別させてください。

    応用。
    • フレームを使用していて、別フレームの方に表示させたい場合。
      ヘッダ部分に記述したスクリプトの、

      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>

     以上は、PageTutor.com - HTML Tutorials, Javascript and Web Design: GateKeeperを元に、みさおが手直ししました。

もどる