ورود

View Full Version : دانلود با قابلیت resume



web-programmer
یک شنبه 28 خرداد 1396, 19:11 عصر
یه پروژه ای دارم که کاربر باید ثبت نام کنه اکانت مدت دار بخره و بعد میتونه موزیک دانلود کنه .
موزیک ها روی یه سرور دیگه هستن و فقط ادرس هاشون تو این پروژ] استفاده میشه
چون موزیک ها پولی هستن کاربر نباید ادرس ها رو هم ببینه
در نتیجه من فایلها رو با تا بع 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
دوشنبه 29 خرداد 1396, 09:08 صبح
سلام
کدایگنایتر خودش یه helper برای دانلود فایل داره.
force_download();

web-programmer
دوشنبه 29 خرداد 1396, 15:37 عصر
ازش استفادهمیکنم یه فایل 41 بایتی برای دانلود میاره
ضمن اینکه نباید اردس دانلود رو نشون بده ولی نشون میده

numberone1
سه شنبه 30 خرداد 1396, 08:32 صبح
شما باید یه کنترلر درست کنی مثلا download/index بعد توش این helper و بزاری و آدرس فایل و توش فراخوانی کنی
برای لینک دانلود به کاربر آدرس کنترلر و بدی . اینجوری آدرس فایل و به کاربر نشون نمیده

web-programmer
سه شنبه 30 خرداد 1396, 11:10 صبح
بله میدونم ولی فایلو 40 بایت نمای میده دانلود درست انجام نمیشه

numberone1
سه شنبه 30 خرداد 1396, 15:50 عصر
بله میدونم ولی فایلو 40 بایت نمای میده دانلود درست انجام نمیشه

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


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

web-programmer
چهارشنبه 31 خرداد 1396, 12:44 عصر
اخرین نسخه رو استفاده کردم و ادرس ها هم درسته همرو تست کردم