EZwebのオブジェクトダウンロード用Range Request処理

よく入れ忘れるのでメモっとく。
EZwebは、objectでファイルをダウンロードするときに、Range Requestをしようとするので、プログラムでDL処理するときになんとかしてあげないといけない。
なんかサーバ側の設定で自動でなんとかしてくれるらしいんだけどね。

$fp = fopen("/foo/bar/", "r");
while (!feof($fp)) {
    $contents_data .= fread($fp,1024);
}
fclose($fp);

// Rangeの処理
if (array_key_exists("HTTP_RANGE", $_SERVER)) {
    list($dummy, $start, $end) = preg_split("/[=\-]/", $_SERVER["HTTP_RANGE"]);

    $total_size = strlen($contents_data);
    $contents_data = substr($contents_data, $start, ($end + 1 - $start)); // 呼ばれたレンジの部分だけ切り取る
    header("HTTP/1.1 206 Partial Content");
    header("Content-Range: bytes " . $start . "-" . $end . "/" . $total_size);
}
echo $contents_data;

このへん結構面倒なので、着うたとかのオブジェクトダウンロードしかできないファイルはともかく、普通の着メロファイルとかはHDML書いてCRCダウンロードのほうが楽だね。