こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ローカルテストOKのPerl サーバでのエラーです。

よろしくご教授下さい。

単純にフォームに入力された内容を確認するためのページを作成しようとしていますが、
ローカルでのテストはOKでしたが、いざサーバにアップするとサーバエラーが出ます。

ローカルのテスト環境
サーバ AnHTTP
ActivePerl Ver.5

本サーバの環境
Apache
Perlのバージョン 5.6.0

パーミッションは755に変更済み。
PerlのパスもOKです。

あと、考えられるエラーの可能性をご指摘頂けませんでしょうか?
よろしくお願いします。
説明不足なとこがありましたら補足致します。

参考にならないかもしれませんが、一応・・・
サーバエラーの内容です。↓
Internal Server Error
The server encountered an internal error or misconfiguration and
was unable to complete your request.
Please contact the server administrator, *******@*******.com and
inform them of the time the error occurred,
and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
-----------------------------------------------------------
Apache/1.3.19 Server at www.********.com Port**

投稿日時 - 2002-04-15 17:00:36

QNo.253302

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

> エラーの内容は以下のものです。
> Premature end of script headers

これは、HTTP ヘッダの出力が無い、ということを表します。

たとえば、以下のような意味の無いスクリプトを動かすと、同様のエラーが出ま
す。

★ここから
#! env perl
exit
★ここまで

該当のスクリプトがどこかの print で Content-type: text/html なんて吐き出
していると思うのですが、そこに到達する前に何かのエラーで抜けています。

ですから、質問にあるように

・スクリプトのパーミッションは問題ない
・perl のパスもOK

です。

エラーログの "Premeture end ..." の直前の行に注目するか、もしくは、スクリ
プトのう~んと最初のところで HTTP ヘッダだけを出力してしまえば、何かの情
報がエラーログに残るかもしれませんね。

後、コマンドラインから、そのスクリプトは実行できませんか?

繰り返しますが、少なくとも CGI でスクリプトを動かすための設定には問題ない
と思います。実行している、そのスクリプト自身の問題だと思います。


ちなみに、

> また、ご気分を害されたようで、そのような返答(お礼)をしてしまい申し訳ございませんでした。

ぜんぜん気分は害してませんよ。ちょっと書き方がぶっきらぼうだったかも、と、
ちょっと反省。

投稿日時 - 2002-04-16 20:00:17

お礼

a-kuma様
締め切り後にも関わらず回答頂き有難うございます。

先ほど原因がわかりました。
一行目のPerlのパスが違っておりました。

サーバ側からメールにより指定されたパス自体が間違っていたようで、
こちらからの指摘により、先ほどサーバ側からの訂正がありました。

正しくは
#!/usr/local/bin/perl
と記述するべき所を

#!usr/local/bin/perl
としていました。

(すぐに気付かなかった私もいけないのですが。。)

2回も回答していただきましたのに、
原因がこのような簡単な事でなんだか申し訳ありません。

こちらで頂きました皆様の回答は、
今後Perl・CGIの勉強をする上で参考にさせて頂きたいと思います。

a-kuma様 他の回答者の方々
お時間を割いて回答頂きました事本当に感謝しております。
ありがとうございました。

このサイトでまたいつか出会える事を願っています。

投稿日時 - 2002-04-17 09:46:55

ANo.5

> エラーログ見ました。
>  File does not exist(ファイルが存在しません)
(snip)
> エラーログの見方がよくわからなくて・・・

いや、そうじゃなくて「ファイルが無い」とか分かる言葉で書いてあるのですから
その問題をクリアしなきゃいけないんじゃないですか?

まずは、分からないなどとひいてないで、きちんとエラーログを読み、そのうち
問題の大元であるメッセージをここに載せてみたら?

四人がこの質問に首を突っ込んでいるのですから、エラーの内容次第では、もう少し
まともな回答を誰かしてくれるかも。

投稿日時 - 2002-04-16 11:15:06

お礼

有難うございます。
また、ご気分を害されたようで、そのような返答(お礼)をしてしまい申し訳ございませんでした。

午前の時点では、エラーログを「見た」だけで
早くお返事をしようと思ってしまいまして、、、

本日午前中の間、エラーログの見方を調べたり
サーバの管理会社への問い合わせをしておりました。

エラーの内容は以下のものです。
Premature end of script headers

a-kumaさんへの最初のお礼の所で30行ほどと言ったのは、
過去分のエラーも合わせて見ていたようです。
また、ページが存在しないというのも関係ないもののようでした。

もう少し考えてからここへお願いしたらよかったのでしょうが、
業務上時間が無くてついあせってしまいました。
また、他のトラブルも抱えていた為、粗雑な質問とお返事になりました事
他の3人の回答者の方にも深くお詫びいたします。

投稿日時 - 2002-04-16 13:56:39

ANo.4

つい最近わかったことですが、改行コードが(13)(10)、つまりCRLFだと、ApacheのMod_perlはただしく解釈できないみたいです。
ターミナル上では実行できてるのに、サーバーを通すとできないので何かと思ったら、そんなことでした。

もしこれが原因なら、秀丸などで改行コードをLFのみにすると、もしかしたら動くかもしれません。

投稿日時 - 2002-04-16 09:07:40

お礼

回答ありがとうございます。
改行コードはフリーソフトのPerlEditorを使ってPerlを記述している際に
設定でUNIX:EUC(LF)にしていますので、問題はないと思います。

もう一度確認してみます。

ありがとうございました。

投稿日時 - 2002-04-16 10:24:27

ANo.3

とまあ、そうは言っていても何なんで・・・

ローカルのテスト環境は明らかにWindowsですね。
本サーバの方は、UNIXっぽい感じもしますが、プロバイダのサーバなのでしょうか。

そういう前提だと仮定して、ありそうなケースを上げてみます。

ソースコードの改行コードです。
Perl自体は、CRもLFもCR/LFも改行コードとして扱う事ができますが、CGIとして動かす場合少し違う事情が絡んできます。
パールに限らず、スクリプト言語を用いて作成したコードは、最初の一行に#!~という記述を書きます。
おまじないのように書いているこの行は、マジックナンバーと呼ばれる特殊な行です。
実行属性のついたスクリプトの1行目は、OSによって解釈され、そこに書かれたインタプリタが呼び出されます。
つまり今回の場合も、最初の1行はOSによって解釈されるわけです。
とすると、改行コードはOSによって識別できるものでなくてはならず、UNIXの場合はLFとなります。
Winでは、CR/LFである為、例えばスクリプトをサーバにあげる際に、ftpをバイナリモードで転送していたりすると、ASCIIモードなら勝手にやってくれる改行コードの変換が行われず、うまく動かないというケースは結構多いです。

まあ、当たっているかどうかは分かりませんが、典型的なケースの紹介でした。

参考URL:http://tohoho.wakusei.ne.jp/wwwxx011.htm

投稿日時 - 2002-04-16 02:00:39

お礼

回答有難うございました。

>ローカルのテスト環境は明らかにWindowsですね。
>本サーバの方は、UNIXっぽい感じもしますが、プロバイダのサーバなのでしょうか。

説明が足らずに申し訳ありませんでした。
ローカルのテスト環境はWindouws2000
サーバはUNIX です。

しかし、改行コードは
フリーソフトのPerlEditorを使ってPerlを記述している際に設定でUNIX:EUC(LF)にしていますので、問題はないと思います。。。
FTPはFFFTPを使用してアスキーモードでUPしています。。。

ありがとうございました。

投稿日時 - 2002-04-16 10:14:55

ANo.2

tfp

エラーログの内容がないと考えられる可能性はいろいろあり過ぎて誰も答えられないと思います。

ISP等のレンタルスペースを使用していて、直接エラーログを見れない場合、スクリプトの先頭の方で

use CGI::Carp qw(fatalsToBrowser);

と、しておくと、エラーの内容をブラウザに返してくれるので、とても助かります。

>参考にならないかもしれませんが、一応・・・
>サーバエラーの内容です。↓
これは「エラーが出た」としか分かりません。(^^;

参考URL:http://member.nifty.ne.jp/hippo2000/perltips/CGI/Carp.html

投稿日時 - 2002-04-15 20:12:47

お礼

回答ありがとうございます。
>ISP等のレンタルスペースを使用していて、直接エラーログを見れない場合、スクリプトの先頭の方で
>use CGI::Carp qw(fatalsToBrowser);
>と、しておくと、エラーの内容をブラウザに返してくれるので、とても助かります。

この方法は知っていると役に立ちそうです。

>>参考にならないかもしれませんが、一応・・・
>>サーバエラーの内容です。↓
>これは「エラーが出た」としか分かりません。(^^;
・・・すみません(-_-;)

うまい具合に質問も出来ていない自分が情けないです。。。

ありがとうございました。

投稿日時 - 2002-04-16 10:22:07

ANo.1

まずは、エラーに出ているようにエラーログを見ましょう。

> More information about this error may be available in the server error log.

投稿日時 - 2002-04-15 18:53:13

お礼

お礼が遅くなってすみません(^_^;)
エラーログ見ました。
 File does not exist(ファイルが存在しません)

 接続を他からリセットされました。
などの言葉が30行ほどにわたって記述してあります。

エラーログの見方がよくわからなくて・・・
すみません。

投稿日時 - 2002-04-16 10:08:07

あなたにオススメの質問