A b o u t   C G I   &   P e r l
Top > FAQ > About CGI & Perl


[#1] そもそもCGIPerlてなんですか?

先生 この質問はわりかし多いな。この2つの違いはなんですか? ていう感じで。
ミナ へへえ・・・ジツは私も良く解りませぇん。どう違うんですか?
先生 おいおい、いちおう「サイトナビゲーター」てポジションなんだから・・・。
まァ良い。ミナくんもこの機会に覚えるように。
ミナ はあい。で、どォなんですか?
先生 ふむ。[ CGI ]と言うのは、まあ細かい説明とか専門的な話はヌキにして、サイト閲覧者のある種のアクションに対して動的に反応するための技術とか仕組みとか、そういうものを実現するための「プログラム」だ。
ミナ 良くある掲示板とかチャットとか、アンケートフォームとかの類いですね。
先生 そそ。で、[ Perl ](「パール」と読む)とは、そのCGIのプログラム(「スクリプト」という呼び方をする)を記述するためのプログラム言語の1つ。まあCGIを書くための言語は他にもいくつかあるが、最も分かりやすくて扱いやすいのがPerl、と言えるだろう。
ミナ なるほどお。PerlてのはCGIを作るための方法の1つというコトですね。おんなじようなもんだと思ってた。
先生 そう思ってる人は多いと思うがな
また、CGIというのは「WWWサーバ」側で動作するプログラム。HTMLに埋め込まれ、クライアント側で動作する[ JavaScript ]などと違い、サーバ側の環境に依存するため、OSやブラウザの違いを意識することなく同じ出力結果(処理結果)を得られる。一般にサーバは複数の人間で共用するものだから、中途半端なスクリプトでサーバに負荷をかけるようなことのないよう、しっかりとした書き方を勉強せにゃならん。そう言うイミではPerlはエラーに厳しい言語、と言えるかも知れないな。
ミナ むむう。がんばんなきゃ。ですね。

<< Back To Faq


[#2] SSIていうのは?

ミナ なんか・・・アルファベット3文字のやつばっかりですね。
先生 はは。特に3文字のヤツがいちばん良いからな。またしても中途半端かつ浅い説明だが、[ SSI ]というのは、まあ簡単に言えばHTMLファイルの中にCGIを埋め込んでしまう手法のことだ。
ミナ ん〜〜? 普通のじゃダメなんですか?
先生 ふむ。基本的に、前の質問でも言ったが、CGIていうのはサイト閲覧者(クライアント)のアクションに対して反応を返す、と言うのが基本だったよな。フォームのボタンを押したり、リンクで直接スクリプトに飛んできたり。
けど、例えばアクセスカウンタとか。数字を表示するために、ボタンを押したりしないだろ?
ミナ ええ、そのページが表示されるとかってに表示されますよね。アレが・・・
先生 そのとォりッ! もう少し厳密に言えば、HTMLファイルからスクリプトを起動し、その結果をページと同時に表示するんだ。つまり、そのページが読み込まれると、同じタイミングでスクリプトも実行される。だからアクセスカウンタなどに最適なんだ。
ミナ へええ。便利ですねっ。
先生 ただしその分セキュリティ的な問題が発生しやすい。そのためSSIの使用を許可していないサーバも多い。SSIが使えるサーバでも、好き勝手使うのはやっぱり危険。小さいうちに正しい知識と充分な理解を得ることが出来れば大きくなってからも・・・
ミナ なんか別なこと教わってるような気分・・・。
先生 ・・・意味深な・・・。それはさておき、特に設定をしていないかぎり、SSIを使用したHTMLファイルの拡張子は.shtmlにする、という決まりもある。
ミナ その辺も、サーバの管理者に確認するべきところですねッ。

<< Back To Faq


[#3] CGIスクリプトを作るのに必要なモノは?

ミナ どんなふうなことを書くのかって言うコトはチュートリアルのとこで解ると思うんですけど、ナニを使えばいいのかなあ?
先生 ふむ。まあスクリプトを書くと言っても、モノ自体はタダのテキストファイルだから、普通のテキストエディタでも構わないんだ。マックな人なら「シンプルテキスト」で良いし、窓の人なら「メモ帳」でね。
ただし、基本的にスクリプトはサーバにアップして使うもの。そしてそのサーバのOSは大抵UNIXと言うモノ。文字の扱いがマックやウィンドウズとは異なるので、そのあたりを調整するものは必要になるな。
ミナ ?? それは、どうやって手に入れるんです?
先生 雑誌の付録CD-ROMとかにも文字コードや改行コードを変更するユーティリティは収録されてることがあるし、ベクター等のダウンロード専門サイトでも手に入る。
あとは、そういう複数の文字コードを扱えるテキストエディタを使うとかだな。
シェアウェアになるが、マックでは「Jedit」(これは私も使っているものだ)、ウィンドウズでは「秀丸エディタ」などがある。 どっちの前述のベクターで手に入るぞ。
ミナ 作るのに必要なのは、それだけ?
先生 そうそう。あと、サーバにアップしたあとでパーミッションを変更できるFTPソフトなんかも必要にはなるが。まあホームページを作ってる人ならこのへんは問題あるまい。

<< Back To Faq


[#4] 絶対パスとか相対パスってなんじゃらほい?

ミナ ああ良く言いますよねえ。「パスの指定」がどうとかこうとか。
先生 でもなんのコトかは解らん、のだろ?
まあ、「パス」てのは、例によって乱暴な言い方をすれば、「そのファイルがどこにあるか」、というコトを表すんだ。
ミナ 「○○○」というハードディスクの、「×××」というフォルダの中の、・・・て感じ?
先生 そっそ。そしてこの「パス」の表し方には、【絶対パス】【相対パス】という二つの表し方があるんだ。
前者はサーバのルート(最上位階層)から見てそのファイルがどこにあるか。後者は、現在ユーザがいる位置(カレントディレクトリという)から見てどこにあるか、というカタチで表される。
ミナ その辺がよっく解んないんですよねえ・・・。ウマい事ヤッちゃって下さいよッ。
先生 ふむ。それじゃオリジナルのとっても解りやすい説明をしてあげよう。
例えばだな。昔々、あるところに、「マインケハイツ」というアパートがありました。
ミナ わたしは出来ればおフロとトイレが別で、南向きの陽当たり良い部屋がイイなあ。
先生 (無視)でだな、1階の105号室に「ミナ・マインケさん」という人が住んでます。また、2階の204号室には「ハインリヒ・シュリーマンさん」という人が住んでます。
ミナ 女の子が1階なんて。危ないですよう。
先生 話がススまんッ。
で、客観的に見たら、ミナさんの部屋は「マインケハイツ・105号室」、ハインリヒさんの部屋は「マインケハイツ・204号室」となるわけだよな。つまり、このアパート全体を1つのサーバだと考え、それぞれの階をディレクトリと考えると、ミナさんの部屋はパスで表記すれば[ /1/5号室 ]となるワケ。(一番アタマに来る / というのはこの場合【スラッシュ】ではなく【ルート】と読む、サーバのトップを表す記号。アパートで言えば【正面玄関】に相当するかな)。同じように、ハインリヒさんの部屋は[ /2/4号室 ]となる。
こういうふうに、一番外側から見たファイルの位置(この例で言えば部屋の場所)を、【絶対パス】と言う。
ディレクトリマップで表すとすれば、こんな感じだ。

玄関【ルート(/) 1 1号室
    2号室
    3号室
    4号室
    5号室(ミナの部屋)
       
  2 1号室
      2号室
      3号室
      4号室(ハインリヒの部屋)
      5号室
ミナ ううん・・・なんとなくわかった・・・かな。じゃあ【相対パス】てのは?
先生 うむ。さっきの例に戻るが、ミナさんの部屋は「マインケハイツ・105号室」、ハインリヒさんの部屋は「マインケハイツ・204号室」だったな。ということは、ミナさんの部屋からハインリヒさんの部屋に行くにはどうすればいい?
ミナ え? ええと・・・まず今いる部屋を出て、階段を上がって上の階に行って、4号室に入る...ですよね? 違いますかね?
先生 いやいや合ってるよ。そのとォりだッ!
コレをサーバのパスで表そうとすると、ハインリヒさんの部屋は、ミナさんの部屋のあるディレクトリ1階】と同レベルにある2階】ディレクトリの中にある4号室】だから、[ ../2/4号室 ]というコトになる。この ../ の部分が、ミナくんが今言った「部屋を出て」に相当するんだ。
ミナ なるほど・・・それが、「自分が今いるところから見てドコにあるか」ということですか。
先生 そうそう。じゃあここで、もう少しこの例を使って練習してみるぞッ。今度は部屋をもっと分けてみよう。イッキにマンションに格上げだッ。

玄関【ルート(/) 1 5号室(ミナの家) リビング
        キッチン
        バス
        トイレ
        寝室
           
  2 4号室(ハインリヒの家) リビング
          客間
          キッチン
          バス
          トイレ
          寝室
ミナ おお〜〜ッ。こりゃ高そうな物件ですなあ。これで駅まで徒歩10分なんて条件良すぎですよ?
先生 妙なボケはもう良い。さっ、問題だッ。
1】「ミナさんの家の寝室」 を絶対パスで表しなさい。
2】「ミナさんの家の寝室」から見た「ハインリヒさんの家の客間」を相対パスで表しなさい。
そもさんッ!!
ミナ 妙チクリンな問題ですねぇ・・・。ええと・・・
1】は、 [ /1/5号室/寝室 ]でしょっ。
で、【2】は・・・寝室を出て、家を出て、2階に上がって4号室に入って、客間に入るから・・・
ズバリ!! [ ../../2/4号室/客間 ] でしょッ!!
先生 オオッ!! 作為的なほどカンペキなコタエだッ!
これでしくみがわかったかな?
ミナ うん、まあ・・・。でも、実際のサーバ上では・・・
先生 うむ確かにそうだな。じゃあ、最後に、実際良くあるパターンとかで考えてみようか。

/ usr public_html cgi-bin sample.cgi
               
          www index.html
              sample.html
              image.gif

こう言った例の中で、
1[ sample.cgi ]を絶対パスで表しなさい。
2[ index.html ]から見た[ sample.cgi ]を相対パスで表しなさい。
どォよッ?
ミナ まーかしてッ!
1】は、[ /usr/public_html/cgi-bin/sample.cgi ]
で、【2】は[ ../cgi-bin/sample.cgi ] でしょッ!!
先生 オミゴトッ!! ナガナガと説明してきた甲斐があったというモノだ。

<< Back To Faq