本文へ目次へ
トップページFAQ ≫ FAQ ID:17
FAQ ID:17
質問

"Premature end of script headers"と表示されて動かない

> CGI関連

回答

このメッセージ自体は、エラー内容を表していません。サーバーのエラーログにはもう少しエラー内容が表示されていますので、可能ならそちらを見るのがよいですが、多くの場合は以下のような原因が考えられます。

Perlのパスが間違っている

一般的にPerlのパスは

#!/usr/bin/perl

または、

#!/usr/sbin/perl

などが一般的です。また、多くのサーバーではエイリアスが設定されていてどちらでも動くため、サーバーを移転した場合など、変更を忘れがちです。もう一度確認してみましょう。

改行コードが間違っている

Windowsではあまり関係ありませんが、LinuxやBSD系のサーバーでは起動スクリプトの改行コードがLFで無ければ上手く動きません(requireなどで呼び出しているファイルの改行コードは、LFで無くても動きます)。改行コードを変更すれば良い訳ですが、一応、下記のようにオプションを指定すれば動くようです。

#!/usr/sbin/perl --

起動スクリプトにBOMが付いている

これは広義では『Perlのパスが間違っている』の問題と同じなのですが、テキストエディタでコードを見ても非常に気づきにくいため、引っかかりがちです。

文字コードがUTFのファイルは、UTFであることを示すため、ファイルの先頭にそれを示す文字が挿入されていることがあります。そのため、#!の前に文字が書かれていることになり、Perlのパスが上手く取得できません。

しかし、その文字はテキストエディタでは表示されません。バイナリエディタで確認すると解るので、バイナリエディタでそれを削除するか、テキストエディタでBOMを付けない設定で保存し直す必要があります。

Windowsのメモ帳などは、BOMが付いていないファイルでも保存し直すと、ありがた迷惑なことに自動で付けてくれるので、要注意です。

ローケルとPerlバージョンの問題

影響を受ける環境は限られますが、RedHat 9でPerlのスクリプトエラーを参照してください。


以上をチェックしても上手くいかない場合は、サーバーのエラーログを確認して対処するしかないでしょう。

(最終更新日:2008-04-23)

評価