|
どんなに簡単なCGIスクリプトでも、最低3つのファイルから成り立っています。
- CGIスクリプト本体
- jcode.pl
- データ保存ファイル
2のjcode.plは、日本語コード変換ライブラリと呼ばれ、CGIスクリプトで日本語を表示するために必要となります。このライブラリがどのような役割をしているのかを説明すると長くなりますので、割愛します。なお、jcode.plは一つ用意すればOK。スクリプトごとに用意する必要は全くありません。
そして本題のデータ記録ファイルです。
掲示板スクリプトを考えてみましょう。掲示板って、どのような仕組みで動いているのでしょうか?
ここでは、 設置したばかりで誰も書きこんでいない状態を想定します。
- 掲示板を表示する。記事は書きこまれていない。
- ユーザーがフォームに記事を書きこみ送信ボタンをクリックする。
- CGIスクリプトは、フォームから受け取ったデータをファイルに書きこむ。
- 書きこまれたデータを読みこみ、掲示板を再表示する。
と・・・この繰り返しになります。
設置後、スクリプトの「data」フォルダとか、データ保存ファイルを開いてみると一目瞭然ですが、私の場合、ほとんど全てがCSV(カンマ区切り)になっています。また、ファイルの拡張子は「xx.cgi」としています。なぜ、txt,dat,csvではなくcgiなのか・・・
プロバイダや、レンタルサーバーによって、CGIスクリプトの設置できる場所が異なります。cgi-binディレクトリ(Windowsやマックで言うフォルダのこと)内にCGIスクリプト関係のファイルをアップロードするようになっている所もあれば、私の使っているサーバーのように、どこにでも置ける所もあります。
で・・・このどこにでも置けるというのが実は曲者で、危険なこともあるんですね。
例えば・・・
掲示板のログファイルをカンマ区切りにして「data.txt」で保存していたとします。CGIスクリプトをどこにでも置けるサーバーを使っていた場合、http://www.web-terakoya.net/bbs/data.txtと打ち込んだら、ブラウザ上に表示されてしまう・・・かもしれません。これはサーバー側の設定によって異なるのでなんとも言えないのですが、やはり表示できないにこしたことはないですね。
そこで拡張子をcgiにしてしまうのです。通常、cgiという拡張子がついていると、Webサーバーはスクリプトであると判断し動かそうとします。ところが、パーミッションが666だから動かすことができない。そこで出てくるのが「サーバーエラー」。
要するに、サーバーエラーを誘発し、データを読み込めなくしているのです。
CGIスクリプト内では「data.cgi」の内容を読み出すことは可能ですので、問題はありません。
サーバーエラーを誘発するのですからあまり誉められた方法ではないですね。^^;
でも、通常、データファイルを直指定されることはありえませんし、あるとすれば、相手は「わるいやつ」ですから、確率的にも少ないですし、結果として問題なしと・・・。
プロバイダやレンタルサーバーへアクセスするFTPパスワードを破られてしまったら元も子もないのですが、もっと安全にデータを保存する方法があります。
利用しているサーバーにより使えないこともありますが、興味のある方は調べてみてくださいね。
例えば、あなたの契約しているサーバーの構成が、
----web-terakya.net
|
|--html(public_htmlでもよい)
|--cgi-bin
となっていて、ホームページがhtmlまたはpulic_html内、CGIスクリプトはcgi-binにあるとします。さらに、htmlやcgi-binと同じ位置にディレクトリを作成できるとします。
----web-terakoya.net
|
|--html(public_htmlでもよい)
|--cgi-bin |--data(新しく作成)
その場合は、上のように、dataというディレクトリを作成し、見られては困るデータをこの中にアップロードします。CGIスクリプトでのdataへのパス指定は、
(CGIスクリプトは cgi-bin/bbs/bbs.cgi、データファイルはdata/bbs/data.txtとします)
$data_file = '../../data/bbs/data.txt';
Web上で来訪者がアクセスできるのは、「html」と「cgi-bin」だけですから、どうあがいても、「data」ディレクトリにはアクセスできません。CGIスクリプトはサーバー内にいますから、直接ファイルを読みこむことが可能です。
データファイルは、不特定多数のユーザーが書きこみできるようにします。そこでパーミッションを666にします。また、データファイルがディレクトリ内にいる場合はディレクトリも不特定多数のユーザーが開けるようにする必要があるため、パーミッションが777となります。
設置後スクリプトをアップロードしたディレクトリを見ると、見知らぬファイルがたくさん生まれていることがあります。これら、アップロードした覚えのないファイルは、CGIスクリプトが自動生成しているものです。これらファイルを不用意に削除すると、あるはずのデータが読みこめずエラーを出したり、空白になったりと、不具合が発生します。
CGIスクリプトでは、データファイルの位置と名前をキーに、さまざまな処理を行ないます。データが読みこめないなどのエラーが発生したときは、指定されたデータファイルをアップロードしたか、パーミッションは正しいか、初期設定でのパスが間違っていないかをじっくりと確認してください。
|