Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.75 KB | None | 0 0
  1. <?
  2.  
  3. $url_parsed = parse_url ( html_entity_decode($url, ENT_QUOTES, 'UTF-8') );
  4. $name = basename ( html_entity_decode($url, ENT_QUOTES, 'UTF-8') );
  5.  
  6. function stream_get_headers($fp) {
  7.     $meta = stream_get_meta_data($fp);
  8.     $headers = array();
  9.    
  10.     if(!empty($meta['wrapper_data'])) {
  11.         foreach($meta['wrapper_data'] as $header) {
  12.             list($header, $value) = array_map('trim', explode(':', $header));
  13.            
  14.             $headers[$header] = $value;
  15.         }
  16.     }
  17.    
  18.     return $headers;
  19. }
  20.  
  21.     $fp = fopen($url, 'r');
  22.     $headers = stream_get_headers($fp);
  23.     fclose($fp);
  24.  
  25.     if(isset($headers['Content-Length']))
  26.         $size = $headers['Content-Length'];  
  27.    
  28. $range = '';
  29.             if (isset($_SERVER['HTTP_RANGE']))
  30.             {
  31.                 $range = substr($_SERVER['HTTP_RANGE'], 6);
  32.                 list($start, $end) = explode('-', $range);
  33.                 $new_length = $size - $start;
  34.             }
  35.             header("Cache-Control: public");
  36.             header("Content-Type: application/octet-stream");
  37.             header("Content-Disposition: attachment; filename=".$name);
  38.             header("Accept-Ranges: bytes");
  39.             header("Connection: Keep-Alive");
  40.             if (empty($range))
  41.             {
  42.                 header("Content-Length: $size");
  43.             }
  44.             else
  45.             {
  46.                 header("HTTP/1.1 206 Partial Content");
  47.                 header("Content-Length: $new_length");
  48.                 header("Content-Range: bytes $range/$size");
  49.             }
  50.             $schema = parse_url($url);
  51.             $data = "GET {$schema['path']} HTTP/1.1\r\n";
  52.             $data .= "Host: {$schema['host']}\r\n";
  53.             $data .= "User-Agent: Mozilla/5.0 (Intel Mac OS X) Gecko/20070515 Firefox/2.0.0.4 \r\n";
  54.             $data .= $cookie ? "Cookie: {$cookie}\r\n" : '';
  55.            
  56.             if (!empty($range)) $data .= "Range: bytes={$range}\r\n";
  57.             $data .= "Connection: Close\r\n\r\n";
  58.                 $fp = fsockopen($schema['host'], 80, $errno, $errstr);
  59.             if (!$fp)
  60.             {
  61.             die("Connection error.");
  62.             }
  63.                         stream_set_timeout($fp, 300);
  64.             fputs($fp, $data);
  65.             fflush($fp);
  66.             $buff = 256;
  67.                         while (!feof($fp))
  68.                         {
  69.                         $data = fgets($fp, $buff);
  70.                         if($headerdone)
  71.                         {
  72.                         print $data;;
  73.                         }
  74.                         if(!$headerdone)
  75.                         {
  76.                         $tmp .= $data;
  77.                         $d = explode("\r\n\r\n", $tmp);
  78.                         if($d[1])
  79.                            {
  80.                              print $d[1];
  81.                              $headerdone = true;
  82.                              $buff = 2048;
  83.                            }
  84.                         }
  85.                         flush();
  86.                         ob_flush();
  87.                 fpassthru($fp);
  88.                         }
  89.                         fclose($fp);
  90.                         exit;
  91.     }
  92.         die;
  93.        
  94. }
  95.    
  96. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement