メンバー専用


かばさんのCGI 再配布について

かばさんの「かばの遊べるCGI」というページが消えてしまいました。

かばさんのCGI利用規約(抜粋)

◆当サイトのCGIスクリプトは、アダルト・サイト、違法サイト
公序良俗に反するサイト以外でしたら、どなたでも自由に
使っていただいてかまいませんが、著作権は放棄していません。

◆当サイトのCGIスクリプトは改造・再配布とも自由です。

◆当サイトのスクリプトを使ったことによって生じたいかなる
損害・不都合にも、作者は一切責任を取れません。

◆当サイトのCGIスクリプトとこの「CGI利用規約」は
予告なく変更することがあります。



かばさんのCGI F.A.Q(抜粋)

Q.解凍したファイルが文字化けして読めません。(重要)

A. このサイトで配布しているスクリプトはimode用のものを除いて
EUCで書いてあります。主な日本語コードには、JIS、Shift-JIS、EUC
がありますが、この中でPerlと一番相性が良くトラブルを起こさないのが
EUCだからです。Windowsに標準で付いているメモ帳やワードパットは
Shift-JISしか読めませんので、ここのCGIは文字化けして読めません。
WindowsでCGIを編集するときは、「秀丸」や「K2Editor」のようなEUCも
扱えるテキスト・エディタを利用してください。

秀丸 シェアウエア \4,000
http://hide.maruo.co.jp/

K2Editor フリーソフト
http://www.forest.impress.co.jp/library/k2editor.html

私はノートパットで開いたものを、エディタで編集しなおしても
不具合が発生しました。

フリーでとてもよくできていると思いますので再配布します。
ただし全て自己責任でお願いします!
当方は、再配布以外一切サポートも責任も取りませんので
確認のうえダウンロードしてください。


複数日予約      サンプル (配布とは内容が異なります)

以下全てかばさんの説明のコピーです。かばさんごめんなさい!

フレームを使って、フォーム部(上)と、予約状況を確認する予約表部(下)を同時に見られる予約システム。
保管期限を過ぎた予約情報は自動的に削除されますので、一度CGIを設置するとその後の
メンテナンスは必要ありません。
イントラネットでどうぞ。

  • 50日先まで予約を受け付けます。(デフォルト)
  • 「メモ」と「キー」以外は入力必須項目です。
  • 先約がある日は予約できません。(上書きはできません)
  • キャンセルする場合は、名前と所属、またはキーが予約時の情報と一致しないとキャンセルできません。
  • 「メモ」には、半角なら20文字、全角なら10文字まで入力できます。
  • 名前と所属はクッキーで1年間保存されます。
  • CGI起動時にデータファイルをチェックして、保管期限が切れた情報は自動的に削除します。
  • [選択]をクリックすると予約可能期間のカレンダーが表示され、日付をクリックするだけで予約開始。終了日を指定できます。(日付選択機能 Ver.1.20〜)
  • キャンセルをクリックすると、その予約をキャンセルできます。(一発キャンセル機能 Ver.1.20〜)
  • 予約するときにキーを付けられます。キーが付いている予約にはキーありアイコンが表示され、予約をキャンセルするには予約時に指定したキーを入力する必要があります。逆にキーさえ合っていれば、名前・所属・備考が一致しなくてもキャンセルが可能です。(キーロック機能 Ver.1.20〜)

※日付選択機能と一発キャンセル機能は、ブラウザ設定でJavaScriptオンにしておかないと動きません。


(1) ダウンロード

まず、下のファイルをダウンロードして、解凍します。解凍すると、"resdays.cgi"と"kabalib.pl"の2つのテキスト・ファイルと、"key.gif"と"cancel.gif"の2つのGIFファイルができます。

※kabalib.plはVer.1.20以降を使ってください。

ファイルをダウンロード

cgi-lib.plを入手します。

http://cgi-lib.berkeley.edu/

jcode.plを入手します。

ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/

(2) カスタマイズ

"resdays.cgi"をテキスト・エディタで編集します。
※"resdays.cgi"はEUCで書いてありますので、EUCが扱えるエディタでないと日本語部分が読めません。

最低限、次の個所を変更する必要があります。

#!/usr/local/bin/perl
perlへのパス
$htmpath = 'resdays.htm';
[もどる]ボタンでジャンプするパス。
use lib '../lib';
resdays.cgiから見て、cgi-lib.pl、jcode.pl、kabalib.plがあるパス。
@Names = ( '携帯電話1','携帯電話2','モバイル1','モバイル2','モバイル3');
予約アイテム。あまり多いと表が見にくくなるので8種類くらいが限度です。
@Cmt = ( 'i-mode','写メール','ザウルス','VAIO','メビウス');
各アイテムの説明。@Namesの順番と対応させます。

「予約アイテム」と「各アイテムの説明」は、CGI設置後も変更が可能です。アイテムの追加があった場合は、その時点から新しいアイテムの予約を受けつけます。削除があった場合は、予約表にそのアイテムを表示しなくなりますが、保管期限内にそのアイテムの予約記録がある限り過去ログには表示します。アイテムの名称を変更すると、変更前後のアイテムは別物として認識します。

(3) アップロード&設定

ftpソフトなどでサーバーのCGI用ディレクトリにアップロードしましょう。仮にcgi-bin/にアップロードしたら、次のようにディレクトリとパーミッションを設定します。
※kabalib.plはresdays/の下でもOKです。
※jcode.plとcgi-lib.plはCGIスクリプトではしょっちゅう参照される定番なので、lib/ディレクトリとして独立させておくと使いまわせて便利です。

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- resdays (755)/
          ├-- data (777)/
          ├-- resdays.cgi (755)
          └-- *.gif

(4) テスト

設定が終わったら、ブラウザからCGIを設置したURLを開いてみましょう。上の例のようなディレクトリ構成なら、次のようなURLになります。

http://xxx.yyy.zzz/cgi-bin/resdays/resdays.cgi


■もっとカスタマイズ

"resdays.cgi"の「設定、適当に変更してください」〜「設定はここまで」の間を適当に変更すると、見た目をカスタマイズできます。

色を変えよう

フォーム部・予約表部とも、色は好きなように変更できます。

#色指定
$clrCmt       = '#CCFFCC'; #説明(薄い紫)
$clrText      = '#003399'; #文字色(群青)
$clrSumi      = '#FFFFCC'; #予約済み(オレンジ)
$clrHeader    = '#CCFFFF'; #ヘッダーの色(薄い水色)
$clrSunday    = '#FFCCFF'; #日曜日の色(赤紫)
$clrSaturday  = '#66FFFF'; #土曜日の色(青)
$clrFormBG    = '#FFFFFF'; #予約状況表のセルの背景(白)
$clrTable     = '#FFFFFF'; #予約状況表のセルの背景(白)
$clrTableBG   = '#99CCFF'; #予約状況表の背景色(水色)

保管期限と予約受付期間を設定しよう

予約受付期間(今日から何日後まで)と、情報の保管期限(何日前から昨日まで)を指定できます。両方ともむやみに大きくする事は推奨しません。サーバーの能力や混雑具合にもよりますが、Perlの処理速度はあまり速くありませんので、ファイル・サイズが大きくなり過ぎるとブラウザ側がタイムアップしてしまうかも知れません。100や200なら問題ないと思いますが、例えば保管期限を9999なんて書くと何年か後に恐ろしいことになるでしょう。

$maxdays = 50 ;      #何日先まで予約できるか?
$remdays = 50 ;      #過去の記録を残す日数。不要なら0。多すぎると応答が遅くなります。

■ちょこっとセキュア

データ・ファイルを保存するディレクトリは、初期値では"data"になっていますが、このディレクトリはパーミッション777のセキュリティー的に弱い部分なので、他の人に推測されにくい名前にすることをお勧めします。何かとんでもない名前を考えて一人で楽しんではどうでしょうか?
データ・ファイル用ディレクトリ名を変更するには、"resdays.cgi"の$dirの部分と、実際のディレクトリ名を変更してください。下は、"data"を"monooki"に変更した例です。

[resdays.cgiファイル]

$dir = 'monooki';
データ・ファイル用ディレクトリ名

[ディレクトリ構成]

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- resdays (755)/
          ├-- monooki (777)/
          ├-- resdays.cgi (755)
          └-- *.gif

■つけたり

[もどる]とリロードされない!

先約があって予約できなかったり、名前や所属が違ってキャンセルできなかったとき、当初の仕様ではフレームの下側にメッセージと[もどる]を表示していました。[もどる]を指定すると、元のCGIを呼び出して予約表部分を表示するのですが、どうしてもフォーム送信前の表を表示してしまいます。予約やキャンセルがうまく行って更新された日の情報が反映されないのです。どうもフレームを使っている場合のみの現象のようです。
仕方なくVer.1.00ではメッセージは別の小さなウィンドウに表示するようにしましたが、このためにJavaScriptを使ってしまいました。JavaScriptは、ブラウザによってうまく動かなかったりするので、最低限度にしておきたいんですけどね。

JavaScriptどっぷり...

Ver,1,20から、カレンダーをクリックすれば予約開始・終了日を選択できる「日付選択機能」を付けました。我ながら「考えたもんで賞」ものの機能だと思いますが、これにはビシバシJavaScriptを使ってしまったので、極度にJavaScript依存を高めることになりました。JavaScriptを使った、シンプルにして大迷惑のクライアント攻撃方法があるので、JavaScriptの実行を抑止している人もいるでしょうし、NetscapeやIEじゃないブラウザもあるのに...。ユーザー・インターフェースを追求すると、何か他が犠牲になってしまうのかな?
まあ、この「複数日予約」はイントラネットか何か特定のLANで使われることが多いでしょう。それならブラウザもある程度限定できるでしょう。だからIEかNetscapeをJavaScriptオンで使っていただけることを期待します。でもそのブラウザ設定のまま、インターネットの無限の彼方へ旅立った結果は保証できませんよ。お気を付けて。