HOME > CGI > CGIと仲良くなろう!



1.CGIとは
なんとかこうとかの略だとか、インターネットとパソコンでどうやって動作するなんて
事はどうでもよい人だらけでしょうからそんな事は説明しませんわ。(笑)
要するに、現在ではホームページを作成するにあたって、HP作成ソフトやテキストエディタ等で
ホームページを作っている人が多いと思うんだけど、それでは作れない(今のHP作成ソフトで
作れるのがあるのかどうかわからないけど。(^^ゞ)モノ。
CGI=プログラムで出来ている。 そんなところですわ。
えっ?「プログラムって?」ですと!? .........................................Oo。。(_ _))ヽ(^^ )
1.説教の時間。(笑)
「CGIが難しい」・「全く何をやっていいのかわからない・・・」と決めつけているあなた!
そりゃ〜確かに最初は誰でも難しいって!あったりまえですって〜♪

だぁってさぁ、車を運転した事が無い人がいきなりプロドライバーのように運転出来ますか〜?
その為には、教習場に通って一つ一つ技術を身に付けていくものっすよね〜。

何も勉強もしないで、「CGIわからないもん!」・「CGIって難しいからやらないよ〜だ!」なんて
言ってる人はこの先を読んでもわからないと思います。m(_ _)m

まずは、「最初から諦めない」・「欲張らない」という事を自覚しながらCGIと仲良くしていきましょう。
2.CGIを克服する前に
サポート掲示板でサポートしていて思う事がいくつかあります。
ほとんどの方が「おしいのにな〜もうちょいだったのにぃ」レベルなんですよ。マジで。

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

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

では、1項目ずつ以下で説明致します。
3.『Perlのパス』
ソース(プログラムの中身)の1行目に
「#!/usr/local/bin/perl」いう訳わからん呪文が書いてあるでしょ?
これが「Perlのパス」

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

ここが間違っている場合、あの有名な「500サーバーエラー」が表示されます。(笑)
4.『アップロードするファイルと転送モード』
当サイトのCGIは、極力ファイル数を少なくしています。
ただ単に設置しやすくさせただけで、メリットなんて何もありません。(爆)

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

ファイル名(拡張子) 説明 転送モード
〜.cgi CGIプログラム本体です アスキーモード
〜.txt

ログファイルです。「ログ」とは投稿フォームから「登録された記事」の事です。それを保管しているファイルという事になります。

アスキーモード
〜.ini 初期設定用ファイルです。ログファイルとは別に管理したい情報や、CGIの初期設定情報等に使ったりしています。 アスキーモード
〜.cnt カウントファイルです。カウンター数を保管するファイルですね。 アスキーモード
〜.dic 辞書ファイルです。拡張子をあえて「dic」にしていますが、「辞書だよ〜」とわかるようにそうしているだけでログファイルと変わりはありません。 アスキーモード
〜.pl 当サイトでは、「jcode.pl」でしかこの拡張子を持つファイルはありません。jcode.plは日本語を扱うのに必要です。 アスキーモード
〜.gif 画像ファイルです。 バイナリーモード

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

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

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

5.『アップロードする場所』
プロバイダーによっては、「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

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

問題 答え
kakikomitai.cgiから見た、jcode.plは? ../jcode.pl
kakikomitai.cgiから見た、kakikomitai.txtは? ./kakikomitai.txt
kakikomitai.cgiから見た、kakikomitai.gifは? ./gif/kakikomitai.gif


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

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

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

ファイルの位置を指定する場合での注意&楽になるコツ
書き込みを行うファイル(ログファイルの事ですね〜)は、「http://〜xxx.txt」のようにhttpからのパスで表記するとエラーになります。必ず上記で説明したようなパスでの記述を行って下さい。
画像ファイルは『ファイルに対して書き込み処理』は行わないので、「http://〜/xxx.gif」のようにhttpからの指定した方が楽ですね♪


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


■#!/usr/local/bin/perl

上記の「3」で書いたやつっすよ!頼むよ〜これを正しい内容にしておくれよ〜♪
ここは大事だじょー!

■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本体と同じ位置(階層)に置くのであれば、「./ログファイル名」で
オッケー。普通は同じ位置だよね?違う?(^^ゞ
上記で説明したように、パスの表記がわからないー!といって、
「http」から指定するとエラーになるからねー!

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

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

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

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

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

6.『パーミッションの設定』

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の設置」について詳しく説明してくれているサイトがたくさんありますのでそちらも探してみてくださいね。

「パーミッション」とは、『アクセス権(使う許可)』を与える事です。
プロバイダーによってはパーミッションの設定が一切不要な便利なところも
ありますよ〜♪ ※hi-hoは不要なんですわ〜♪

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

パーミッションの詳しい説明をしても面白くないので(笑)、
σ(^_^)がバカの一つ覚えで設定している値を書いておきますわ。
あくまでも「プロバイダーによって異なる」。覚えておいてよー

で、僕の場合。

『僕のメインサーバーの場合』

ファイルの種類 パーミッション値
jcode.pl 755
拡張子が「cgi」 755
その他の拡張子 666
フォルダ 777

『サーバーが「トクトク」の場合』

ファイルの種類 パーミッション値
jcode.pl 700
拡張子が「cgi」 700
その他の拡張子 600
フォルダ 701

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

エラー内容 原因
403 Forbidden ・パーミッションの設定が間違っています
404 Not Found ・アップロードされている場所が違う(呼び出し方が間違っている)と思われます。
500 ServerError ・Perlのパスが間違っている
・CGIの修正にミスがある
 ※余計な場所に全角スペースが混入
 ※「'」とか「;」を消したとか追加し忘れたとか。
■○○ファイルのオープンに失敗しました
■○○フォルダが見つかりません
・このメッセージが表示された場合は、当サイトのCGIであれば、CGI自体は設置出来ている状態。ですが、ログファイルや過去ログディレクトリ等の設置でミスがある事を示します。

1.ログファイルのパーミッションの間違い
2.フォルダのパーミッションの間違い
7.『最後に。』

復習しますが、CGIの設置は

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

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

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

苦労してもいいじゃない?
苦労した分、設置出来た時の喜びは大きいですからね〜♪(^-^)

7.『最後に。2(笑)』

σ(^_^)がどうやってCGIを覚えたかを教えますね。
・・・っていうかさぁ、僕はマジで星の数ほどいるCGI開発者の中でも
技術力はかなり低いです。(爆)
これは謙遜しているのでも全くありません。
そんな僕にでも作れるのですから、みなさんもやろうと思えば出来ますって。
あっ、ですので「当サイトのソースを見てCGIを覚えるぞ!」という行為は
僕はオススメ致しません。(笑)

初心者が「アイコン付きで〜レスも出来る掲示板を作るぞ!」と言っても
まずほとんどの人が出来ないと思います。
また同じ事を言いますが「欲張ってはいけません」。

僕の場合、どうやってCGIと出会ったか、また、覚えたのかと言いますと、
有名CGIサイトの「Try The Homepage」を見つけたのが最初でしたねぇ。
Terra氏の個性的なスクリプトは斬新であり新鮮であり衝撃でした。
それを見て、「僕も作りたいぃぃぃぃ!!!!」と思ったのでありました。

だけど「CGIって?Perlって?」の状態でしたので、
次に、ここも有名ですね、『とほほのwww入門』で
CGIとPerlのページをほとんどプリントアウトして、電車や休憩時間、
またある日はトイレの中(笑)でも勉強しました。
その勉強した結果が現状の技術とはお恥ずかしい限りですが。(^^ゞ

あ、書籍も購入しましたよ。
今ならCGI本もかなりの数があるから
適当に買ってみてもいいかもね〜♪

で、話を戻してっと。

プリントアウトして基本的な記述方法を理解出来るように
な〜んとなくなってはきたけど、じゃぁ自分で作れるか!?と
思うと作れない。

そこで、『フリーで配布されているCGIをカスタマイズ(変更する)』
という事にしました。
たとえば、掲示板CGIの「HOMEに戻る」というリンク部分を
「【HOME】」に変更するとか、画像を使っていない部分に画像を使って
みるとか、設定項目では設定出来ないところに文章を追加してみたりとか。

多くの方が「CGIをいじるのが恐いー!!!」と思っているんだと思います。
確かに、カスタマイズした事によって、CGIが誤動作して他人へ迷惑を
かける可能性はあります。

「色を変更する」・「文字を変更」程度のカスタマイズであれば
他人へ迷惑をかけるレベルではありませんので恐がっていないで
そこから一歩踏み出してみましょ〜♪

ですが、段々CGIを覚えてくると、「あれもやりたい、これもやりたい」と
なってきますよね〜?僕はそうでした。(^^ゞ

ただ、この段階にくると、自分のCGIでサーバーをおかしくしたら・・・とか
すごく思うようになってきました。
そのときから、ローカル(自分のパソコン)でCGIを動作出来る環境を作って
アップロードする前は必ず自分のパソコンで動作チェックを行ってから
アップするようになりました。

「CGIをローカルでテスト出来るようにする方法」は、
有名サイトのKent Web様のサイトで説明されていたり、その他にも
たくさんありますよ。
設置方法は全然難しくないのでみなさんも試してみたらいかがでしょう〜か。



このページのTOPへ