07-03-1396، 01:29 ب.ظ
08-03-1396، 01:49 ب.ظ
درمورد تنظیم هدرهای HTTP-Range تحقیق کنید.
09-03-1396، 11:13 ب.ظ
البته بهتره دانلود را از طریق mod_xsendfile بدیم دست Apache و مدیریت ارسال را خود سرور انجام بده.
26-03-1396، 01:56 ق.ظ
(08-03-1396، 01:49 ب.ظ)ADMIN نوشته: [ -> ]درمورد تنظیم هدرهای HTTP-Range تحقیق کنید.
رفتم دنبال یه چیزای هم نوشتم ولی نمیدونم چرا دانلود رو میزنم یه فایل 17 کیلو بایتی بهم میده
کنترلر :
$data['fileData'] = $this->track_model->getUrlDownload($data['key']); if($data['fileData'] !== false){ $timeexpire = $data['fileData']['time']; $now = time(); $file = ''; if($timeexpire < $now){ redirect('download/time/2'); }else{ $url = str_replace(" ","%20",$data['fileData']['url']); $mime = substr(strrchr($url,'.'),1);//get mime type of file $data['mimType'] = ($mime == 'mp3') ? 'audio/mpeg' : '';//set mime type to mp3 $fileSize = $this->curl_get_file_size($url);//get file size with curl $data['size'] = $fileSize; $data['fileSize'] = $this->formatSizeUnits($fileSize);//convert byte to MB for file size $foundCode = $this->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'); } $fileName = explode('/',$url); $data['begin'] = 0; $data['end'] = $fileSize - 1; $data['file'] = $file ; $data['fileName'] = end($fileName); $cur = $data['begin']; //bigin isset if($handel != NULL){ while(!feof($handel) && $cur <= $data['end'] && (connection_status() == 0)){ $file .= fread($handel,min(1024 * 16, ($data['end'] - $cur) + 1)); $cur += 1024 * 16; } }else{ redirect(base_url().'track/faild'); } } }
کد view:
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('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");
26-03-1396، 02:22 ق.ظ
گاهی حجم فایل رو درست نشون میده ولی موقع دانلود بعد 2-3 ثانیه ارور میده
گاهی هم حجم فایل رو 17 کیلوبایت نشون میده و دانلود میکنه همون 17 کیول بایتو
دانلودو میزنم 17 کیلو باید دانلود میکنه بعد میگه سرور کانکشن رو قطع کرده
[attachment=561]
گاهی هم حجم فایل رو 17 کیلوبایت نشون میده و دانلود میکنه همون 17 کیول بایتو
دانلودو میزنم 17 کیلو باید دانلود میکنه بعد میگه سرور کانکشن رو قطع کرده
[attachment=561]
26-03-1396، 05:54 ب.ظ
فکر میکردم باید با fseek هربار که میخونم فایلو ادامشو بگیرم نیاد از اول
ولی اینم استفاده میکنم این ارورو میده stream does not support seeking
ولی اینم استفاده میکنم این ارورو میده stream does not support seeking
27-03-1396، 02:33 ق.ظ
دوستان کسی راهی به ذهنش نمیرسه من کل کد هارو از کنترلر اوردم تو view فرقی نکرد
$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']); $mime = substr(strrchr($url,'.'),1);//get mime type of file $mimType= ($mime == 'mp3') ? 'audio/mpeg' : '';//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,'rb'); }else{ redirect(base_url().'track/faild'); } $fName = explode('/',$url); $begin = 0; $end = $fileSize - 1; $fileName = end($fName); 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: inline; filename=$fileName"); header("Content-Transfer-Encoding: binary"); $cur = $begin; fseek($handel, $begin, 0); if($handel != NULL){ while(!feof($handel) && $cur <= $end && (connection_status() == 0)) { print fread($handel, min(1024 * 16, ($end - $cur) + 1)); $cur += 1024 * 16; } }else{ redirect(base_url().'track/faild'); } } }
27-03-1396، 05:58 ب.ظ
کد هارو اصلاح کردم تا رسیدم به اینجا که فایل تا 60-70 درصد دانلود میشه اما قطع میشه
resum هم نداره
resum هم نداره
$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){ while(!feof($handel) && $cur <= $end && (connection_status() == 0)) { fseek($handel,$cur,0); print fread($handel, $cur); $cur += 1024 * 16; } fclose($handel); }else{ redirect(base_url()."track/faild"); } } }
28-03-1396، 10:00 ب.ظ
فایل دانلود میشه ولی اجرا نمیشه
هر وقت حل شد اصلاحش رو میزارم شاید بدرد دوستان بخوره
هر وقت حل شد اصلاحش رو میزارم شاید بدرد دوستان بخوره
$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"); } } }
30-03-1396، 01:10 ق.ظ
توی اینترنت نمونه های زیادی هست :
https://gist.github.com/kosinix/4cf0d432638817888149
https://gist.github.com/fzerorubigd/3899077
اما در نهایت وقتی میخوای دانلود حرفه ای داشته باشی باید دانلود را بدی سرویس دهنده یعنی خود Apache یا Nginx برات انجا بده با همون x-sendfile که توی پست های بالا اشاره کردم اما سرویس VPS و در کل اختصاصی میخواد چون Shared Hosting ها عموما پشتیبانی نمیکنن.
https://gist.github.com/kosinix/4cf0d432638817888149
https://gist.github.com/fzerorubigd/3899077
اما در نهایت وقتی میخوای دانلود حرفه ای داشته باشی باید دانلود را بدی سرویس دهنده یعنی خود Apache یا Nginx برات انجا بده با همون x-sendfile که توی پست های بالا اشاره کردم اما سرویس VPS و در کل اختصاصی میخواد چون Shared Hosting ها عموما پشتیبانی نمیکنن.
30-03-1396، 01:57 ق.ظ
بله اینا رو دیدم رو نت تقریبا همرو دیدم
درست میشه مشکلی نیست
درست میشه مشکلی نیست