こんにちは!「温故知新」がマイブームになっている、河野です。
早速、今回はCGIプログラムをシェルスクリプト(bash)で作ってみたいと思います。
なぜperlじゃなくてbashなのかというと、私がperlを良く知らないからです(^^;
でも、日常的に使っているコマンドで組み立てますので、簡単だと思います!たぶん!
CGIについておさらい
CGIという単語を数年ぶりに使いましたので、念のために調べてみました。
CGI とは、HTTPサーバと外部プログラムとのインターフェースのことです。Common Gateway Interfaceの略です。CGIに則ったプログラムのことをCGIプログラムと言いますが、それも含めてCGIと言うことが多かったと思います。
ざっくり言うと以下のような決まりになっています。
- HTTPサーバーは、リクエストの内容に応じて、コマンドライン引数・環境変数・標準入力を設定し、外部プログラムを起動する
- 外部プログラムは受け取った情報をもとに処理を行い、結果を標準出力する
CGIについての詳細は、RFC3875で定義されています。
http://tools.ietf.org/html/rfc3875
Apacheの設定
今回はApacheを使用します。Apacheの設定(httpd.confなど)で以下の3点を確認してください。
1.CGIモジュールを有効にする
1 |
LoadModule cgi_module modules/mod_cgi.so |
標準設定のままだと有効になっているようです。
2.CGIのハンドラを設定する
1 |
AddHandler cgi-script .cgi |
これは標準設定だとコメントアウトされています。
(この設定を数年ぶりに行いました…)
3.CGIの実行を許可する
1 2 3 |
<Directory /var/www/html> Options Indexes FollowSymLinks ExecCGI ... |
DirectoryディレクティブなどのOptionsでExecCGIを指定します。
CGI用のディレクトリを準備
作業を進めるために、/var/www/html の下にディレクトリを作って、アクセス権限などを設定しました。
作業も直接このディレクトリでやっていきます。
1 2 3 |
$ sudo mkdir -m 777 -p /var/www/html/bash-cgi $ sudo chown kawano:kawano /var/www/html/bash-cgi $ cd /var/www/html/bash-cgi |
動作確認
とりあえず動作確認してみます!
1 2 3 4 5 6 7 8 9 |
#!/bin/bash # helloworld.cgi # おまじない echo "Content-type:text/plain" echo # 内容 echo "Hello World" |
※「おまじない」のところと、改行コードについては次回以降に説明をしたいと思います。
cgiプログラムは単体で実行できないといけないので、実行権限を設定します。
1 |
$ chmod +x helloworld.cgi |
単体で実行できるか
1 2 3 4 |
$ ./helloworld.cgi Content-type:text/plain Hello World |
curlで確認
1 2 3 |
$ curl http://localhost/bash-cgi/helloworld.cgi Hello World |
ちゃんと動いたようです。
これでCGIが動作する環境ができましたので、次回からRFCを参考にしながら、CGIの仕組みについて理解を深めていこうと思います。