スクリプトの例を次に示します。
#!/usr/bin/perl
use FCGI;
my $request = FCGI::Request();
while($request->Accept() >= 0) {
die "test";
}
FCGI仕様に従って、Apacheエラーログに「テスト」を出力すると思いますが、代わりに何も起こりません。サイコロを while ループの外側と前に移動すると、エラー ログにメッセージが出力されます。
Apache 構成に関する詳細情報。この行を使用してハンドラーを構成します。
Addhandler fcgid-script .fcgi
suexec が使用されており、fcgi ラッパーとして機能していると言われています。
編集:
部分的な解決策は、FCGI.pm 自体によってもたらされます。
デフォルトでは、die および warn ハンドラはインストールされていません。これは、sfio 対応の perl を実行していない場合、warn または die メッセージがデフォルトでサーバーのログに記録されないことを意味します。自分でダイと警告のハンドラーを設定することをお勧めします。FCGI.pm には、die および warn ハンドラの例が含まれています。
そのため、次の方法で試しました:
#!/usr/bin/perl
use FCGI;
use IO::Handle;
my ( $stdin, $stdout, $stderr ) = ( IO::Handle->new, IO::Handle->new, IO::Handle->new );
my $request = FCGI::Request( $stdin, $stdout, $stderr );
my $err_handler = sub { print {$stderr} @_ };
while($request->Accept() >= 0) {
$SIG{__WARN__} = $SIG{__DIE__} = $err_handler;
warn "test1";
die "test2";
}
はtest2
問題なくエラー ログに表示されますが、表示されtest1
ません。