PHPとRangeリクエスト

iPhoneからRangeヘッダ付きのGETが来て、file_get_contentsで読みこんだファイルの中身をechoで返するのだけど、なぜかPHPが206 Partial Contentじゃなく、200 OK、というかRange無視して全部返しちゃう場合があるのに気付いた。
いろいろやってるとどうやら、ファイルが小さいと206でRange指定通りに返すが、レスポンスのBODYの量が多いと200で返しちゃうみたい。想像だけど、OutputBufferの量を越えて、Chunked Encodingで返す時には200になってるような気がする。
解決編。pecl_httpを入れて、http_send_fileで返すように変えたら、ちゃんと206で返すようになったのでした。まる。
まあ、だからといって、追記途中の作りかけM3U8を読みこんだiPhoneが、ワンセグHTTP Streamingの再生を途中であきらめちゃう問題は解決してないのでした。仕様書とにらめっこしてみたが、どうもやりたいことはVODでもEVENTでもない(VODだけどPlaylistがliveに生成?)のは、無理な気がしてきた。foltiaの、ffmpegでMP4化する代わりにM3U8を生成するスクリプトを作れば解決なんだけど、あらかじめ作っておかないとダメというのがどうも悔しい。むう。