読者です 読者をやめる 読者になる 読者になる

PHP での HTTP レスポンスを Transfer-Enconding: Chunked から Content-Length 指定に変えたい

PHP CGI

レンタルサーバに制作した PHP のプログラムをアップしたら表示が遅い。ブラウザから見たときだけそうなり、wget すると一瞬で取得できるのです。
Firebugs で HTTPヘッダを見てみたら、Transfer-Encoding: chunked になってました。ということはそのレスポンスのストリーム終端が検出できずに Keep-Alive がタイムアウトするまで待ってしまってるのが原因のようです。それで PHP スクリプトの最後に flush(); とか書いてみたものの特に変化は見られずでした。
そもそもチャンクなのもどうのかなぁと思っていたら、
DoCoMo のiモードコンテンツ作成時の仕様 HTTPより
http://www.nttdocomo.co.jp/service/imode/make/content/html/notice/basis/#p04

CGI作成時に「Content-Type」、「Content-Length」は必須項目となります。

とあるので、ケータイからアクセス対応も考えるとチャンクではなく Content-Length で対応しないと駄目ということです。

http://jp2.php.net/manual/ja/function.ob-get-length.php#13715 を見たところ、ズバリの答えがありました。

<?
ob_start();
?>
<html>
〜〜〜〜〜
</html>
<?
$size=ob_get_length();
header("Content-Length: $size");
ob_end_flush();
?>

世の中、php でケータイコンテンツ作られている事例は多々あると思うのですが、みなさんこのように実装されているのでしょうか。