No.001 : CGI設置に関する最低限の知識
ここではCGIを設置する上で必要と思われる最低限の知識について説明をします。
ただし、ここで説明されている事はあくまでも最低限の知識です。すべてではありません。
また、特に断りがない限りは、広く「一般的な」プロバイダーについての説明をしているつもりですが、プロバイダーによってはプロバイダーのポリシーによって制限されている事や、違うこともあります。それらの事については自分のプロバイダーに問い合わせてください。
CGIとは、「Common Gateway Interface」の略で、日本語ではちょっと説明がつらいのですが、「手続きの共通取り決め」と言うような意味です。
普通、インターネットのWWWページは「HTML」と呼ばれる静的な記号文章でサーバー上に保存されており、WWWの利用者はWWWブラウザを通してそれをダウンロードし、HTMLの規則によってレイアウトして、体裁の整った文章として閲覧することができます。
ただ、この場合、WWWページは「固定されたもの」になってしまい、ユーザの要求やアクセスされた条件によってWWWページの内容を変える事はできません。そこで、サーバー上に決められた文章の代わりにプログラムを置き、プログラムによる出力結果をWWWページとして用いる事ができるような仕組みが必要とされました。それがCGIと呼ばれるものです。
ここで注意してほしいのは、「CGI=Perl」では必ずしもないと言うことです。
なぜなら、CGIは単にサーバー内部で「プログラム」の出力結果をWWWブラウザに伝えるための仕組みを規定しているだけであり、必ずしも「Perlを使いなさい」とは言っていないのです。
が、現在CGIで用いられているプログラム言語はほとんどがPerlです。なので、慣れるまでは「CGI=Perl」と覚えていても差し支えはないと思います。(現にCGIのプログラム言語でPerlしか許可していないプロバイダーがほとんどです)簡単に例えると、ここに「時刻をしゃべる時計」があるとします。これがCGIプログラムです。
この「時刻をしゃべる時計」を電話の片方に置き、ほかの電話からその電話のしゃべる声を聞くための手続きをCGIと言う風に規定しているのです。これに対して「しゃべる電話」の代わりにエンドレスのテープレコーダーが置いてあるのが普通のCGIではないページです。
FTPと言うのは「File Transfer Protocol」の略で、「ファイル転送手続き」と訳されます。インターネット上でファイルをやり取りするためのプロトコルの一種です。
ただ、一般的に「FTP」と言うとFTPサーバーにアクセスするためのクライアントプログラムの事を指します。
有名どころは、WindowsならNextFTP、FFFTPなど。MacならFetch(?!)でしょうか。
FTPで自分のマシンにあるファイルをサーバーのホームページとなるスペースに転送するわけですが、FTPでファイルをやり取りするのに2つのモードがあります。それがアスキーモードとバイナリーモードです。
バイナリーモードとは、自分のマシンにあるファイルを「何も手を加えずに」サーバーに転送するモードのことです。本来の「ファイル転送」というのは何も手を加えないのが普通のように思われますが、実はそうではないのです。
このモードで転送するべきファイルは「画像」「音声」「音楽」「Excel・Wordなどの書類」などです。一方、アスキーモードはテキストモードなどとも言います。文字通り「文章を送るための」モードです。
このモードで送るべきなのは「HTMLファイル(*.html *.htm)」「Textファイル(*.txt)」「スクリプトファイル(*.cgi *.pl)」です。ここで、「あれ?スクリプトってアスキーモードなの?」と思われるかもしれませんが、スクリプトも実行されるまでは単にスクリプトを書いた「文章=テキスト」なので、アスキーモードなのです。
詳しく書いてしまうと、テキストファイルの中で「改行」を表す文字コードは全てのOSで共通なわけではないのです。
例えば、Windows・DOS・OS/2では昔から「CR+LF」と呼ばれるコードが使われてきました。それに対し、Macでは「CRのみ」、一般的なUNIXでは「LFのみ」が使われています。例えばここにWindowsで作った下のような文章があったとします。
「これは、改行コードのテストです。↓
前の行の最後に改行コードが含まれています。」前の文章に「↓」でかかれているのが改行コードです(実際は画面に何も表示されないのですが……)。
「↓」は実際には2バイトで「CR LF (数字で言うと 13 10)」が書き込まれています。これを何も変換をかけないで(つまりバイナリーモードで)UNIXに送ると下のようになります。
(実際は若干の差異があるかもしれません)「これは、改行コードのテストです。^@↓
前の行の最後に改行コードが含まれています。」ここでは「^@」という文字(実際には1文字)が勝手に書かれてしまっています。これは何かといいますと、さっきのWindowsでの改行コードの1部である「CR (13)」の部分なのです。UNIXでは「改行をしなさい」というコードは「LF」だけでOKという決まりでできているので、「LF」があった所で確かに改行はするのですが、「じゃあCRって何?」という事になってしまいます。UNIXの世界では「CR」は別に特別な意味を持たないコードで、しかも通常使われないのでUNIXは「CR」とあったときに何を表示していいのかわからないのです。で、とりあえず「^@」と表示して「なんかありますけど私にはわかりません」といっているのです。
で、結果的に、アスキーモードで転送を行うと自分のマシンとサーバーがその辺をお互いにやり取りして送り先でも「改行は改行に」なるように変換をかけてくれるのです。
大雑把に言って、アスキーモードで送るべきファイルは「メモ帳」「SinpleText」で開けるもの!と思っておいて下さい。
パーミッションというのは平たく言うと「権限」のことです。
主にUNIXの世界で使われるものなのですが、セキュリティーのきびしいUNIXの世界ではそのファイルを作ったユーザー以外は「許可」がされていないとそのファイルに対して自由に振舞うことができないのです。
よくCGIの設置の説明とか開設に「パーミッションは755で」とか「666で」とか書かれているのを見ませんか?
この3桁の数字は「誰に何を許可しているか」という情報なのです。簡単にこの数字を理解する方法を説明します。
まず、下の対応を覚えてください。(何で?と言われても、これは決まりですから…^^;)1 …… 実行 (X)
2 …… 書き込み (W)
4 …… 読み込み (R)次に3桁のパーミッションについてそれぞれの桁に意味がついています。
***
↑↑+右端 …… それ以外の他人
|+真中 …… そのファイル持ち主の所属する人々(グループメンバー)
+一番左 …… そのファイルの持ち主(オーナー)
で、さっきの「1,2,4」を「許可したいもの」だけ選んで足してみてください。
例えば「自分は読み書きができる、他人は読み込みのみできて書き込めない」ファイルを設定するときは次のようにします。一番左(=自分) → 2(書き込み) + 4(読み込み) = 6
真中(=グループ)→ 4(読み込み) = 4
左端(=その他) → 4(読み込み) = 4→ で、結果、パーミッションのコードは「644」になる。
「644」というパーミッションはCGIの本を見ているときよく出てきますよね?
また、「644」のそれぞれの桁に「実行許可」の「1」を足すと「755」になります。これもよく見ますよね?つまり、UNIXではただファイルを作る(アップロードでも同じです)だけでは他の人が「見るだけ」のファイルになってしまうのです。それをCGIとして「実行」可能にするには「許可」を与えなくてはならないのです。
「グループ」という概念がわからないと思いますが、まあ、WWW上では「その他」に含めてしまってOKだと思います。
なお、パーミッションの設定機能は大体のFTPソフトが持っているようです。ファイルをアップロードしたあとにチェックする習慣をつけましょう。
文字通り、漢字を表現するための決まりのことです。主にインターネット上で漢字を表現するためのコードは3種類あります。
@ JISコード
→ワープロや一部の印刷系ソフトで使われています。
A シフトJISコード(Shift-JIS、MS漢字、S-JISなどとも書く)
→UNIXを除く大体のパソコンで使われています
B EUCコード
→主にUNIXでの漢字コードです。それぞれのコードについては長い歴史があるので詳細は省略しますが、つまり、コンピューターの唯一理解できるデジタル「数値」と人間の視覚的な表現である「文字」とを関連付ける対応表が世の中には主に3種類あるということです。
そしてもうひとつ重要なのはそれら3つのコードを1つの文章の中で混在させることはできないということです。それをやろうとしてしまったときに起こるのがいわゆる「文字化け」です。
で、何も「漢字コードの混在」は文章の中だけで起こるとは限りません。それはCGIの中でも起こるのです。
CGIの中でも""で囲って文字列を表示したいときがあるでしょうが、CGIスクリプトも「文」である以上、漢字コードの制約を受けるわけです。例をあげると、箱庭諸島などではスクリプトの最初の説明の中で「EUCでアップロードしてください」とかかれています。
これは「このスクリプトはスクリプト自身がEUCで書かれている事を期待して作っているので、EUCでないと正しく動きませんよ」ということなのです。指定以外の漢字コードでCGIスクリプトをアップロードするとCGIが期待したとおりの文字列を表現することができず、出力が文字化けします。(と、覚えてください。文字化けの仕組みを語りだすとキリがなくなりますので、場所を改めて……^^;)で、じゃあどうすればいいのか?「漢字コードコンバーター」を使ってください。
もっとも有名なものはUNIXやMS-DOSで使われるnkfというソフトですが、GUI対応でないので初心者には使いづらいでしょう。
最近ではテキストエディターやFTPソフトの中に漢字コードコンバーター機能が含まれているものが多いです。それを使いましょう。個人的には「EmEditor」というテキストエディターや「NextFTP」には漢字コードコンバーターが」含まれていることを知っています。詳しくはソフトのマニュアルを見てみてください。使い方は、
WindowsやMacでスクリプトを打ち込んだ場合、その文章はそのままではS-JISになっています。そのスクリプトがEUC指定のものだったとしたらコンバーターの機能「S-JIS→EUC」を使います。EUCに変換された文章はCGIとしては正しく動きますが、メモ帳やSimpleTextでは文字化けしまくっています。逆に、EUCのスクリプトをダウンロードしてWindowsやMacで編集したい場合、「EUC→S-JIS」の機能を使いましょう。これでメモ帳やSimpleTextでまともに読むことができるようになります。
ちなみに、間違う人が多いのですが、漢字コードと改行コードの問題は一般的に無関係です。
なので、漢字変換だけでなく改行コードも変換してやるとか、FTPでアスキーモードにするなどのことはしっかり行ってください。コード変換して見た目はぐちゃぐちゃでもよく見ると改行は元と同じ(ような)間隔で行われているはずです。「メモ帳で読めないからバイナリーモードかな?」と勘違いしないようにしてください。
内容的には「アスキーモード・バイナリーモード」の所とかぶってしまいますので、簡単にまとめておきます。
@ サーバーにスクリプトをアップロードするとき。
漢字コードをスクリプト指定のものにする。→アスキーモードでアップロードする
A サーバーからスクリプトをダウンロードしたとき
アスキーモードでダウンロードする。→漢字コードをS−JISに変換する。
「アスキーモード」で転送を行っている限り、基本的に改行コードは気にしなくて大丈夫です。
なお、「CR」とは「キャジ・リターン」といい、昔のタイプライターで「行の先頭位置に戻る操作」のことです。
一方「LF」とは「ラインフィード」のことで、セットされている用紙を一行分次に進めることです。
なので、本来の意味から考えると「CRしてLFする」事によって正しく「次の行の先頭に進む=改行」することになるはずなのですが、データ量節約の為に片方に削られたりしたようです。