۱۳۹۶ خرداد ۲۸, ۰۷:۵۶ ب.ظ
دوستان من یه پروژه ای دارم که کاربر ثبت نام میکنه اکانت مدت دار میخره و بعد میتونه موزیک دانلود کنه .
موزیک ها هم در سرور دیگه ایه و فقط لینکش اینور تو نرم فازر ثبت میشه .
از اونجایی که موزیک ها پولی هستن کاربر نباید ادرس فایلها رو ببینه برای همین تا اینجا مشکلی نیست
لینک سازی میشه با تابع freed فایل خونده میشه هدر هارو تغییر میدم و میفرستم که کاربر دانلود کنه
ولی دانلود کامل انجام نمیشه هر دفعه یه جا گیر میکنه
کل پروسه خوندن فایل و ارسال برای دانلود کد هاش رو قرار دادم کسی اگر تجربه کار این شکلی داره راهنمائی کنه ممنون میشم
موزیک ها هم در سرور دیگه ایه و فقط لینکش اینور تو نرم فازر ثبت میشه .
از اونجایی که موزیک ها پولی هستن کاربر نباید ادرس فایلها رو ببینه برای همین تا اینجا مشکلی نیست
لینک سازی میشه با تابع 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: application/force-download");
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
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");
}
}
}
کل پروسه خوندن فایل و ارسال برای دانلود کد هاش رو قرار دادم کسی اگر تجربه کار این شکلی داره راهنمائی کنه ممنون میشم