ビギナーズ CGI

 初歩から始める初心者向けPerl-CGI講座  

| トップページ | CGI設置 | CGI作成 | 作成事例 | 設置用語 | 作成用語 | 関数リファレンス | FAQ | お問合せ |
  
CGIの設置方法
フリーで配布されているCGIを設置する際の手順や注意事項などの説明です。

CGI作成の初歩
初めてCGIを作る方向けの手順を簡単な例で説明しています。

CGI作成ヒント集
こういう事をする時は、どのように行えばいいのか?など具体的な事例を紹介します。

CGIの設置に関する用語
CGIの作成に関する用語
CGIの設置や作成時に使われている用語や関連知識を掲載しています。

設置に関するFAQ
作成に関するFAQ
設置や作成をする際に起こりがちなトラブルの説明と、よくある質問とその回答を掲載しています。



 
 


用語集



以下から確認したい用語をクリックして下さい。

・ 変数 ・ グローバル変数 ・ ハッシュ
・ 配列 ・ サブルーチン ・ Cookie
・ 引数 ・ ファイルハンドル ・ 不可逆暗号
・ 局所化 ・ システムコマンド ・ 無限ループ
・ モジュール ・ 変数のスコープ ・ ディレクトリハンドル
・ コメントアウト ・ ヒアドキュメント ・ ネスト
・ エスケープ ・ スタック ・  とは何の意味?
・ エンコード ・ 演算子 ・ 局所化
・ デコード ・ 正規表現 ・ スカラー
・ ローカル変数 ・ 連想配列 ・ データ型
・ リスト ・ エスケープシーケンス ・ 条件分岐の真と偽
・ ブロック ・ undef ・ 環境変数
・ コンテキスト ・ ライブラリ ・ Content-type
・ mime-type ・ 文字コード





変数

様々な値を記録しておく入れ物で、一つの値を記録しておくものをスカラー変数、複数の値を記録しておくものを配列、文字をキーとして複数の値を記録できるものを連想配列と呼びます。

例 (変数 $a に田中さんを入れ、変数$a を表示してみる)
$a = "田中さん";
print $a;

実行結果
田中さん


例 (変数 $a に田中さんを入れ、その後変数 $a に伊藤さんを入れ、変数 $a を表示してみる)
$a = "田中さん";
$a = "伊藤さん";
print $a;

実行結果
伊藤さん

伊藤さんで上書きされています。



ページ先頭へ戻る


配列

配列は複数の値を記録するもので、 @hairetu などと示します。
配列に記録された値は $hairetu[0]  $hairetu[1] $hairetu[2] など添字を付けて示します。
要素の先頭は 0 から始まります。

例 (配列 @hairetu の要素 $hairetu[0]  $hairetu[1] $hairetu[2]  に田中さん、鈴木さん、伊藤さんをそれぞれ入れて表示する)


$hairetu[0] = "田中さん";
$hairetu[1] = "鈴木さん";
$hairetu[2] = "伊藤さん";

print "$hairetu[0]\n";
print "$hairetu[1]\n";
print "$hairetu[2]\n";

実行結果
田中さん
鈴木さん
伊藤さん



例 別の入れ方
@hairetu = ("田中さん","鈴木さん","伊藤さん");

print "$hairetu[0]\n";
print "$hairetu[1]\n";
print "$hairetu[2]\n";

実行結果
田中さん
鈴木さん
伊藤さん



ページ先頭へ戻る


引数

引数は関数やプログラム、サブルーチンなどに渡したい値です。
例えば、print "tarou"; の場合、print 関数に "tarou"; を引数として渡しています。
CGI に引数を渡すときは、 〜cgi?mode=zero&set=1234 などとします。

ページ先頭へ戻る


局所化

変数をそのまま使うと、グローバル変数(どのからでも参照できる変数)として扱われますが、 変数の前に my や local をつけると、ローカル変数(限られた場所からのみ参照可能な変数)として利用できます。
これを使う事で、誤って同じ変数名を使用してしまい、動作がおかしいなどの状態を防ぐ事ができます。
local は定義したサブルーチンの中でのみ有効です。
myはさらに絞られ、サブルーチン内から別のサブルーチンで値を変更できません。

ページ先頭へ戻る


モジュール

モジュールは Perl の機能を拡張する為に組み込むもので、既にサーバ側にインストールされているか、
無い場合は自分でインストールしなくてはなりません。(インストールできる環境の場合のみ)
有名なものでは CPANモジュールなどがあります。

ページ先頭へ戻る


コメントアウト

コメントは先頭に # をつける事で、それ以降実行させない覚え書きとして使える機能で、これを使って一時的にプログラム内の一部分を無効化する事ができます。
例えば下の部分を一時的に無効にしたい場合は先頭に # を付けていきます。

$a = "tarou";
print "$a";
一時的に無効になる

#$a = "tarou";
#print "$a";

消してしまうと、再度書き直さなければいけませんが、これを使えば後で # を取るだけで戻す事ができます。

ページ先頭へ戻る


エスケープ

意味のある記号などを意味のない通常の文字列などとして扱う場合などに使います。
下のようにHTMLソースを書き出す場合、 " の中に " が入っているので上手く動作しませんが、内側の " をエスケープする事で上手く動作します。
print で " は書き出す文字列を囲う役割をしているので、その中にさらに " が入っていてはいけません。
その為、下のように無効にしたい部分の前に \ を入れます。
HTMLページを書き出す場合、「表示」や「可能性」など文字化けするものがありますので、この場合も文字ごとに \ を付けてエスケープします。

print "<a href="./aaa.gif">GIF</a>";
内側の " を文字列として扱う

print "<a href=\"./aaa.gif\">GIF</a>";


ページ先頭へ戻る


エンコード

何らかの規則にしたがって変換する事です。

ページ先頭へ戻る


デコード

エンコードされた情報を元に戻す事です。

ページ先頭へ戻る


ローカル変数

限られた範囲からのみ扱う事ができるようにした変数です。

local $a;
my $a;

local は定義されたサブルーチン内でのみ有効で、その中でさらにサブルーチンが呼び出されても使えます。
my はさらに範囲が小さく、定義されたサブルーチンのみ有効、さらにサブルーチンが呼び出されても使えません。

ページ先頭へ戻る


グローバル変数

何もつけずに変数を使うと、このグローバル変数となり、どの場所からでも扱う事ができます。

ページ先頭へ戻る


サブルーチン

サブルーチンはある程度のソースをまとめたもので、共通部分などを1度の記述で何度も使いまわしする事ができます。
ソースが長くなってくると、使った変数名を忘れてしまう事もあり、トラブルの元になるのでサブルーチン内で使う変数は局所化するのが良いです。

サブルーチンの定義

書式
sub サブルーチン名
{

}



sub keisan
{

}
呼び出し方

書式
&サブルーチン名;



&keisan;

例(引数付き)
&keisan($a,$b);


ページ先頭へ戻る


ファイルハンドル

ファイルを開く時に橋渡しをするものです。
<ファイルハンドル> で示され、これを変数や配列に代入する事でファイルの内容を自由に扱えます。

ファイルを開く

open (IN,"data.log");
@hairetu = <IN>;
close (IN);

$i = 0;
foreach $view (@hairetu)
{
  print $hairetu[$i];
  $i++;
}

この後は配列にファイルの内容が
入っているので、自由に扱う事が
できます。
スカラー変数に代入すると先頭行
のみが変数に入ります。



ページ先頭へ戻る


システムコマンド

system (); でサーバ上の許可されているコマンドを実行する事ができます。
返された値をそのまま変数に入れることもできます。
$netstat = system("netstat");

ページ先頭へ戻る


変数のスコープ

変数の有効範囲をスコープといいます。
グローバル変数であれば全ての場所から、local や my で局所化されたのであれば、それぞれの範囲がスコープです。

ページ先頭へ戻る


ヒアドキュメント

まとめて変数にいれたり、例えばまとめてHTMLページを書き出したりする場合に使用します。

下の例では HTML ページを出力しています。
print <<"HTML"; から HTML までを出力し、HTML という文字列は開始と終了印が同じであれば、どのようなものでもかまいませんが、終了する印の HTMLの前にスペースなど入れるとエラーとなります。
表示や可能性など書き出すと文字化けする文字がありますので、その場合 \表\示 など問題の文字をエスケープします。

print <<"HTML";

この中の内容はまとめて表示されます。<BR>
これは print関数に渡していますが、他<BR>
の関数や変数などに入れる事もできます。<BR>


HTML


ページ先頭へ戻る


スタック

先に入れたものが最後に出てくる (FILO) 配列などを指します。
FILO以外にも配列の先頭に入れる、取り出す、配列の最後に入れる、取り出すなどの関数がありますので配列は自由に操作できます。

ページ先頭へ戻る


演算子

数値や文字列を計算したり結合したりする記号を演算子といいます。

計算する

$a = 1 + 2;
print $a;

【実行結果】
3



+が演算子です。
文字列結合

$a = "山田" . "たろう";
print $a;

【実行結果】
山田たろう



. が演算子です。



ページ先頭へ戻る


正規表現

正規表現は、同じ文字が含まれているかなどを探す時に、そのパターンを文字列で表す手法です。
細かなオプションがあり、複雑なものはパターンの書き方がとても難しいです。

先頭にAAAが含まれているかチェックする

$a = "AAABBBCCC";
if ($a =~ /^AAA/)
{
  print "「先頭がAAAです。」";
}

実行すると先頭がAAAの場合のみ
「先頭がAAAです」と表示します




ページ先頭へ戻る


連想配列

配列の場合各要素にアクセスする時、番号を添字として使用しますが、
連想配列の場合、文字を添字として使用します。

【関連項目】 配列の簡単な使い方 (配列の使い方と、連想配列の概要を説明しています)


ページ先頭へ戻る


ハッシュ

連想配列の事をハッシュとも呼びます。

【関連項目】 配列の簡単な使い方 (配列の使い方と、連想配列の概要を説明しています)


ページ先頭へ戻る


Cookie

Cookie (クッキー)はブラウザに何らかの情報を保存しておける機能です。
IDやパスワードなどログイン状態を持続用途などに便利な機能です。

【関連項目】 Cookie の書き出しと読み出し


ページ先頭へ戻る


不可逆暗号

元の状態に戻す事ができない暗号化です。
暗号化された文字列から元のデータが得られない為、テキストファイルなど
にパスワードなどを記録する際でも安全です。


【関連項目】 不可逆暗号の生成と確認


ページ先頭へ戻る


無限ループ

永遠に終わらない繰り返し処理です。
繰り返し処理では必ず終了できる条件が必要で、上手く終了できない場合、
サーバに過大な負荷を与え、場合によってはサーバをダウンさせてしまう事も
ありますので、繰り返し処理をする際には十分注意が必要です。

一般的なサーバでは、〜秒以上時間の掛かるプロセスの場合、強制的に終了
させられるのでサーバダウンまでには至らないと思いますが、それらの設定が
されていない場合などありますので、テスト環境が出来れば必要です。


ページ先頭へ戻る


ディレクトリハンドル

ファイルハンドルと同様にディレクトリを開いた後、このディレクトリハンドルに
開いたディレクトリを関連付け、何らかの操作を行います。


ページ先頭へ戻る


ネスト

条件式の中に条件式を入れたり、繰り返し処理の中に繰り返し処理を入れるなど
の書き方をネストと言います。

if ($aaa > 10)
{
  if ($bbb eq "tarou")
  {
    if ($ccc eq "ABC")
    {
      print "AAA";
    }
  }
}


ページ先頭へ戻る


って何の意味?

書籍などでこのように表記されていますが、これはバックスラッシュといってJISでは
\ に相当します。
書籍などに記載されている  は \ に読み替えてもらって構いません。
ASCII では  JIS では \ と、双方共同じコード (0x5c) だからです。

例えば表という文字をエスケープする際には  と表記されている所を とすれば結構です。


ページ先頭へ戻る


局所化

変数や配列を限られた部分のみから参照可能な状態にする事 → ローカル変数

ページ先頭へ戻る


スカラー

数値や文字列を表す単純なデータ型を示します。
スカラー変数は $aaa など $記号で始まる文字列で表記し、単一のデータを格納する事ができます。

ページ先頭へ戻る


データ型

データの形式で、スカラー ($aaa) 、配列 (@aaa) 、連想配列・ハッシュ($aaa{'ccc'}) などの形式

ページ先頭へ戻る


リスト

複数の式や値をカンマで区切って並べたりした複数の要素で、それを配列に代入すると配列の各要素に代入されます。

【例】
@aaa = ("a","b","c","d");
$aaa[0] には aが
$aaa[1] には bが
$aaa[2] には cが
$aaa[3] には dが
それぞれ代入されます。


ページ先頭へ戻る


エスケープシーケンス

文字コードを表す為の表記で \n が改行、 \t がタブを表すなどの表記方法です。


ページ先頭へ戻る


条件分岐の真と偽

条件分岐や繰り返し処理などの条件として、正しいものが真、正しくないものが偽となります。
条件として設定されたものの他に、下のような場合もあります。

【真】 0以外の値 (例えば if ($aaa) とすると、$aaaが0・空以外の場合真になります)

【偽】 0、undef(未定義値)


【例】
例えば、下のような場合変数 $aaa には文字列 abc が入っていますので、
0や空ではなく、サンプルソースを実行すると 真です と表示されます。



ページ先頭へ戻る


ブロック

複数行を一まとめにするもので、波括弧 (ブレース { } ) で囲った部分が1つのブロックです。
ブロック内でローカル変数を定義すると、そのブロック内のみで有効となります。


ページ先頭へ戻る


undef

未定義の値で、値を設定していない変数の値を undef といいます。


ページ先頭へ戻る


環境変数

システムなどの情報を持っている変数で、CGI ではアクセスした端末の情報やサーバの情報の取得が行えます。
$ENV{'要素名'} で表される連想配列に格納され、いつでも参照できます。
【関連項目】 環境変数の取得


ページ先頭へ戻る


コンテキスト

値や変数、配列などをどのような扱い方にするかを示すものです。

【スカラーコンテキスト例】
代入された値は単一の値(スカラー)として扱われます。
$aaa = @array;

【リストコンテキスト例】
代入された値は複数の値(リスト)として扱われます。
@aaa = @array;


ページ先頭へ戻る


ライブラリ

ライブラリは何らかの処理をするサブルーチンなどが入ったもので、日本語の文字コード変換などを行う
jcode.pl や cgi-lib.pl など多くのライブラリが一般に配布されており、通常 require で読込み、使用したい
サブルーチンを呼び出して使用します。


ページ先頭へ戻る


Content-type

Content-type (コンテンツタイプ)は CGI側からブラウザ側へ、送信されるデータのタイプがどのような
ものかを伝えるもので、例えばHTMLページでは text/html として送信するデータがHTMLページである
事を伝えたり、 image/gif などとして送られるデータが GIF画像である事などを伝えます。

CGI から何かを出力する場合は、この指定が必要ですがサーバから直接データを受け取る場合、
例えばHTMLページにアクセスしたり、画像などにアクセスした場合、サーバ側の設定により適切
なコンテンツタイプが出力されます。
その為、対象のファイルについてサーバ側で適切な設定がしていないと、画像ファイルでもテキストとして
中身が表示されてしまったり、ダウンロードさせたいのに上手く行かないなどの状態が起こります。


ページ先頭へ戻る


mime-type

mime-typeは上記 Content-type の種類の事を指します。



ページ先頭へ戻る


文字コード

コンピュータで文字をどのように表すかを決めるコードで、英語のASCII が基本になっており、
日本語に対応する為に シフトJIS や EUC などのコードがあります。
表 や 能 など文字化けするとありますが、これはシフトJISのコードの2バイト目が ASCII コードと重なっている為で
EUCの場合、ASCII と重複するコードが無い為、これらの文字化けは発生しません。


ページ先頭へ戻る





Beginner's CGI  - Copyright (C) 2003 aimix. All Rights Reserved -