2011-02-07 30 views
0

この問題に関する他のトピックを知っていますが、私の問題は提案された解決策が私にとってうまくいかないことです。 これは私が使用していたテストスクリプトです:プロセスが終了する前にCGIプリントが終了します

#!/usr/bin/perl -sW 
use CGI::Carp qw(fatalsToBrowser); 
use CGI qw/:standard/; 
use 5.12.0; 

my $q = CGI->new; 

$|++; 
print $q->header('text/html'); 

print 0; 
sleep(2); 
print 1; 
sleep(5); 
print 2; 
exit; 

とにも自動フラッシュと真を、すべての出力は、スクリプトの実行が終了した場合にのみ、バッファリングして出力されます。これがなぜ起こっているのか?

+1

このmod_perlはありますか?これをブラウザでテストしているのでしょうか、コマンドラインからスクリプトを実行するだけですか? – mkb

+0

ブラウザで、mod_perlなしで普通のcgiスクリプトとして実行しています –

+3

ここでPerlとしてタグ付けされた9000番目の質問を取得しました! – CanSpice

答えて

1

うわー、これは愚かです、それはLinux上のクロムは実際には独自の出力バッファリングを持っているようです。私はfirefoxで同じスクリプトをテストして、それは動作します... 助けを借りてありがとう!

2

これをシェルから実行するとどうなりますか?

これは、WebサーバーがCGIを処理する方法によって異なります。完全なものをバッファリングして、正確なContent-Lengthを提供します。最近の私の記憶では、Apacheはバッファリングしませんでした。

Non-Parsed Headersを使用するようにWebサーバーを構成します。これにより、データが利用可能であると判断されます。

+0

提案をありがとう。スクリプトはシェルから動作します。奇妙なことは、1.3より前の出力をバッファリングするためだけにApacheを使用していたため、解析されていないヘッダーは問題にならないはずです。しかし、私はまだ何が問題であるかわからないので、助けにはなりません... –

+0

CGIシェルスクリプトからperlインタープリタを起動します。 – Xailor

関連する問題