これからCGIを勉強したい人向けに、仕様書付でCGIサンプル(ダウンロードフリー)を公開します。
| 目 次 | お薦めの本 | |||
| 1. | CGI(Common Gateway Interface)って何? | |||
| 2. | 何ができるの? | |||
| 3. | どうすれば使えるの? | |||
| 4. | CGI(Perl言語)サンプル(ダウンロードフリー) | |||
| 5. | お薦めツール | |||
| 6. | PerlでSQLデータベース利用 | |||
| 7. | Perlの追加モジュール | |||
| 8. | 迷惑投稿対策 (スパム対策) | |||
| ★ | CGI(Perl言語) 関連リンク集 | |||
1. CGI(Common Gateway Interface)って何?:
普通のホームページの場合、ブラウザからリンクすると、サーバ上のHTML文書がそのまま表示されます。
CGIの場合、サーバ上でCGIプログラムが実行され、その実行結果が返され、ブラウザ上に表示されます。
サーバでの実行において、他の文書、データを参照、書込みが可能です。
2. 何ができるの?:
ゲストブック、掲示板、チャット、サイト内検索等
3.どうすれば使えるの?:
CGIは、さまざまなプログラム言語で利用できますが、ここでは、一般的なPerl言語で説明します。
「テキストエディタで、プログラムを作成し、サーバに転送」
簡単に言うとこうなのですが、個々の作業には、山の様に多くの注意事項があります。
※詳細については、書籍、及び、下記の関連リンク集で、お勉強願います。
※私も、時間ができたら、七転八倒の貴重な経験を掲載したいと思っています。(^_^;)
| CGI名称 | テキスト表示 | 展開されるファイル | ダウンロード |
| ゲストブック 2000.4.10掲載 (仕様書) |
guest1.cgi form1.htm |
guest1.cgi:ゲストブックのプログラム form1.htm:投稿用フォーム guest1.log:投稿ログを格納するファイル (空ファイル) jcode.pl:日本語コード変換用プログラム |
GUEST1.EXE |
| 掲示板 2000.5.12掲載 (仕様書) |
bbs1.cgi | bbs1.cgi:掲示板のプログラム bbs1.log:投稿ログを格納するファイル(空ファイル) jcode.pl:日本語コード変換用プログラム |
BBS1.EXE |
| チャット 2000.5.17掲載 (仕様書) |
chat1.cgi | chat1.cgi:チャットのプログラム chat1.log:メッセージログを格納するファイル (空ファイル) jcode.pl:日本語コード変換用プログラム |
CHAT1.EXE |
| サイト内検索 2000.5.25掲載 (仕様書) |
site1.cgi | site1.cgi:サイト内検索のプログラム jcode.pl:日本語コード変換用プログラム |
SITE1.EXE |
| シンプルカウンタ 2001.4.19掲載 (仕様書) |
count.htm count.cgi 超単純 |
count.htm:呼び出し用HTML count.cgi:シンプルカウンタのプログラム count.dat:カウンターファイル jscript.txt:カウンター値表示用JavaScriptコマンド red.gif:サンプル画像※何でも良い |
COUNT.EXE |
| iモード携帯の 製造番号確認 2001.7.2掲載 (仕様書) |
utn2.htm utn2.cgi |
utn2.htm:呼び出し用HTML ※iモード用 utn2.cgi:製造番号確認のプログラム |
IMODEUTN.EXE |
※「CGI名称」をクリックすると、サンプル画面で動作確認できます。
※「仕様書」をクリックすると、「動作の流れ」と「プログラム仕様書」を確認できます。
※「テキスト表示」をクリックすると、「プログラムソース」をブラウザ上で確認できます。
※「プログラムソース」には、初心者向けに、たくさんコメントを付けました。私も初心者です。(^_^;)
<ダウンロード手順>
1.「ダウンロード」欄のファイル名をクリックすると、ダウンロードが開始されます。
2.ダウンロード後、ダブルクリックすると自己解凍されます。
3.解凍されたファイル名は、大文字ですので、小文字に変更願います。
(圧縮ツールが勝手に大文字に変更してしまうため)
<CGI設置方法>
1.拡張子".cgi"のソースについては、1行目のPerlのパス名を、プロバイダに合わせて修正が必要です。
※@NIFTYの場合:#!/usr/local/bin/perl
他に、URLを直接指定している箇所がありますので、修正が必要です。
※修正は、秀丸等のエディタを使い、文字コードをEUC(改行=LF)に指定して保存して下さい。
2."jcode.pl"のソースについては、修正不要です。
※私が作ったものではなく、Utashiro氏作成の漢字コード変換ライブラリです。
3.解凍した全てのファイルをサーバに転送
※サーバの転送先フォルダは、"cgi-bin"に限定されている場合があります。確認要。
※@NIFTYの場合:"cgi-bin"に限定
4.サーバに転送後のパーミッションの指定
CGIプログラム(xxxxx.cgi):755
データファイル(xxxxx.log):666
その他ファイル(jcode.pl):755
5.御自分のホームページから、CGIにリンク
※@NIFTYの場合:http://hpcgi?.nifty.com/*****/guest1.cgi
?,*****は、ホームページ用リンクURLのhttp://homepage?.nifty.com/****です。
詳しくは、「とほほのWWW入門」の「CGIの設置方法」 を参照
@NIFTYご利用の方は、「自作CGI利用方法」を参照
<参考:圧縮手順>
1.D:\>C:
2.C:\>CD C:\temp
3.C:\temp>lha a -rx nnnn dddd\*.*
4.C:\temp>lha s nnnn
※nnnn:圧縮後のファイル名
※dddd:圧縮するプログラム等が入っているフォルダ名
5. お薦めツール:
1.テキストエディタ: ※EUCを扱えるエディタが必要
・秀丸エディタ:シェアウェア
※コンピュータ上で日本語を表示するするための決まりが文字コードです。
WWWサーバは、一般的にUNIXサーバであり、UNIX標準の文字コードがEUCです。
日本語がEUCでないと、文字化けすることがあります。
また、改行コードは、「LF」でなければなりません。Windowsでは、「CR+LF」。
プロブラム保存の際に、文字コードを「EUC (改行=LF)」と指定して下さい。
詳細:「とほほのWWW入門」の「漢字コードについて」及び「改行コード」を参照
| 文字コードの種類 | 改行コード | |||
| シフトJIS | Windows,Macintoshの標準 | CR+LF | Windowsで使用 | |
| JIS | メール文書の標準 | LF | UNIXで使用 | |
| EUC | UNIXの標準 | |||
| UNICODE | WindowsNTで使用 | |||
2.FTPツール:
・WS_FTP LE:シェアウェア(但し、個人使用に限りフリーウェア)
・WS_FTP Pro:シェアウェア
・WinFTP:シェアウェア
・CuteFTP:シェアウェア
・Windows95 標準FTP:操作が、コマンド入力のため、面倒。
※各ソフトの入手方法・使い方:MySweetHomepage-なんでも質問箱-各ソフトウェアの使い方
※私のお奨めは、WS-FTP LEです。
DownLoad手順:窓の杜→ソフトライブラリ→インターネット関連の中のFTP・Archie関連→
WS FTP Limited
Edition→Win95用のダウンロード→DLリスト→ダウンロードサイト選択
3.CGI学習用お薦め書籍
・エーアイムック206:CGIで掲示板
・エーアイムック237:Perlでつくる楽しいCGI
6.PerlでSQLデータベース利用:
<目次>
1.データベースとは?
2.データベースソフトウェア
3.Webサーバ "AN HTTPD" インストール
4.プログラミング言語 "Perl"インストール
5.データベースソフト "MySQL"インストール
6.DBI(DataBase Interface),DBD(DataBase Driver)インストール
7.サンプルプログラム
7.Perlの追加モジュール
・ Image::Size:
"Image::Size"は、Perlの追加モジュールです。
画像のサイズ(height、width)を取得できます。
※不揃いなサイズの画像を、一律の大きさに縮小して一覧表示するのに便利です。
<利用例>
use Image::Size;
($img_width, $img_height) = imgsize("image.jpg");
・ Image::Magick:
"Image::Magick"は、Perlの追加モジュールです。
画像のサイズ(height、width)を取得できます。※他にも色々機能があるそうですが、私は知りません。
※不揃いなサイズの画像を、一律の大きさに縮小して一覧表示するのに便利です。
<利用例>
use Image::Magick;
my $image = Image::Magick->new;
$image->Read("image.jpg");
my ($img_width, $img_height) = $image->Get('width', 'height');
・ File::Copy:
"File::Copy"は、最新のPerlであれば、最初から入っているようです。
ファイルのコピーを行えます。
<利用例>
use File::Copy;
copy("コピー元ファイルA", "コピー先ファイルB")
;
8.迷惑投稿対策 (スパム対策)
掲示板を公開して悩まされるのが迷惑投稿です。
参考までに、私の対策を記載します。
| チェック項目 | チェック詳細 | Perl記述例 ※CGIの中に組み込んで下さい |
| 拒否IPアドレス | ログファイル等の記録を見て、拒否したいIPアドレスを指定します。 ※海外からの迷惑投稿には、効果無し |
|
| 拒否ホスト名 | ログファイル等の記録を見て、拒否したいホスト名を指定します。 ※海外からの迷惑投稿には、効果無し |
|
| 禁止ワード | 禁止ワードを指定します。 ※海外からの迷惑投稿は、リンクでサイトに誘導するのが目的のようです ので、禁止ワードに"http"を追加して、リンクを禁止すると効果大 ※但し、禁止ワードは、諸刃の剣です。 設定を間違えると、悪意の無い投稿も禁止してしまいます。 |
if ($in{'message'} =~ /アダルト|出会い|リッチ|セレブ/) { &error("禁止用語が含まれています"); } if ($in{'message'} =~ /http/) { &error("リンクを禁止しています"); } |
| 日本語チェック | 英語だけでの投稿を禁止したい場合、 メッセージに日本語が含まれている事をチェックします。 ※但し、最近の海外からの迷惑投稿は、日本語対応のようで、効果無し |
$com2 = $in{'comment'}; ($mat2, $code2) = &jcode'getcode(*com2); if ($code2 ne 'sjis') { &error("メッセージに日本語が含まれていません"); } |
| 国別チェック | 海外からの投稿を禁止したい場合、 IPアドレスから、ホスト名を調べて、国別コードを制限します。 ※"com"は、海外でも使えるので、禁止できない |
if ($host eq "") { &error("ホスト名を取得できません"); } if(($host =~ /jp$/)|($host =~ /com$/)|($host =~ /org$/)) { } else { &error("jp,com,orgのみアクセス許可"); } |
公開されているダウンロード可能な掲示板CGIの中には、迷惑投稿対策が付いているものが多いです。
まずは、その機能を利用して、足りない機能は、自分で追加して下さい。
不明な点は、JAVA・iアプリ 落書きコーナに投稿して頂ければ、回答します。
※私が普段見ている掲示板は、これしかないので、これを利用します。