1 回答

TA貢獻1865條經驗 獲得超7個贊
正如我猜測的,我缺少一個 php 標頭。
需要添加以下標題:
header('Accept-Ranges:?bytes');
添加Accept-Ranges
標頭修復了 Chrome 的問題。但對于 safari,您需要檢查HTTP_RANGE
并添加Content-Range
標頭。
這是我的實現,它在所有主要瀏覽器中都能正常工作。
? ? ? ? $content_length = strlen($media_total);
? ? ? ? $total_bytes = $content_length;
? ? ? ? $content_length_1 = $content_length - 1;
? ? ? ? if (isset($_SERVER['HTTP_RANGE'])) {
? ? ? ? ? ? $byte_range = explode('-',trim(str_ireplace('bytes=','',$_SERVER['HTTP_RANGE'])));
? ? ? ? ? ? $byte_from = $byte_range[0];
? ? ? ? ? ? $byte_to = intval($byte_range[1]);
? ? ? ? ? ? $byte_to = $byte_to == 0 ? $content_length_1 : $byte_to;
? ? ? ? ? ? $media_total = substr($media_total,$byte_from,$byte_to);
? ? ? ? ? ? $content_length = strlen($media_total);
? ? ? ? ? ? header('HTTP/1.1 206 Partial Content');
? ? ? ? }
? ? ? ? else {
? ? ? ? ? ? $byte_from = 0;
? ? ? ? ? ? $byte_to = $content_length_1;
? ? ? ? }
? ? ? ? $content_range = 'bytes '.$byte_from.'-' . $byte_to . '/' . $total_bytes;
? ? ? ? header('Accept-Ranges: bytes');
? ? ? ? header("Content-Range: ".$content_range);
? ? ? ? header("Content-type: ".$type);
? ? ? ? header("Content-length: ".$content_length);
? ? ? ? header('Content-Transfer-Encoding: binary');
? ? ? ? echo $media_total;
? ? ? ? exit;
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報