[PHP-users 34272] Re: コンテンツ出力がされたかどうか知る方法

shounari ml @ shiftra.jp
2009年 2月 4日 (水) 16:51:32 JST


肥田です。


ヨコタさん、ご返信ありがとうございます。

set_time_limit(0);
は、PHPスクリプトの実行時間の操作ですね。
今回の問題はブラウザのタイムアウトですので、
これではうまくいかないと考えています。

改めて検討してみます。ありがとうございました。



> ヨコタと申します
> 
> > 半角スペースを画面出力して ブラウザのタイムアウトを防ぐようにしたい
> 
> set_time_limit(0);
> これで、半角スペースを画面出力しなくても、
> タイムアウトはしなくなりませんか?
> 
> set_time_limit
> http://jp2.php.net/manual/ja/function.set-time-limit.php
> 
> 
> 
> On Wed, 04 Feb 2009 12:55:26 +0900
> shounari <ml @ shiftra.jp> wrote:
> 
> > 肥田と言います。
> > 
> > 
> > コンテンツがすでに出力済かどうかを知る方法を探しています。
> > 
> > 重いDB処理をいくつも行う必要があるため、ひとつのSQLが終わる度に
> > 半角スペースを画面出力して ブラウザのタイムアウトを防ぐようにしたい
> > と考えています。
> > それをDB処理モジュールで行いたいのですが、画面出力が行われていない
> > タイミングでも そのモジュールは利用するため、なんらかのスイッチを
> > 付ける必要があります。
> > 
> > すでにプログラムが膨大なサイズとなっているため、全部の画面側・もしくは
> > コマンドライン側に ひとつひとつスイッチを付けて回るのは避けたいので、
> > 考えたのは コンテンツ出力がされていれば上記処理を行うという仕様です。
> > 
> > 
> > 検討したのは以下の通りです。
> > 
> > headers_sent() により、これが送信済の場合は コンテンツも出力済として扱う。
> > →headerを出力した後、コンテンツを出力する前に、DBの処理を行う部分も
> >  あるため、不具合の原因になる。
> > 
> > 
> > set_error_handler() にて、PHPのWarningを捕まえるようにし、怒られたら
> > なんらかの処理を行う。
> > →怒られるのは コンテンツ出力後に headerを出力した場合であるため、
> >  その場合での対応は困難。
> >  また、DBモジュールのためにエラー処理まで手を付けるのは避けたい。
> > 
> > 
> > ob_start() をし、ob_get_length()にて出力サイズを得る。
> > →そもそも ob_start()をしている場合は画面出力をしていないので、出力サイズを
> >  得ることはできない。
> >  また、DBモジュールが画面の出力を操作するのは避けたい。
> > 
> > 
> > headers_sent()のように、コンテンツが出力済かどうかを得る方法があれば
> > 解決なのですが、何かご存知の方はいらっしゃいませんか?
> > 
> > Cannot modify header information の Warning文中には、どこでコンテンツ出力が
> > 開始されたのかが書かれているので、PHPの内部的には情報を持っているようです。
> > 
> > 
> > よろしくお願いします。
> > 
> > ---
> > 肥田昌也 ml @ shiftra.jp
> > 
> 
> -- 
> yokota @ acoustype.com <yokota @ acoustype.com>
> 


-- 
shounari <ml @ shiftra.jp>



PHP-users メーリングリストの案内