Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- // Report all PHP errors
- error_reporting(E_ALL);
- ini_set('display_errors', '1');
- // Open rar archive
- $rar_file = rar_open('test.rar');
- if ($rar_file === false)
- die("Failed to open Rar archive");
- // Get video file in archive
- $entry = rar_entry_get($rar_file, 'video.mkv');
- if ($entry === false)
- die("Failed to find such entry");
- header('Content-Type: application/octet-stream');
- header('Content-Disposition: inline; filename="video.mkv"');
- // Seek
- $seek_start = 0;
- $seek_end = -1;
- $fs = $entry->getPackedSize();
- if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])) {
- $seek_range = isset($HTTP_SERVER_VARS['HTTP_RANGE']) ? substr($HTTP_SERVER_VARS['HTTP_RANGE'], strlen('bytes=')) : substr($_SERVER['HTTP_RANGE'], strlen('bytes='));
- $range = explode('-', $seek_range);
- if ($range[0] > 0) {
- $seek_start = intval($range[0]);
- }
- $seek_end = ($range[1] > 0) ? intval($range[1]) : -1;
- header('HTTP/1.0 206 Partial Content');
- header('Status: 206 Partial Content');
- header('Accept-Ranges: bytes');
- header("Content-Range: bytes $seek_start-$seek_end/" . $fs);
- }
- if ($seek_end < $seek_start) {
- $seek_end = $fs - 1;
- }
- $cl = $seek_end - $seek_start + 1;
- header('Content-Length: ' . $cl);
- ob_flush();
- // Get file stream
- $stream = $entry->getStream();
- rar_close($rar_file); //stream is independent from file
- if ($stream === false)
- die("Failed to obtain stream.");
- fseek($stream, $seek_start);
- // Start stream
- while (!feof($stream)) {
- set_time_limit(0);
- print(fread($stream, 8192));
- flush();
- ob_flush();
- }
- fclose($stream);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement