iPhoneで動画を再生する際には以下の様な挙動になります。
- Safariから動画用URLにアクセス、Content-Type:video/quicktimeで200のステータスコードを返す。
- Content-Typeからこれは動画ファイルだと判断され、動画プレイヤーを起動、AppleCoreMediaから動画用URLにRange:0-1のヘッダー付きでアクセス、Content-Range: bytesのヘッダー付きで206のステータスコードを返す。
- 206ステータスから、動画ファイル再生可能と判断し、AppleCoreMediaから動画用URLにRange:0-XXXのヘッダー付きでアクセス206のステータスコードを返す。
- これを動画ファイルの終端まで繰り返す。
<?php $row = mysql_fetch_assoc($result); $zv_filesize = strlen($row[$data_column]); header('Content-type: ' . $row["content_type"]); header('Content-Disposition: attachment; filename=' . urlencode ($row["name"])); $httpRange = $_SERVER['HTTP_RANGE']; if (isset($httpRange)) { list($toss, $range) = explode('=', $httpRange); list($range_start, $range_end) = explode('-', $range); $length = $range_end - $range_start +1; header('HTTP/1.1 206 Partial Content'); header('Content-Length: ' . $length); header('Content-Range: bytes ' . $range . '/' . $zv_filesize); echo mb_strcut($row[$data_column], $range_start, $length); } else { header('Content-Length: ' . $zv_filesize); echo $row[$data_column]; }