質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

260閲覧

Perlのプログラムが公開部分では404エラー、エラーログはEnd of script output before headersとなるのを解決したいです。

terastella

総合スコア99

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

1グッド

1クリップ

投稿2024/05/20 08:22

実現したいこと

"Hello World”と出すだけの簡単なPerl(他のサーバでは動いていることを確認)で、404エラー、エラーログには"End of script output before headers"が出るのですが、その原因の解明がしたいです。

発生している問題・分からないこと

専用サーバで、
Perl:5.26.3
を動くようにしてもらっております。

サーバ移行の仕事なのですが、
今まで動いていたPerlで作成されたCGIが動かそうとすると「404エラー」となります。

Perlが動いているのか確認するために

Perl

1#!/usr/local/bin/perl 2use strict; 3use warnings; 4print "Content-type: text/html\n\n"; 5print "Hello World!";

というプログラムを作成して、サーバにアップ、パーミッションは755で動かしてみたところ、
404エラーのままであり、
エラーログには
End of script output before headers
が出ておりました。

エラーメッセージ

error

1End of script output before headers

該当のソースコード

Perl

1#!/usr/local/bin/perl 2use strict; 3use warnings; 4print "Content-type: text/html\n\n"; 5print "Hello World!";

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

CGIが動かなくなる原因として検索してでてきた内容は一つずつ、つぶしてみました。

(1)1行目にPerlへのパスはサーバ会社に確認して入れました
(2)FTPの転送時には「テキストモード」で転送しました。
(3)改行コードはLFにしていますし、他の改行コードも確かめました。
(4)1行目のパスに--を入れて改行コードをコメント化する方法も確かめました。
(5)パーミッションは755,705,700で試してみました。
(6)cgiファイルの入ってるディレクトリに、以下のコードを記入した.htaccessを入れてみました。

Options -Indexes Options +ExecCGI AddType application/x-httpd-cgi .cgi .pl .pm AddHandler cgi-script cgi pl pm

他に何か試してみることがあったら教えてください。

サーバ会社には問い合わせたのですが、「Perl」は入れている、としか報告がありません。

補足

特になし

txty👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2024/05/20 13:52

"End of script output before headers" だったらエラーコードは 500 になる気がしますが、404 になるケースがあるんですかね? アクセスしているURLが本当に問題のPerlコードに対応するのかどうかをまず確認しないといけないですね。 それから、サーバにログインできるなら /usr/local/bin/perl が本当に存在するかどうかチェックでしょうか。
ikedas

2024/05/20 14:02

> 404エラーのままであり、 > エラーログには > End of script output before headers > が出ておりました。 こういう場合の状況をきちんと把握するには、実際にアクセスした時刻とログの時刻が一致していることを確認したほうがいいです。 まず、クライアント側とサーバ側の時刻が (秒以下の単位で) 一致していることを確認しておいてください。 その上で、クライアントからのアクセスと、それと**同じ時刻の**サーバ側でのアクセスログを比較して、実際にサーバ側でどのようなログが記録されているか確認してください。 単に「一番最近のログ」を見たのでは、「アクセスと同じ時刻」のログを見ていない可能性があります。
otn

2024/05/20 18:02 編集

他のコメントと同じですが、何らかの確認ミスがあります。 tail -n 0 -f error_log で、「(今のファイル内容は表示せず)今後このファイルに書かれる行を表示する」というコマンドで確認すると時刻が狂っていていも大丈夫です。 あるいは、cat -n error_log | tail とかで、前回と行番号を比べてみて判断するとか。
terastella

2024/05/20 23:50

int32_tさん、ikedasさん、otnさん。 エラーログがまたダウンロードできない状態になってしまったので(パーミッション、せめてテスト中はダウンロードできるものにしておいてほしいとお願いしているのですが…)試してみての返答は遅くなりますが、ひとまずお礼を言わせてください。ありがとうございます。 サーバの知識がなくてサーバ会社に強く言えなかったのですが、私もint32_tさんのご助言の通り、そもそもPerlが動く領域なのかをまず疑っております。私の独りよがりな感想ではなさそうなので、もう少し強く言ってみようと思います。
guest

回答1

0

自己解決

コメントをくださった皆様ありがとうございました。
結局、サーバのミスで、CGIが動く状態のサーバではありませんでした。
事前にPerlのバージョンを知らされていたので、まさか動かないとは思いませんでしたが、何事にも絶対はないのだと思いました。

404エラーとEnd of script output before headersの組み合わせですと、本当にCGIが動くサーバなのか疑ってみるのもよいかと思います。
あとは、調べる中で.cgiや.plや.pmがCGIファイルとして関連付けされてないのではというような情報もありました。

同じようにお困りの方の一助になればと思います。

コメントにはベストアンサーはつけられないのが残念ですが、困っている中ご助言いただいた3名の方には御礼申し上げます。

投稿2024/05/29 04:34

terastella

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問