Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- $url_parsed = parse_url ( html_entity_decode($url, ENT_QUOTES, 'UTF-8') );
- $name = basename ( html_entity_decode($url, ENT_QUOTES, 'UTF-8') );
- function stream_get_headers($fp) {
- $meta = stream_get_meta_data($fp);
- $headers = array();
- if(!empty($meta['wrapper_data'])) {
- foreach($meta['wrapper_data'] as $header) {
- list($header, $value) = array_map('trim', explode(':', $header));
- $headers[$header] = $value;
- }
- }
- return $headers;
- }
- $fp = fopen($url, 'r');
- $headers = stream_get_headers($fp);
- fclose($fp);
- if(isset($headers['Content-Length']))
- $size = $headers['Content-Length'];
- $range = '';
- if (isset($_SERVER['HTTP_RANGE']))
- {
- $range = substr($_SERVER['HTTP_RANGE'], 6);
- list($start, $end) = explode('-', $range);
- $new_length = $size - $start;
- }
- header("Cache-Control: public");
- header("Content-Type: application/octet-stream");
- header("Content-Disposition: attachment; filename=".$name);
- header("Accept-Ranges: bytes");
- header("Connection: Keep-Alive");
- if (empty($range))
- {
- header("Content-Length: $size");
- }
- else
- {
- header("HTTP/1.1 206 Partial Content");
- header("Content-Length: $new_length");
- header("Content-Range: bytes $range/$size");
- }
- $schema = parse_url($url);
- $data = "GET {$schema['path']} HTTP/1.1\r\n";
- $data .= "Host: {$schema['host']}\r\n";
- $data .= "User-Agent: Mozilla/5.0 (Intel Mac OS X) Gecko/20070515 Firefox/2.0.0.4 \r\n";
- $data .= $cookie ? "Cookie: {$cookie}\r\n" : '';
- if (!empty($range)) $data .= "Range: bytes={$range}\r\n";
- $data .= "Connection: Close\r\n\r\n";
- $fp = fsockopen($schema['host'], 80, $errno, $errstr);
- if (!$fp)
- {
- die("Connection error.");
- }
- stream_set_timeout($fp, 300);
- fputs($fp, $data);
- fflush($fp);
- $buff = 256;
- while (!feof($fp))
- {
- $data = fgets($fp, $buff);
- if($headerdone)
- {
- print $data;;
- }
- if(!$headerdone)
- {
- $tmp .= $data;
- $d = explode("\r\n\r\n", $tmp);
- if($d[1])
- {
- print $d[1];
- $headerdone = true;
- $buff = 2048;
- }
- }
- flush();
- ob_flush();
- fpassthru($fp);
- }
- fclose($fp);
- exit;
- }
- die;
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement