えっち(ピーーー)
メニュー
トップ タイトル ファイル名 パス イメージタグ リンクタグ
転送方法 IEとネスケ CGI CGI改造 終わりの挨拶 【書き殴り】

一坪「さてさてCGIプログラムについてです。」
アイカ「CGIとはとはとは?」
一坪「掲示板やチャットなど書き込んだりできるやつです。」
アイカ「あ! 分かりましたぁ
一坪「カウンタもCGIプログラムですね。」
アイカ「ほうほう
一坪「ただしJAVAを使ったやつとか例外もあるのでご注意を。」
アイカ「了解

一坪「CGIに関してはトラブルシューティングをしようと思います。」
アイカ「というと?」
一坪CGIプログラムを実行するとエラーが出る
 ってときなどの対処方法です。」
アイカ「OK

一坪「まずHPを置くサーバがCGIを使えなきゃいけません。」
アイカ「え? 使えないトコもあるんですか〜?」
一坪「ジオシティは使えません。あと大手プロバイダのサーバは使えないことが多いです。」
アイカ「なんでです?」
一坪「CGIプログラムを動かすのはサーバに負担がかかるし、
 プログラムのミスでサーバがダウンしちゃうこともあるからです。」
アイカ「危険なんですねー。」
一坪「はい。あとカウンタ、掲示板などをサーバ側が用意してる場合もあります。」
アイカ「それなら簡単に設置できますね
一坪「まずはサーバ(プロバイダ)のHPなどでCGIが使えるか調べましょう。」
アイカ「はい 他に注意点は?」
一坪「CGIを使えるサーバでも、いろいろ注意点があります。」
アイカ「なかなか大変ですねー。例えばどんなのですか〜?」
一坪「よくあるのが cgi-bin ディレクトリでしかCGIが使えないってやつです。」
アイカ「えっと、ということは cgi-bin ディレクトリはCGI専用ってことなんですか〜?」
一坪「専用というよりCGIを実行できるディレクトリですね。
 もちろん普通のHTMLファイルも置けます。」
アイカ「学校でいえば解剖するときは理科室でってコトですね
一坪「(解剖!!??) ま……まあ、そんなとこです。」
アイカ「よく分かりましたぁ( ̄ー ̄)」
一坪「(なんか怖い) (><)」

一坪「では今度は設置に関するトラブルシューティングです。」
アイカ「どうぞー
一坪「まずは設置するCGIプログラムの説明をよく読みましょう。」
アイカ「それはそうですね
一坪「場合によってはプログラムを修正する必要があるので。」
アイカ「じゃあ、このコーナーでは何をするんですか〜?」
一坪「えっと細かい部分は説明を読んでもらうしかないので、
 ここではCGIプログラム設置全般に通用する
 トラブルシューティングをしようと思います。」
アイカ「ようするに基本的な部分でのトラブルシューティングですね
一坪「そう! だからCGIプログラムを設置したけど

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, fltearth@ipc-tokai.or.jp and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Apache/1.3.4 Server at naguri.dyndns.org Port 80
↑こんなエラーが出る場合は、
 まず以下の説明のチェックをしてみてください。」
アイカ「それでもダメなら説明をもう一度よく読んで下さいね

CGIプログラムはアスキー転送
アイカ「むむ? アスキー転送ってなんですか〜?」
一坪「ファイルをサーバに転送するときに、
 アスキー(ASCII)転送バイナリ(BINARY)転送の2つの転送形式があります。」
アイカ「????」
一坪「例えば『今日はいい天気だね。はは〜ん?』というシャイなメッセージを相手に送るとします。」
アイカ「……シャイ?」
一坪「この内容(ファイル)を相手(サーバ)に伝えるときに、メール(テキスト)で送るのがアスキー転送、
 FAX(画像データ)で送るのがバイナリ転送って感じです。」
アイカ「なんとなくですが分かりました
一坪「ようするにテキスト形式で送るのがアスキー転送で、
 データ形式で送るのがバイナリ転送なのです。」
アイカ「で、どうやってアスキー転送するんですか〜?」
一坪「これはファイルを転送するときに使う(FTP)ソフトで選択できます。」
アイカ「自分が使ってるソフトをチェックですね

ファイルが全部揃ってるか確認
アイカ「えーー、これはタイトル通りですね
一坪「はい。ただしちょっと注意が必要です。」
アイカ「え? どんな?」
一坪「まず自分で用意するデータファイルです。」
アイカ「自分で用意しなくちゃいけないんですか〜?」
一坪「はい。説明に『空の「bbs.dat」というファイルを用意してください』
 などと書いてあったら自分で作成して用意しないといけません。」
アイカ「でも空のファイルってどうやって作るんですか〜?」
一坪「そうですよねー。結構用意するの難しいですよねー。というわけで後回しです。」
アイカ「そんなーー!!!」
一坪「まあまあ。で、他に用意する必要があるのは jcode.pl ファイルです。」
アイカ「それも自分で用意しなくちゃいけないんですかぁ……。」
一坪「だいたいは、そのファイル(jcode.pl)もセットになってますが、
 ときどき自分で用意しなくちゃダメな場合もあります。」
アイカ「そうですかぁ……。」
一坪「あとは、ほんとにときどきですが cgi-lib.pl というファイルが必要なときもあります。」
アイカ「うーーーーーーーん…………………。」
一坪そこの困ったアナタに朗報!!!
アイカ「ええっ!!??」
一坪「↓この pl.lzh という圧縮ファイルに3つのファイルを入れときました。」
pl.lzh

 解凍すると
 jcode.pl
 cgi-lib.pl
 null.dat
 の3つのファイルができます

アイカ「おお!!! これをダウンロードして解凍すればいいんですね
一坪「そうです。で、jcode.plcgi-lib.pl の2つのファイルはそのまま、
 null.dat は空のファイルなので名前変更してお使い下さい。」
アイカ「パーフェクツ

パーミッションは2パターン
アイカ「今度は『パーミッション』ですかぁ……。」
一坪「パーミッションというのはファイルの属性のことです。」
アイカ「属性っていわれても分かんない……。」
一坪「ここに愛の交換日記があります。」
アイカ「愛の交換日記っ!!???」
一坪「愛の交換日記は二人だけの物 もちろん二人にしか読むことも書くこともできないの
アイカ!!!!!!
一坪「だから他の人に見られないように魔法をかけるの
アイカひーーーーーーーー!!!(><)」
一坪「この『魔法』がパーミッションです。」
アイカ「きゃっ! 急に元に戻らないで下さい!!!」
一坪「とにかく、このように
 読み書きや実行の規制をかける(許可を与える)
 のがパーミッションなのです。」
アイカ「例えはともかく、だいたい分かりましたぁ
一坪「だいたい分かればいいです。詳しく説明しようとしたら大変なので。」
アイカ「手抜き………。」
一坪「いやいや、これは余計な情報で混乱しないようにとの配慮なのです。」
アイカ「(うそっぽーーーーい) (¬。¬)」
一坪「では本題です。」
 プログラムファイル(.cgi、.pl) は 755
 データファイル(.datなど) は 666
一坪「とりあえず、この2つを覚えれば大丈夫です。」
アイカ「2つだけなら楽ですね
一坪「ちなみにデータファイルというのは、読み書きするファイルのことです。」
アイカ「画像データとは違うんですね
一坪「あとファイルを新規作成するプログラムの場合は、
 そのファイルを作成するディレクトリのパーミッション777にする必要があります。」
アイカ「この辺は設置するCGIプログラムの説明に書いてありますね
一坪「755、666というのも基本的にってコトなので、やはり説明を読んで確認してくださいね。」
アイカ「ところでパーミッションはどうやって変更するんですか〜?」
一坪「これも、ほとんどのFTPソフトで変更できます。」
アイカ「またまたマニュアルチェックですね
一坪「一応、補足として数字入力じゃない場合を載せると

755
 
666
となります。あと777全部チェックです。」

" や文字化けには \ を
アイカ「ん? 何ですコレ?」
一坪「これはCGIプログラムを改造したらエラーが出るようになったときにチェックしてください。」
アイカ「えーー? プログラムの改造なんてできませんよぉ。」
一坪「改造といっても大した改造じゃないです。例えば
print "<H1>【書き殴り】</H1>";
     
print "<IMG SRC="kakinaguri.gif" WIDTH="300" HEIGHT="100">";


(printは表示する命令)
のようにタイトルを画像にしたい場合とかです。」
アイカ「なるほど タグ部分を改造するんですね
一坪「そうです。」
アイカ「それぐらいならできそうです
一坪「でも上の改造だとエラーが出ます。」
アイカ「あう。(><)」
一坪「この場合は
print "<IMG SRC="kakinaguri.gif" WIDTH="300" HEIGHT="100">";
     
print "<IMG SRC=\"kakinaguri.gif\" WIDTH=\"300\" HEIGHT=\"100\">";
とタグ部分の " の前に \ をつけて \" にすればOKです。」
アイカ「ふーーーーむ。なんとか、やり方は分かりましたぁ
一坪「ただし \ をつけるのはタグ部分だけで
 最後の "; を \"; にしてはいけません。」
アイカ「でも何で \ をつけるんですか〜?」
一坪「うーーーーーん、まあ約束事だと思ってください。」
アイカ「(またややこしい説明を省いた……)」
一坪「ちなみに
print '<IMG SRC="kakinaguri.gif" WIDTH="300" HEIGHT="100">';
のように ' で囲ってある場合は \ を付けなくていいです。」
アイカ「どうしてですか〜?」
一坪「これも約束事です。」
アイカ「(これで何回目だろう?) (ーー)」
一坪「余談ですが、行(コマンド)の最後({ }以外)に ; をつけ忘れる
 とエラーになるのでご注意を。」
アイカ「はーーい。」
一坪「あとメールアドレスで使う @ も \@ にしましょう。」
アイカ約束事ですね
一坪「もちろん。それと日本語が文字化けするときもです。」
アイカ「文字化け?」
一坪「例えば
print "<H1>予定表</H1>";
と日本語を表示させようとすると、実際には

嵐阨

のように文字化けしてしまいます。

だから、この場合は文字化けする字の後ろに \ をつけて
print "<H1>予\定表\</H1>";
とすれば大丈夫です。」
アイカ「でも、どの文字が化けるか分からないですぅ。」
一坪「その場合は
print "<H1>予\\\</H1>";
と文字化けしてる辺りの日本語全てに \ をつければOKです。」
アイカ「また約束事ですか。┐( ̄フ ̄)┌」
一坪「むむ? なんか私が手抜きしてるみたいじゃないですか?」
アイカ思いっきりしてます!! さっきから!!!
一坪「心外な! なら説明しましょう。
 なぜ文字化けするかというと、半角文字(123abc)が1バイトで文字を表すのに対して、
 全角文字(あいう一二三)は2バイトで1つの文字を表してるのです。
文字コード
131
232
333
88 EA
93 F1
8E 4F
 ↑こんな感じですね。

 そして文字化けする「予定表」という文字のコードは
文字コード
97 5C
92 E8
95 5C
 と、なります。実際に文字化けするのは「予」と「表」です。
 さて「予」と「表」の文字コードに共通するのは何か分かりますか?
 そう。2つとも「5C」が文字コードに入ってます。
 で、「5C」が半角文字で何になるかというと「\」なのです。
 「\」は今まで使ってきたとおり、特別な意味を持つのです。

 実際にどうなるかというと
予定表97 5C 92 E8 95 5C
 から「\」の「5C」が省かれて、
嵐阨97 92 E8 95
 と3文字が2文字になってしまい「嵐(97 92)阨(E8 95)」と文字化けするのです。
 だからそれを補うために文字の後ろに \ を付けるのです。


 以上が文字化けする仕組みです。
 『ソ、構、十、申、能、暴』なども「5C」を含んでる文字なので気をつけましょう。


 ちなみに、この文字化けはJava Scriptでも起きるので、同じように \ を付けて下さい。」
アイカ「………………。(@@;)」
一坪「どぅ・ゆー・あんだすたーん?」
アイカ「きゅう o(x_x)o」
一坪「やや? どうやら知恵熱を出して倒れたようですね。はっはっはっはっ………きゅう o(x_x)o」

CGIプログラムの改造方法

『えっち(ピーーー)』トップページへ