PerlOptions +ParseHeaders としています。
mod_perlは経験がないため、どのようなデバッグ方法があるかわかりません。誰か教えてください。
http://sagittarius.dip.jp/~toshi/premature.html
Premature end of script headers
Apache2.0.X+mod_perlで Premature end of script headers が出た場合の解決方法がいくつか載ってます。
最初のURLにある1番
#! /usr/bin/perl --
を付けるとなぜか直る。
2番目のURLにある4番
httpd.confを確認
2番目のURLにある5番
ディレクトリのパーミッション
なんと!777 だと動かない!!
755 などにして試してみる。
などが怪しそうですね。
http://xiaoxia.exblog.jp/m2004-09-01/#1078664
女プログラマってどうよ?:2004年09月
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html
Apache+mod_perlでCGIを使うには?
URLのページの以下の部分を参考に httpd.cong を変更してみてはどうでしょうか。
3. Apache (httpd.conf) の設定
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl1.html
Apache+mod_perlでCGIを使うには?
そんなgoogleで上位に出てくるようなページは当然チェック済みです。
http://perl.apache.org/docs/2.0/user/config/config.html#C_SetupE...
mod_perl: mod_perl 2.0 Server Configuration
httpd.confのPerlOptions以外の設定がどうなっているかにもよるのですが、例えば下記のような設定ではいかがでしょうか?
----
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
</Location>
それって標準的な設定ですよね。。すみませんがあまり参考になりません。
Premature end of ... ってことは、スクリプトがヘッダを吐く際に想定外のものがhttpdに渡っていると思うのですが、非mod_perl下では何も出ないし、当然shell上で実行しても想定どおり Content-Type: 等のヘッダが出ます。mod_perl上で動作している時に、スクリプトが何を吐いているかを知る方法を教えてください。
http://perl.apache.org/docs/2.0/api/ModPerl/Registry.html#Debugg...
mod_perl: ModPerl::Registry - Run unaltered CGI scripts persistently under mod_perl
失礼しました。
(サンプルのスクリプトが動いているのかどうかすら分からなかったものですから)
参考URLにあるデバッグオプションを設定してはいかがでしょうか。
あるいはModPerl::Registryを継承したデバッグ用のハンドラを書くのが良いかと思います。
うーんちょっとよくわかりませんでしたが、ありがとうございます。
英語ですが、mod_perlによるデバッグトレースを表示させる方法です。
要約すると
perl Makefile.PL PERL_TRACE=1 でmod_perlをリコンパイルする
環境変数MOD_PERL_TRACEを適切に設定する。たとえばhttpd.confにて
PerlSetEnv MOD_PERL_TRACE all とかシェルから
export MOD_PERL_TRACE=all とか
setenv MOD_PERL_TRACE all など
httpdをデバッグモードで動かす。たとえば
./httpd -X
そうするとhttpdを起動したターミナルにデバッグトレースが出てきます。
それを追っていけば何かわかるかもしれません。
あと、これは設定の点で気になった部分なんですが、shell上で動かしたらContent-Type:~が出るということですが、httpd.confにてPerlSendHeader Onになってますよね?
老婆心ながら、少々気になったもので。
「当然チェック済み」であるならば、失礼をどうかお許しくださいませ。
商用UNIXでバイナリで提供されているmod_perlを使っているので、再コンパイルはむずかしいです。 -Xオプションもよくわかりませんでした。
PerlSendHeader On は、PerlOptions +ParseHeaders が相当していると思います。
が、
偶然、うまく動くようになりました!
$|++;
print ”Content-type: text/html¥n”;
print ”Pragma: no-cache¥n”;
print ”Cache-control: no-cache¥n¥n”;
としていたのですが、$|への代入を、ヘッダ出力の後に
もってくると正しく動作するようになりました。
これはこれで謎なのですが、あらためて質問してみます。
ありがとうございました。
ありがとうございます。いずれも試したけどダメでした。。