CGIと仲良くなろう!

CGIとは。

なんとかこうとかの略だとか、そんな事は説明しません笑
CGI=プログラムで出来ている。ま、そんな感じでよろしくどうぞ。

CGIの設置方法

  • CGIが動作するサーバーであること(あたりまえ)
  • CGI、テキストファイルは、FTPでアップロードする際に、「アスキーモード(テキストモード)」で転送して下さい。
  • Perlのパスはサーバー毎に異なりますのでご確認ください
  • FTPアップロード後に、パーミッションの変更を行って下さい。CGI
  • 及びjcode.plは755、その他ファイルは666でOK。(一部プロバはこの限りではありません)
CGIを克服する前に

以下の4項目をしっかり覚えれば、『設置』出来るはず!
1回設置出来てしまえば、2回目からは同じ手順を行うだけです。
さぁがんばってみましょう!

1.Perlのパス
2.アップロードするファイルと転送モード
3.アップロードする場所
4.パーミッションの設定

では、1項目ずつ以下で説明致します。

Perlのパス

ソース(プログラムの中身)の1行目に
「#!/usr/local/bin/perl」いう訳わからん呪文が書いてあるでしょ?
これが「Perlのパス」

これは、加入しているプロバイダーによって異なります。
ですので、一概に「これ!」とは言えません。
あなたがご加入のプロバイダーのサイトへ行けば、CGI設置可能なサーバーでしたら確実に『CGIの設置方法・注意事項』等のページがあるはずです。
それでも不明な場合は、プロバイダーへ聞けば教えてくれるはずですよ。

ここが間違っている場合、あの有名な「500サーバーエラー」が表示されます。(笑)

アップロードするファイルと転送モード

当サイトのCGIは、極力ファイル数を少なくしています。
ただ単に設置しやすくさせただけで、メリットなんて何もありません。(爆)

僕が作ったCGIでは以下の拡張子を持つファイルしかありません。たぶん。

どのファイルをアップロードしたら良いかどうかは、ダウンロードしたCGIの説明
ページに記載していますので、それをしっかり読んでくださいね。

で!!ここでつまずく人がとても多い事があります!
それが『転送モード』です。

これを間違えると残念ながらCGIは動作致しません。
上記に記載した通り、各ファイル(拡張子)の転送モードをしっかり覚え・・・
というより「画像以外は必ずアスキーモードで!」と覚えてしまっていいかもね。(笑)
σ(^_^)は使った事が無いんだけど、ホームページビルダーだっけ?HP作成ソフトの。
あれとかで自動でサーバーにファイルを転送出来たりするんでしょ?
そのときに設定があると思うんだぁ。HP作成ソフトに限らず、
転送モードで「自動」という設定になっていて設置に失敗するという事が多くあります。
だからいつも「転送モード」を意識してサーバーにアップロードするように心がけてくださいね。

アップロードする場所

プロバイダーによっては、「CGI本体と画像を転送するフォルダが異なる」、又は
「HTMLファイルとCGIを置くサーバー自体が全然別」なんてことがあります。
自分の加入しているプロバイダーの注意書きは必ず見るようにして下さいね。

たとえば、「Nifty」や「hi-ho」では、CGIを設置する場所には「画像は置けません」。
「hi-ho」に関しては「cgi-bin」直下でなくてはCGIは動作しません。cgi-binフォルダの
中にフォルダを作成出来ないという事になります。
こんなの説明見ないとわからないでしょ~?だから見るようにねー!

『設置例』…掲示板と日記帳を付けるぞー!
 ※ちなみにhi-hoやNifyでは下記のような構成では設置出来ません。

▼こんな感じで設置しようと考えた。

—cgi-bin–
   |–jcode.pl
   |–next.gif
   |–back.gif
   |–bbs–
   |  |–gif
   |  |  |–kakikomitai.gif
   |  |–kakikomitai.cgi
   |  |–kakikomitai.txt
   |–dialy–
   |  |–tackynote.cgi
   |  |–tackynote.txt

■上記の設置例を説明すると、

1.cgi-binフォルダの下にcgiを設置するようにプロバイダーから指示されているので
  cgi-binの中に掲示板用フォルダ(bbs)と日記帳フォルダ(dialy)を作ってみた。

2.jcode.plは基本的に1個あれば良いので、各フォルダの中に各々入れないで
  (入れてもいいんだけどね)1個だけ、cgi-bin直下に転送した。

3.画像(next.gif,back.gif)は全CGIで共通に使いたいので、
  これもcgi-bin直下に転送した。

CGIソースの修正

色々設定箇所はあるんだけど、『これだけ設定したら動く!』という部分だけ
抜粋して書いてみますね。

っと、修正方法を説明する前に、みなさんが苦手だと思われる「パス」について
説明しましょう。ちなみにですが僕が苦手なのは「シイタケと梅干し」です。(爆)

上記のフォルダ構成は下記の通りでしたね。

—cgi-bin–
   |–jcode.pl
   |–next.gif
   |–back.gif
   |–bbs–
   |  |–gif
   |  |  |–kakikomitai.gif
   |  |–kakikomitai.cgi
   |  |–kakikomitai.txt
   |–dialy–
   |  |–tackynote.cgi
   |  |–tackynote.txt

各ファイルへのパスの表現方法は↓んな感じかな

■1階層の区切りは「/」で表現します。
■「一つ上の階層にある場合は点が2個くっつきます」=「../」ね。
■「二つ上の階層にある場合は、上記の2倍!」=「../../」ね。
■「三つ上の階層にある場合は、上記の3倍!」=「../../../」ね。
■「四つ上・・・・ってもういいよね?(^^ゞ」

■「一つ下の階層にある場合は「./」で自分の場所という事になっているので、
 =「./xxx」となり、「自分の下にxxxとなります」

※CGIの設置時は、「”自分”=CGIの位置」なので、
「CGI本体を設置しようとした場所から見た、他のファイルの位置」を
指定する事になります。

さて、それでは説明のお時間です。

■#!/usr/local/bin/perl

頼むよ~これを正しい内容にしておくれよ~ここは大事だからね!

■require ‘./jcode.pl’;

日本語をお使いのあなた!これが無いと文字化けしちゃうので使わないとダメですよ。
という事で、jcode.plを設置した場所を指定するのです。

上記で説明したように、「一つ上の階層にjcode.plを設置した」ならば、
「require ‘../jcode.pl’;」となるのは理解出来ましたか?

■$script = “./CGIスクリプト名”;

ここは、自分(CGI)の名前を指定する部分です。
ここが「一つ上の階層」とか「一つ下の階層」等になることは
絶対にありません。「自分の位置」を指定するのですからね。

また、ここでもよく指定ミスがありますね~
たとえば、掲示板スクリプト『mkakikomitai.cgi』の名前を
「bbs.cgi」とファイル名を変更したとします。
その場合、ここの指定も「$script = “./bbs.cgi”;」と修正しないと
設置は出来るけど、投稿したら『ページが見つからない』等の
エラーになる原因となりますのでご注意下さい。

あとねぇ、サーバーによっては、「$script = “http://bbs/スクリプト名.cgi”;」の
ように「http」からの指定を行わないと、投稿後にページが表示されないで
ダンマリしてしまい、再度見てみると「ありゃー投稿はされているでぇ!」という
現象になる場合もあります。

■$logfile = “./ログファイル名”;

CGI本体と同じ位置(階層)に置くのであれば、「./ログファイル名」でOK!
上記で説明したように、パスの表記がわからないー!といって、
「http」から指定するとエラーになるからねー!

■$xxx_gif = “./画像ファイル名”;

答えは一つ!
「画像はhttpから指定すれば間違いない!」です。

よく「アイコンが表示されない」とサポート掲示板で質問がありますが、
それは「パスが間違っている」・「サーバーの制限でそのフォルダに画像は
設置出来ない」という理由しか無いんですわぁ。

『画像をアップしたのに表示されません!』という時は、まずは
ブラウザを開いて、自分がアップロードした画像を直接呼び出して
見てください。
それで「見つかりません、とか表示出来ません。」となったら、上記の理由という事になります。

CGIを設置して画像が表示されない場合、
画像が「×」で表示されますよねぇ?
その×の位置でWindowsをお使いの人(Macな方ごめんねぇ、Macは
わからないのぉ~(^^;;;)であれば、「右クリック→プロパティー」を押下
すると画像ファイルへのアドレスが表示されているはずです。
それが自分の思った場所でないんじゃないかな~~~?

パーミッションの設定

Windowsマシンをお使いの方は、僕が使っている素晴らしいFTPソフト【FFFTP】であれば、
アップロード後に、そのファイルを選択し、右クリックすると「属性変更」というのが表示されます。そこでパーミッションを変更します。

 あっ!ちなみにFFFTPの場合の【転送モードの指定】は、下記の画像の
 「ツール(T)」のちょうど下に赤い字で「A」とあるのが「アスキーモード」、
 緑の字で「B」と(見えないか。(^^ゞ)あるのが「バイナリーモード」、
 その右の「AとBが一緒になってる」のが、「自動」です。
 ここを「自動」にするとミスが多くなるので、一つずつ正しい転送モードを
 指定してアップロードするのが望ましいと思います。

1.パーミッションを変更するファイルを選択します。
2.選択したら右クリックを押下するとポップアップメニューが表示されますので
  「属性変更」を選択します。
3.そうすると「属性の変更」ウインドウが表示されますので、
  「現在の属性」を指定通りのパーミッションに変更してください。

■呼出=4
■書込=2
■実行=1

すべて加算すると「4+2+1=7」でしょ?
それを「オーナー・グループ・その他」のすべてに割り当てると「777」。
こういう風に設定するんですわ。
ちなみに一度設定後、CGIを修正して再度アップした時にはもうやらんくてオッケーよん。

Macな方や、他のFTPソフトをお使いの方はプロバイダーのHPへ行くと、多分何種類かのFTPソフトでのアップロードの方法を説明してくれていると思いますので一度探してみてくださいね。それで無かった場合は、今では「CGIの設置」について詳しく説明してくれているサイトがたくさんありますのでそちらも探してみてくださいね。

「パーミッション」とは、『アクセス権(使う許可)』を与える事です。

また、このパーミッションの設定もプロバイダー毎に異なりますので
一度自分の加入しているプロバイダーのサイトで調べてみてくださいね。

パーミッションの設定はお済みですか?
では、自分の設置したCGIを呼び出してごらん?
どう?どう?表示されましたか???
もしエラーになった場合は、以下の原因が考えられます。

最後に。

CGIの設置は

1.CGIソースのPerlのパスを正しい内容に修正する
2.「jcode.plとCGI本体」を正しい設置方法で転送する
3.パーミッションの設定を忘れない

これだけで基本的には動作するはずです。
CGI初心者という方は、まずはCGI内部の細かい設定は
後回しにして(修正時にミスしたら、何故エラーになるのか
わからなくなるでしょ?)、上記の作業だけを行ってみてください。

設置で大事な事は、また言いますが「あきらめない」事です!!