このページでは「リムネットでC言語で書かれたCGIをどのようにして作るのか」ということを解説したいと思います。これを知ってないとどつぼにはまるかも。ってゆーかはまりました(泣)。
|
まずは「パーミッション」から
Telnetで入ってからディレクトリを移動するときにぜひともしておいて欲しいのがパーミッションの確認です。 「パーミッション」とは「許可」という意味で、ひとつひとつのファイルやディレクトリに持たせることができます。このパーミッションの設定を変えることで「このファイルは自分は見ることができるけど他の人には見せないようにする」といったことができるようになります。
UNIXはたいがい、ネットワークを使用して多人数が同時に使うことを想定しています。インターネットはまさにそうですね。そういうばあい、他の人からプライバシーを護るための「間仕切り」や「鍵」が必要になるわけです。これがパーミッションだと考えてください。
さて、そのパーミッションをどうやったら見られるのかというと、前回説明したls -lのコマンドで見ることができます。ファイル名の隣とかに-rw- r-- r--とかdrwx r-x r-xとか書かれていません? これがパーミッションを示しています。これはFTPでも見ることができると思います(ちなみに一番左のdは「ディレクトリ」を意味していて、パーミッションとは関係ありません)。
この部分の意味を説明しましょう。
さて見方が分かったら、なにを注意すればいいのかです。
具体的にはchmod go+rx public_htmlの様な形で使います。一番右がフォルダ名だということは分かると思います。真ん中のgo+rxは、パーミッションを指定しています。
この機能はあとで必ず必要になってきます。そのときにまた読み返してください。 |
「.htaccess」を置こう!
さて、CGIの話に戻ります。 CGIはサーバーで実行されるものです。では、例えばrwx r-x r-xのパーミッションを持ったファイルtest.cgiなるものがあった場合、そのファイルをブラウザで読み込んだらどうなるのでしょうか。 結論は、そのまま読み込まれます。「そのまま」というのは要するにファイルの16進データそのものが入ってくるということです。 たとえこのファイルをCGIとして作っても、そんなことサーバーは「知ったことじゃないと」そのままファイルとして渡してしまいます。レストランでカレーを頼んだらレトルトパックそのものが渡されるようなものです。こちらとしては、それを暖めてごはんに掛けてもらいたい、要するにサーバーに実行してもらいたいのです。
そのためのファイルが.htaccessです。最初にピリオドがある点に注目。こういったファイルをUNIXではドットファイルと呼び、各種設定が入っていると見なされます。ウィンドウズで言うiniファイルと同じ、レジストリの代わりみたいなものです。
まずタダのテキストファイルを用意してください。ファイル名は_.htaccessとでもしておきましょうか、ウィンドウズでは拡張子の前にファイル名がないと怒られますから。この中には次のように書き込んでください。 |
AddType application/x-httpd-cgi .cgi
たったこれだけでOK。このファイルをpublic_htmlディレクトリに送ってください。これで、CGIを実行ファイルとして見なしてくれます。
注意して欲しいのは、これからファイルを送るときにはテキスト形式(アスキーモード)を使って欲しいということです。そうしないと、UNIXが正しく理解できないことがあります。各種FTPはこの形式で送ることができるはずです。
ちなみに実は、この設定はサーバーによっては必要ない場合もあります。サーバーの元々の設定で、「拡張子がcgiなら実行すること」としてある場合もあるということです。 |
CGIをコンパイル!!
さて、ここまでで準備は完了です。では実際にCGIを作ってみましょう。 まず適当なフォルダを作り(ここではcgi-binとします)そこに次のコードが入ったファイルtest.cを送ってください。 |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
printf( "Content-type: text/html\n\n" );
printf( "<HTML>\n" );
printf( "<TITLE> It's Test!! </TITLE>\n" );
printf( "<BODY>\n" );
printf( "This is test\n" );
printf( "</BODY>\n" );
printf( "</HTML>\n" );
}
これをテキストモードで送信してください。
次にTelnetで入り、このファイルのあるディレクトリに移動します。そうしたらcc test.c -o test.cgiと入れてください。 ccとは、UNIX標準のCコンパイラを実行するコマンドです。左から2番目はソースコードのファイル名です。3番目の-oを付けることで、コンパイル後の実行ファイルが4番目で指定したファイル名になります。一番右は必要な機能を全部詰め込んでくださいという意味で、これを付けないとホームページで読むときにうまくいかないみたいです。
エラーが出なかったらtest.cgiというファイルができるはずです。エラーが出たら……困っちゃいますね。とりあえず、本当に上の通りにしてください(コード中に日本語を入れないように!!)。
完成したらチェックしてみましょう。./test.cgiと入れてみてください。./というのは「今いるフォルダ」という意味で、これを付けないと実行されません。 |
Content-type: text/html
<HTML>
<TITLE>It's Test!!</TITLE>
<BODY>
This is test
</BODY>
</HTML>
確認したら、実際にホームページとして読み込んでみましょう。URLで直接test.cgiを指定すればOK。This is testと表示されるでしょう(もし表示されず、usr/bin/ld errorみたいに表示されたら、コンパイル時に -Bstaticというオプションを加えてcc test.c -o test.cgi -Bstaticとしてみてください)。
これで、CGIの完成です!! |
エチケットもちょっとだけ
喜んでいるところ悪いんですが、一応後始末とかしておきましょう。何をするのかというと、ソースコード(ここではtest.c)を削除してください。コードを読まれると「そのCGIがどういうアーキテクチャーで動いているのか」分かってしまいます。 また、このフォルダにindex.htmlを入れて置いてください。中身は空でいいです。たいがいのサーバーは、ディレクトリを指定されたときにindex.htmlを返すようにしています。が、このファイルがないとディレクトリの中身を表示してしまいます。 たまたまコードを消し忘れて、しかもこのファイルを置いてないんじゃ最悪です。それに、あなただけが使うべきCGIを勝手に使われる可能性もあります。そういうことを未然に防ぐためにも、これらは必要でしょう。
ま、これは「知らない人」向けの対策だから、ある程度知ってる人には意味のないことでしょう。でも、何か起きちゃったときの理論武装のネタくらいにはなりますから。 |
意外と簡単?
実際、結構簡単だと思います。C言語が使えるのなら、これからばりばりプログラミングできると思います。 ただ、いくつか注意しなければならない点もあるので、その辺はまた今度。 |
(C)KAB-studio 1998 ALL RIGHTS RESERVED. |