برگزیده های پرشین تولز

دانلود از یک سرور دیگه ؟

mohammad8711

Registered User
تاریخ عضویت
12 نوامبر 2005
نوشته‌ها
394
لایک‌ها
118
سلام
من با استفاده از این اسکریپت اجازه دانلود فایل های روی سرور رو به کاربر می دم و بدون هیچ مشکلی فایل با دانلود منیجر دانلود میشه
اما وقتی می خوام از یک سرور دیگه(مثلا www.example.com/file.rar) فایل رو به کاربر بدم یک مشکلی به وجود میاد ، اگه دانلود منیجر بخواد از بیشتر از یک کانکشن برای دانلود فایل استفاده کنه فقط چند بایت دانلود میشه و ارور میده
راه حل این مشکل چیه ؟
PHP:
<?php
/*
   send_file( string $file [, int $rate ] )
 
   param $file - Path to the file to send
   param $rate - Speed limit of download in kB/s
*/
function send_file($file, $rate = 0) {
 
   // Check if the file exists
   if (!is_file($file))
   {
      die('404 File Not Found');
   }
 
   // Get the filename, extension, and size
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename, '.'), 1));
   $size = filesize($file); 
 
   // Set the mime type based on the extension
   switch($file_extension)
   {
      case 'exe':
         $ctype = 'application/octet-stream';
      break;
      case 'zip':
         $ctype = 'application/zip';
      break;
      case 'mp3':
         $ctype = 'audio/mpeg';
      break;
      case 'mpg':
         $ctype = 'video/mpeg';
      break;
      case 'avi':
         $ctype = 'video/x-msvideo';
      break;
      //  Block access to sensitive file types
      case 'php':
      case 'inc':
         exit;
      break;
      default:
         $ctype='application/force-download';
   }
 
   // Begin writing headers
   header('Cache-Control: private');
   header('Content-Type: ' . $ctype);
   header('Content-Disposition: attachment; filename=' . $filename);
   header('Content-Transfer-Encoding: binary');
   header('Accept-Ranges: bytes');
 
   // Open the file for reading
   $fp = fopen($file, 'rb');
 
   // Check if http_range was sent by client
   if(isset($_SERVER['HTTP_RANGE']))
   {
      // If so, calculate the range to use
      $seek_range = substr($_SERVER['HTTP_RANGE'], 6);
      $range = explode('-', $seek_range);
 
      if($range[0] > 0){
         $seek_start = intval($range[0]);
      }
      if($range[1] > 0){
         $seek_end  =  intval($range[1]);
      }
 
      // Seek to the requested position in the file
      fseek($fp, $seek_start);
 
      // Set the range response headers
      header('HTTP/1.1 206 Partial Content');
      header('Content-Length: ' . ($seek_end - $seek_start + 1));
      header(sprintf('Content-Range: bytes %d-%d/%d', $seek_start, $seek_end, $size));
   }
   else
   {
      // Set default response headers
      header('Content-Length: ' . $size);
   }
 
   // Set up the size of each piece of data we send
   $block_size = 1024;
   if($rate > 0)
   {
      // Multiply by rate if specified
      $block_size *= $rate;
   }
 
   // Prevent the script from timing out
   set_time_limit(0);
 
   // Start sending the file
   while(!feof($fp))
   {
      // Output data
      print(fread($fp, $block_size));
      flush();
 
      if($rate > 0)
      {
         // Wait one second before next block if rate is specified
         sleep(1);
      }
   }
 
   // Close the file
   fclose($fp);
}
?>
 
بالا