CGI(Perl言語)入門 2009年2月5日更新  パソコンサポート 

これから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言語で説明します。
 「テキストエディタで、プログラムを作成し、サーバに転送」
 簡単に言うとこうなのですが、個々の作業には、山の様に多くの注意事項があります。
 ※詳細については、書籍、及び、下記の関連リンク集で、お勉強願います。
 ※私も、時間ができたら、七転八倒の貴重な経験を掲載したいと思っています。(^_^;)

4.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アプリ 落書きコーナに投稿して頂ければ、回答します。
※私が普段見ている掲示板は、これしかないので、これを利用します。

★.CGI(Perl言語) 関連リンク集