標準出力(STDOUT)のクロスとオープンは?
[上に]
[前に]
[次に]
J.Naka
1999/12/06(月) 23:06:10
CGIで長い処理の前に一旦ページ表示さすため、標準出力を
close(STDOUT);
で掃き出させます。
その再度標準出力をオープンするときは、どのようにしたら良いのでしょうか?
ふじ
1999/12/07(火) 15:26:34
> close(STDOUT);
標準出力を閉じてしまうと、(httpd に依存するようですが)
ブラウザへの出力を終わらせてしまうようです。
ページを徐々に出力したいなら、Perlなら出力データを
バッファリングしないようにすればいいのでは。
$| = 1;
print "hogehoge\n";
sleep 5;
print "fugafuga\n";
こんな感じで。
#うまくいかない場合も(サーバによって?)あるようです。
あと、CGIとして動かすなら、ブラウザが表示できるように
書き出さないといけません。<TABLE> は閉じるとか。
とほほ
1999/12/08(水) 00:44:33
追加情報ですが、ブラウザへの逐次書き込みを実現するには、
(1) $1=1;で、perlの出力をバッファリングしないようにする。
の他に、
(2) NPHスクリプトを使用して、WWWサーバーがバッファリングしない
ようにする。
→ http://www.tohoho-web.com/wwwcgi4.htm#NphScript
(3) Pragma: no-cacheヘッダを使用して、プロキシサーバーがバッファ
リングしないようにする。
→ Content-typeヘッダの前に Pragma: no-cacheヘッダを追加する。
もやっておくと、逐次書き込みがうまくいく確率があがる・・・という
のがありました。
とほほ
1999/12/08(水) 00:47:57
量より質を・・・と言いながら、さっそく自分がやってしまいました。
$1=1; は $|=1;
の誤りでした。ごめんなさい。(はずかしい。)
J.Naka
1999/12/08(水) 02:05:20
ども、ふじさん、毎度お世話なります。(_ _)
とほほさん、レス、ありがとさんです。
実は、ふじさんのレスを長めながら、回避方法をclose(STDOUT)とは別の方法でやらないと無理かなと別ロジックを色々思考中(試行ではないす)で、レスが遅れましてすいません。
ページ出力の遅延防止(逐次書き込み)は、ふじさん、とほほさんの回答を参考にまた別のシチュエーションでやってみます。有り難う御座いました。
#すいませんです、質問文アップしたと同時に全く別の展開が見えたりする「あまじゃやく」な人でして<わたくし (^^;
--------------------------------------
> $1=1; は $|=1;
>の誤りでした。ごめんなさい。
いえいえ実現方法への示唆としてだけでも充分です。
回答を参考に実際にコーディングするときはマニュアルの該当箇所を見ますんで、簡単な間違いは全く問題ではありません。正解そのもの回答も嬉しいですが、正解への方向が見える事も好きだったりしますんで。
[上に]
[前に]
[次に]