部のWebサーバーでCGI動かしたいとかいう要望があったそうだ。
それで管理者がhttpd.confいじって動作するようにしたが、
うまく動かないとか言うので、見ていた。
どうもスクリプトの方がおかしかったらしい。
その後細かい設定をして完成と相成ったそうだ。
実は僕はCGIを使ったことなかったのよね。
そもそもCGIというのはCommon Gateway Interfaceという仕組みのことを言う。
まぁお約束に従って書かれたプログラムをApacheなどが動作させてくれると。
そういうことです。
ところでPHPは普通mod_php5をApacheに読み込ませて使う。
すなわちApacheをPHPの処理ができるように拡張させて、Apacheに処理してもらうと。
だからApacheが立ち上がってしまえば、PHPの処理は高速ということ。
一方では全てroot権限で実行させるから危険かもというのはある。
この仕組みで動作するのはPHPがもっとも有名ですね。
あとmod_rubyとか。
CGIだが…まぁ例を示すのが早いかな。
#!/usr/bin/php
Content-type: text/plain
<?php phpinfo(); ?>
わざわざCGIをPHPで書くあたりが不気味ですね。
まぁとりあえずこれに実行権を与えて、
コマンドラインで動作するか確かめてみる。PHPが動作するなら、動作しますね。
そしてこれをfoo.cgiとかして保存する。そしてアクセスする。
うまく動くんじゃないかな?
CGIというのは、動作するプログラムで、まずヘッダーを出力して、これに続けて内容を書き出すと。
じゃあ、というわけでこういうプログラムを書いてみた。
#include <stdio.h>
main(){
int i;
fputs("Content-type: text/plain\n\n",stdout);
for(i=1;i<=100;i++){
printf("%d\n",i);
}
}
これをgcc -o ccgi.cgi ccgi.cとかすれば完成。
普通に動きますよ。というわけでどうもこういうものらしいです。
ただ初めのヘッダーにしても、まぁCGIに特に必要なことも多いと。
だからCGI用のライブラリがありますね。
ちなみにPHPだが、基本的には組み込み動作でもCGI動作でも変わらない。
さっきは説明のために手動で書いたが、これは普通じゃない。
#!/usr/bin/php-cgiとすれば一般的なPHPをCGI動作させることができる。
まぁ…php.iniの設定をしないと弾かれますが。
あとPHPを組み込みで動作させるなら実行権いらんけど、CGIの場合必要だったりするので注意。
設定もそんなに複雑じゃないからLibserverでもCGI可にしていいかなとか。
Option +CGIExec とするだけだし。
けど動かしたいスクリプトもないからいいか。