| <?php |
| |
| $fileName = $_GET["name"]; |
| $type = $_GET["type"]; |
| |
| $fileSize = filesize($fileName); |
| $start = 0; |
| $end = $fileSize - 1; |
| $contentRange = $_SERVER["HTTP_RANGE"]; |
| if (isset($contentRange)) { |
| $range = explode("-", substr($contentRange, strlen("bytes="))); |
| $start = intval($range[0]); |
| if (!empty($range[1])) |
| $end = intval($range[1]); |
| $httpStatus = "206 Partial Content"; |
| } else |
| $httpStatus = "200 OK"; |
| |
| header("Status: " . $httpStatus); |
| header("HTTP/1.1 " . $httpStatus); |
| header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); |
| header("Pragma: no-cache"); |
| header("Etag: " . '"' . $fileSize . "-" . filemtime($fileName) . '"'); |
| header("Content-Type: " . $type); |
| header("Accept-Ranges: bytes"); |
| header("Content-Length: " . ($end - $start + 1)); |
| if ($contentRange) |
| header("Content-Range: bytes " . $start . "-" . $end . "/" . $fileSize); |
| header("Connection: close"); |
| |
| $chunkSize = 1024 * 256; |
| $offset = $start; |
| |
| $fn = fopen($fileName, "rb"); |
| fseek($fn, $offset, 0); |
| |
| while (!feof($fn) && $offset <= $end && connection_status() == 0) { |
| $readSize = min($chunkSize, ($end - $offset) + 1); |
| $buffer = fread($fn, $readSize); |
| print($buffer); |
| flush(); |
| $offset += $chunkSize; |
| } |
| fclose($fn); |
| |
| exit; |
| ?> |