# زبان های اسکریپتی > PHP > CodeIgniter >  دانلود با قابلیت resume

## web-programmer

یه پروژه ای دارم که کاربر باید ثبت نام کنه اکانت مدت دار بخره و بعد میتونه موزیک دانلود کنه .
موزیک ها روی یه سرور دیگه هستن و فقط ادرس هاشون تو این پروژ] استفاده میشه 
چون موزیک ها پولی هستن کاربر نباید ادرس ها رو هم ببینه 
در نتیجه من فایلها رو با تا بع 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");
        }
    }            
}

----------


## numberone1

سلام
کدایگنایتر خودش یه helper برای دانلود فایل داره. 
force_download();

----------


## web-programmer

ازش استفادهمیکنم یه فایل 41 بایتی برای دانلود میاره 
ضمن اینکه نباید اردس دانلود رو نشون بده ولی نشون میده

----------


## numberone1

شما باید یه کنترلر درست کنی مثلا download/index بعد توش این helper و بزاری و آدرس فایل و توش فراخوانی کنی 
برای لینک دانلود به کاربر آدرس کنترلر و بدی . اینجوری آدرس فایل و به کاربر نشون نمیده

----------


## web-programmer

بله میدونم ولی فایلو 40 بایت نمای میده دانلود درست انجام نمیشه

----------


## numberone1

> بله میدونم ولی فایلو 40 بایت نمای میده دانلود درست انجام نمیشه


از جدیدترین نسخه فریم ورک استفاده کن , و مطمئن شو آدرس فایل درسته که تو پارامتر اول بهش ارسال میکنی

force_download('path-of-file.jpg');

----------


## web-programmer

اخرین نسخه رو استفاده کردم و ادرس ها هم درسته همرو تست کردم

----------

