一時間くらいハマったので一応メモっておく。
perlのパス
#!/usr/bin/perl
ディレクトリおよびファイルのパーミッション
705もしくは755
(これはphpとかも同じ)
ファイルの拡張子はcgi
sample.cgi
改行コードはLF
(ローカルからFTP等でアップロードする場合はASCIIモードで)
ファイルの文字エンコーディングはEUC-JP
(さくらのサーバの設定なのでこれもcgiとかに限らず)
以上に注意してサンプルを作成し、ブラウザでアクセスしてみた。
cgi/sample.cgi
#!/usr/bin/perl print "Hello";
エラーになる。
500 Internal Server Error
エラーっつってもこれだけじゃ何が悪いのかわからん。
こんなに短いただのprint文で文法を間違えているとも思えないけど一応「perl -c ファイル名.cgi」をシェル上で実行してsyntaxの確認。
%perl -c sample.cgi sample.cgi syntax OK
問題なさそう。
そもそも何がいけないのか、その原因が知りたいので、Apacheのエラーログを見られないかどうか調べる。
直接ログファイルにはアクセスできないけど、さくらでは管理画面でエラーログの内容を見ることができるらしいことを知る。管理画面の左カラムにある「アプリケーションの設定」から「アクセスログの設定」を選び、遷移先ページのメインカラム真ん中へんにある「エラーログの表示」から「エラーログ」というリンク文字列をクリック。ここでエラーログの内容を知ることができる。(「最新の情報に更新」をクリックして、都度エラーログを確認できる)
エラーの内容は
Premature end of script headers:
だった。
これは何か特定の問題を示すエラーではないらしいんだけど、なんかしらの問題でちゃんと結果が出力されないときに出るものらしい。らしいがつづくけど。
とにかくエラーの内容が分かったので「Premature end of script headers:」で検索。
Premature end of script headersの解決法-超簡易版
この記事をひとつずつ確認し、終わりのほうにあった
print "Content-type:text/htmlnn"
で解決。(お世話になりました。ありがとうございました。)
よくわかんないんだけど「Content-type: text/html」のあとに改行がふたつ(nn)あると解決できることがわかった。
以上を踏まえて以下のようにしたら、とりあえずエラーは出なくなり、Helloの文字列も表示されるようになった。
#!/usr/bin/perl print "Content-type:text/htmlnn"; print "Hello";
これだけだとあまりにも簡単すぎて不安なので、最近買った参考書にあったサンプルスクリプトを試してみる。
#!/usr/bin/perl
print "Content-type:text/htmlnn";
@words = ('こんにちは', 'ハロー', 'ニイハオ');
srand(time|$$);
$word = $words[rand(@words)];
print <<"EOL";
<html>
<head><title>ランダム文字表示テスト</title></head>
<body>
ようこそ<br />
$word
</body>
</html>
EOL
大丈夫だった。
ちなみに、Content-typeの指定がなくて、ただ改行を冒頭で出力しているだけだと、エラーにはならないけどhtmlソースがそのまんま表示される。当然のことながら。
このサンプルでいうと、たとえば次のようにして「Content-type: text/html」部分をヒアドキュメントの中で出力してもいいみたい。(でも、Content-type: text/htmlの下に一行ブランクの行がないとだめだった。ブランクがないとこれはこれでまたエラーになる。やっぱり「改行がふたつ」必要なんだろうか、、よくわからんけど)
!/usr/bin/perl
@words = ('こんにちは', 'ハロー', 'ニイハオ');
srand(time|$$);
$word = $words[rand(@words)];
print <<"EOL";
Content-type: text/html
<html>
<head><title>ランダム文字表示テスト</title></head>
<body>
ようこそ<br />
$word
</body>
</html>
EOL
とりあえずこれで実行環境は用意できたので、明日からその参考書をグイグイやってperl、cgiに触れてみることにする。仮想マシンにインストールしてあるUbuntuでやろうかとも思ってたんだけど、ここで使えるようにセットアップするのは、それはそれでまた色々準備が必要のようなので、今回は見送り。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://showzine.info/blog/2010/06/%e3%81%95%e3%81%8f%e3%82%89%e3%82%a4%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%8d%e3%83%83%e3%83%88%e3%81%a7%e5%88%9d%e3%82%81%e3%81%a6cgi%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99.html/trackback
- トラックバックの送信元リスト
- さくらインターネットで初めてcgiを動かす - SHOWJIN*BLOG より