[PHP-users 34259] コンテンツ出力がされたかどうか知る方法
shounari
ml @ shiftra.jp
2009年 2月 4日 (水) 12:55:26 JST
肥田と言います。
コンテンツがすでに出力済かどうかを知る方法を探しています。
重い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
PHP-users メーリングリストの案内