CGIプログラミングのポイント1:「Perlのパス」を書く
1行目の「C:\strawberry\perl\bin\perl.exe」は「Perl の実行環境をインストール」でインストールした Strawberry Perl の場所です。(もし違う場所にインストールした場合は、インストールした場所に変更して下さい。)
今まで練習で作成してきたPerlプログラムは、実行する時は自分でコマンドラインから
% perl prog.pl
のように打ち込んで実行してきました。一方CGIプログラムの場合は、実行をWebサーバに任せてWebサイトに訪問者が来た時に自分に代わって実行してもらいますので、どのプログラム実行エンジンを使うか(この場合はperlですね)がWebサーバに分かるようにファイルの1行目に書いておくのがルールです。
CGIプログラムのポイント2:「HTTPヘッダ」も出力する
CGIプログラムの2番目のポイントは、出力の際に、表示したい内容に先立って「HTTPヘッダ」を出力する事です。
Mac環境の方は後で確かめていただきたいのですが、Windows環境の方は、ブラウザに表示された文字は「こんにちは」だけでしたね?
プログラムからは以下の出力も行っていますが、これはブラウザには表示されません。これが「HTTPヘッダ」です。
print "Content-Type:text/plain;charset=utf-8\r\n"; print "\r\n";
HTTPヘッダとは?
HTTPヘッダとは、ブラウザとWebサーバが内容をやり取りする時に、これから送る内容が何であるかを伝える、「荷札」のようなものです。ブラウザでWebサイトにアクセスしても通常これを目にする事はありませんが、実はブラウザとWebサーバは毎回この「荷札」を付けてから情報をやり取りしているのです。
HTTPヘッダの役割
CGIプログラムからは「荷札」として、これから出力する内容が何であるかを示すHTTPヘッダを出力する必要があります。
この例の場合は、「こんにちは」というテキストを送りますので、
Content-Type:text/plain;charset=utf-8
というヘッダを送っています。
もしHTML形式でブラウザに表示したい場合は、
Content-Type:text/html;charset=utf-8
となります。
今の所はこの2つを覚えておけばOKです。
HTTPヘッダと出力内容の区別
では、プログラムから出力した内容がHTTPヘッダか、それとも出力したい内容なのかは、Webサーバやブラウザはどうやって区別しているのでしょうか?
場合によっては、
Content-Type:text/html;charset=utf-8 はHTTPヘッダの一例です。
とブラウザに表示したい場合もあり得ますね。
実はこれは非常に原始的な方法で、「1行空行があったらHTTPヘッダが終わったとみなす」というルールがあります。
このルールのために出力しているのが、「print "\r\n";」の行です。
print "Content-Type:text/plain;charset=utf-8\r\n"; print "\r\n"; #この出力が非常に大事>次は: Mac環境でのテストプログラム