یه پروژه ای دارم که کاربر باید ثبت نام کنه اکانت مدت دار بخره و بعد میتونه موزیک دانلود کنه .
موزیک ها روی یه سرور دیگه هستن و فقط ادرس هاشون تو این پروژ] استفاده میشه
چون موزیک ها پولی هستن کاربر نباید ادرس ها رو هم ببینه
در نتیجه من فایلها رو با تا بع freed میخونم هدر های صفحه رو تنظیم میکنم و فایل برای دانلودد اماده میشه
ولی مشکل اینه که دانلود قطع و وصل میشه
خودش میره از اول شروع میکنه به دانلود یا فایلی که دانلود میشه پخش نمیشه
اگر کسی تجربه این مدل کارهارو داره راهنمائی کنه ممنون میشم





$CI =& get_instance();
$CI->load->helper('func');
if($fileData !== false){
$timeexpire = $fileData['time'];
$now = time();
$file = '';
if($timeexpire < $now){
redirect('download/time/2');
}else{
$url = str_replace(" ","%20",$fileData['url']);
$fileinfo = pathinfo($url);
$mimType= ($fileinfo['extension'] == 'mp3') ? 'audio/mpeg' : 'txt';//set mime type to mp3
$fileSize = curl_get_file_size($url);//get file size with curl
$size= $fileSize;
//$fileSize= formatSizeUnits($fileSize);//convert byte to MB for file size
$foundCode = existfile($url);//check exists file or not and return 400 or 200
if($foundCode == 200){
$handel = @fopen($url,'r');
}else{
redirect(base_url().'track/faild');
}
$begin = 1;
$end = $fileSize ;
$fileName = basename($url);
if (isset($_SERVER['HTTP_RANGE'])){
if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{
$begin = intval($matches[1]);
if (!empty($matches[2]))
{
$end = intval($matches[2]);
}
}
}
if (isset($_SERVER['HTTP_RANGE']))
{
header('HTTP/1.1 206 Partial Content');
}
else
{
header('HTTP/1.1 200 OK');
}

header("Content-Type: $mimType");
header('Cache-Control: public, must-revalidate, max-age=2000');
header('Accept-Ranges: bytes');
header('Content-Length:' . (($end - $begin) + 1));
if (isset($_SERVER['HTTP_RANGE']))
{
header("Content-Range: bytes $begin-$end/$size");
}
header("Content-Disposition: attachment; filename=$fileName");
header("Content-Transfer-Encoding: binary");
$cur = 1;
if($handel != NULL){
fseek($handel,2000,$cur);
while(!feof($handel) && $cur <= $end)
{
print fread($handel, $cur);
$cur += 2000;
}
}else{
redirect(base_url()."track/faild");
}
}
}