■ 最初のCGIプログラム(Perl)
「Hello World!」
プログラム関係の本を読むと、たいてい一番最初に出てくるプログラムがこれです。
要は、きめられた文字を画面に表示するだけのものです。
他にもバリエーションとして「Hello CGI!」「Hello Perl!」「Hello Java!」とか言うものもあります。
何はともあれ、まずはテスト環境で動かしてみましょう。
手順は以下のとおり。
プログラムソース
#!C:/Perl/bin/perl print "Content-type: text/html\n\n"; print "Hello World!";
- テキストエディタで上記の内容のファイルを作成。
- 「helloworld.cgi」という名前で保存する。
- ローカルホスト(テスト環境)の決められた場所に保存。
- ブラウザ経由で、ローカルホストの「helloworld.cgi」を指定する。
プログラムソース
それでは中身を、手順を順番に解説していきます。
1行目「#!C:/Perl/bin/perl」
これは、シェルというものが「C:/Perl/bin/perl」に以下のソースを渡すということです。
そして、この場合渡す相手は、Perlの実行プログラム(インタプリタ)になります。実際のPerlの実行プログラムのある場所を指定します。
これはパソコン(Windows)に作った環境の話ですので、「C:/Perl/bin/perl」となっていますが、実際のインターネットに公開するサーバー(UNIX)では、「#!/usr/local/bin/perl」または
少々話は前後しますが、このプログラムファイルの名前は「helloworld.cgi」です。
この拡張子「cgi」が出てくると、サーバーはこれはCGIプログラムであると判断して、実行環境(シェル)に渡します。
(この拡張子「cgi」がCGIプログラムであるというのはサーバーの設定できめられています。Apacheの場合httpd.confというファイルにその設定が書かれています)
シェルは1行目の「#!ウンヌン」を見て、これは、自分の担当ではないとPerlの実行プログラムそのまま渡すわけです。
2・3行目「print 〜」
「print」は直訳すると「印刷する」とか「捺染(なっせん)する」とか「印刷物」とか言う意味ですが、この場合は「出力する」という意味です。
CGIプログラムの場合は特に断らなければ「ブラウザに向かって出力する」ということになります。
(特に出力先が指定されていれば別です)
「print」のあとに、「"」で囲まれた部分が出力する内容で、最後の「;」で終わりを宣言します。
「;」が無いとエラーになりますので必ずつけてください。
3行目「Content-type: text/html\n\n」
この、「Content-type: text/html」というのはHTTPヘッダーと呼ばれるものです。
その後の「\n」は改行を意味します
。HTTPヘッダーのあと1行をあけるというのが決まりになっていますので、HTTPヘッダーのあと、2回改行することで1行を開けます。
ブラウザで表示するときには、まずこのHTTPヘッダーが送られなければなりません。
HTTPヘッダーにはいろんな種類があるのですが、この場合は「html」形式で表示してくださいという意味です。
この情報が送られて初めて、その後の情報が「html」形式であると、ブラウザは判断することが出来ます。
通常サーバに保存されている「html」や「jpg」などの場合は、要求を受けて実際のファイルを送り出す前に、サーバーが自動的にHTTPヘッダーを送っておいてくれるのでブラウザは問題なくファイルを表示します。
しかし、CGIプログラムの場合は、プログラムの実行結果をブラウザに表示します。
サーバーはプログラムの実行結果がどんなものか知ることが出来ないので、CGIプログラムは自前でこのHTTPヘッダーをブラウザに送ってやるというわけです。
■ インターネットサーバーでの実行
では、プログラムをインターネットのサーバーで実行して見ましょう。
インターネットサーバーの多くはUNIXというコンピューターが使われています。
この、UNIXでPerlの実行プログラムが置かれているのは、多くは「/usr/local/bin/perl」または「/usr/bin/perl」という場所です。
これは必ず、自分が使っているサーバーの情報を確認してください。
確認したら、一行目の「#!ウンヌン」の部分をこれにあわせて書き換えます。
次に、これをサーバーに転送します。
これには、転送モードにはアスキーモードとバイナリモードがあるのですが、これには「FFFTP」などのFTPクライアントと呼ばれるソフトを使えばほとんど自動で判別してモードを変更してくれるので問題はないと思います。
(FFFTPの場合は、基本的な設定でtxt、html、htm、cgi、plという拡張子のファイルをアスキーモード、それ以外をバイナリモードで転送します)
転送したら、パーミッションを変更し、ブラウザ上で転送したファイルを指定して実行させます。
パーミッション
パーミッションとは権限ということです。
つまりサーバー上のファイルが要求された際に、それを要求したものがどういった権限を持っているかによって動作を変更します。
つまりサーバー上のファイルを「読み取れるか、否か」「書き込めるか、否か」「実行できるか否か」です。
パーミッションは「rwxr-xr-x」「644」などと表現します。
最初の「rwxr-xr-x」(「rwxrwxrwx」)の9つの文字は3つずつに区切り「オーナー」「グループ」「その他」を表します。
そして、その3つの文字「r」「w」「x」はそれぞれ、読み込み、書き込み、実行をあらわします。
最初の3文字が「rwx」なら「オーナー(つまり自分)」は読み取り、書き込み、実行がOKということ。
次の3文字が「r-x」なら「グループ」は読み取りと実行がOK、書き込みがNGということ。
最後の3文字が「r--」なら「その他」は読み取りのみがOKということです。
この「r」「w」「x」にそれぞれ、「4」「2」「1」の数字を割り当てて合計し、「オーナー」「グループ」「その他」をそれぞれ一つの数字であらわすという方法もあります。
それが「644」や「755」という数字です。
先の「rwxr-xr--」ならば、「オーナー」=4+2+1=7、「グループ」=4+1=5、「その他」=1で「751」となります。
同様に「rwxr-xr-x」は「755」、「rw-r--r--」は「644」です。
一般には、転送した状態ではファイルのパーミッション「644」となっています。
つまり閲覧は誰でも出来て、実行は誰も出来ず、オーナーは書き込み可能という状態です。
これをCGIプログラムとして実行するには、普通は「705」または「755」とします。
なかには「704」や「700」というところもあるようです。
お使いのサーバーが、レンタルサーバーでプログラムに間違いがなくパーミッションを「705」または「755」に変更して動かないときは、サーバーのサポートページを確認してみましょう。
あるいはパーミッションの設定の仕方が決められているかもしれません。
ポイント
- 1行目はPerlの実行プログラム(インタプリタ)の位置を指定する。
- ブラウザの表示前にHTTPヘッダー(Content-type: text/htmlなど)の出力が必要。
- インターネットのサーバー(UNIX)ではパーミッションを設定が必要。
- | Study of CGI | Scalar Data |
□新着
- 2016/04/14
ページ復旧 - 2007/10/06
Story Maker始動 - 2007/06/13
久々の更新 - 2007/01/06
logちょっとバージョンアップ - 2006/07/27
ホームページのPerl 終了
□Topics
- 2016/04/14
サイト復旧 - 2007/10/06
StoryMaker始動 - 2007/06/13
今後にぜひご期待を! - 2006/06/26
今後について - 2006/06/15
環境の変化