- PR -

RedHat9でperlが動かない

投稿者投稿内容
ミグカリバー
常連さん
会議室デビュー日: 2003/07/21
投稿数: 29
投稿日時: 2003-07-21 23:12
はじめましてぽちくんといいます

現在自宅サーバをRedHat9でセットアップしています
参考にしたのは以下のホームページです
http://pc-unix.goco.ne.jp/index.html

ほとんどの設定はこのホームページで出来たのですが
なぜか、CGIだけが動きません
コマンドラインから「./xxx.cgi」と実行すると正常に実行されますが
ブラウザから実行すると「Premature end of script headers」のエラーとなります
perlのデバッカでも、エラーがありません
CGIが動かないとせっかくたてたサーバの意味が半減してしまいます
どなたか教えてください
よろしくお願いします
BASE
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 178
投稿日時: 2003-07-22 00:10
スクリプトヘッダの終わりが上手く認識できていないようです。
ぐぐって見たところ以下のような事例がありましたので参考にしてみてはいかがでしょう。

http://nt.hakodate-ct.ac.jp/~takahasi/labo/technicalnote/RH8/cgi.html
#一番下です。
MyTime
常連さん
会議室デビュー日: 2003/01/29
投稿数: 40
お住まい・勤務地: 静岡県
投稿日時: 2003-07-22 00:19
Premature end of script headers
→httpdが期待している出力を受領しきらないうちに、CGIのスクリプトが異常終了しています。

よくあるミスのチェックリスト:
1.nobodyなりapacheなりのhttpdを実行しているユーザに適切な権限を与えていない。
→cgi本体に対しては権限を与えていても、参照しているファイルに対して権限が与えられていないことがよくあります。cgiで実行する場合には、通常とは異なる権限で動作していることに注意。
2.cgi中に余分なCRコードが紛れ込んでいる。
ミグカリバー
常連さん
会議室デビュー日: 2003/07/21
投稿数: 29
投稿日時: 2003-07-22 18:22
試行錯誤してやっと動作しました
原因はと言うとRedHat9では記述が異なり、perl.confに設定するようです
ただし、動くには動くのですが、DocumentRootが/(linux上のルート)になってるんですよね
ソースを書き換えれば済むことなんでしょうけど、不便きわまりないです
相対参照のやり方ありませんか?
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-08-18 07:04
ぽちくんさんこんにちは。

同じ現象で困っております。

>原因はと言うとRedHat9では記述が異なり、perl.confに設定するようです

perl.confがみつかりません。どこにあるのでしょうか?
よろしければ、どのように記述したら動作するのかも
教えて頂けると幸いです。
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-08-18 11:01
MyTimeさんこんにちは。

>2.cgi中に余分なCRコードが紛れ込んでいる。

#!/usr/bin/perl

#!/usr/bin/perl --

#!/usr/bin/perl -w

に変えると動くのですが、ファイルがたくさんあり、
他のサーバーとの整合もとりたいため、できれば
設定の変更だけで、ファイルはそのまま動かせない
かと思っています。
(なぜこのように書くと動くのかも不明ですし...)


[ メッセージ編集済み 編集者: なか-chan 編集日時 2003-08-18 11:01 ]
Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-08-21 16:17
引用:

>2.cgi中に余分なCRコードが紛れ込んでいる。

#!/usr/bin/perl

#!/usr/bin/perl --

#!/usr/bin/perl -w

に変えると動くのですが、ファイルがたくさんあり、
他のサーバーとの整合もとりたいため、できれば
設定の変更だけで、ファイルはそのまま動かせない
かと思っています。
(なぜこのように書くと動くのかも不明ですし...)


既に、レスがありますが、
print "Content-type: text/html\; charset=EUC-JP\n\n";

print "Content-type: text/html\; charset=EUC-JP\n";
のように改行が足りない場合や改行コードが CRLFになっていると「Premature end of script headers」エラーに
なりますがこの点は間違いないですよね。

わざとエラーが出るようにして
#!/usr/bin/perl -w
でやってみましたが、動作しませんでした。動く理由がないし、動作しない方が正しいと思いますので
perlを疑いたくなりますね。

引用:

>原因はと言うとRedHat9では記述が異なり、perl.confに設定するようです

perl.confがみつかりません。どこにあるのでしょうか?
よろしければ、どのように記述したら動作するのかも
教えて頂けると幸いです。


mod_perl(apacheのモジュール)を使用する際に、LoadModule指示子の代わりに /etc/httpd/conf.d
ディレクトリに置くようです。
何を記述するのかはわかりません。
記述ないようまで触れているのはみあたりませんでしたが、'perl.conf'で検索すれば何件かヒットします。
コマンドライン版perlには関係ありません。
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-08-22 10:39
Marionetteさんこんにちは。

charsetはShift_JISです。Windowsでファイルを作っています。
charset〜の後に改行も2つ入れています。
プロバイダのサイトにアップロードしたときにはこのまま動作
していたのですが、自宅サーバーでは同じファイルで動きません。
そこで、何か設定を変更すれば動くのかな?と思いました。

#!/usr/bin/perl の後ろに--のような文字をつけると
改行コードに関係なく動くようで、実際に自宅サーバーでも
動作するようになりました。しかし、#!/usr/bin/perlだけだと
動きません。この書き方でもプロバイダのサイトでは動いているのです。

環境は
Apache2.0をRedhat Linux 9のrpmで入れてup2dateしてあります。

スキルアップ/キャリアアップ(JOB@IT)