<?php
$file = 'File address';//آدرس فایل
if (file_exists($file)) {
date_default_timezone_set('GMT');
//1- مشخصات فایلی که قرار است دانلود کنیم :
$data_file = $file;
$data_size = filesize($data_file); //سایز فایل صفر نیست
$mime = 'application/otect-stream'; //فرمت فایل.
$filename = basename($data_file); //اسم فایلی که قرار است دانلود شود
//2- چک کردن برای درخواست, آیا کاربر این متود را پشتیبانی میکند?
if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])) {
$ranges_str = (isset($_SERVER['HTTP_RANGE']))?$_SERVER['HTTP_RANGE']:$HTTP_SERVER_VARS['HTTP_RANGE'];
$ranges_arr = explode('-', substr($ranges_str, strlen('bytes=')));
//الآن زمان چک کردن رنج است
if ((intval($ranges_arr[0]) >= intval($ranges_arr[1]) && $ranges_arr[1] != "" && $ranges_arr[0] != "" )
|| ($ranges_arr[1] == "" && $ranges_arr[0] == "")
) {
//فقط فایل را به طور معمولی دانلود کند زیرا درخواست مشکل داشت :(
$ranges_arr[0] = 0;
$ranges_arr[1] = $data_size - 1;
}
} else { //کاربر درخواست HTTP_RANGE نداشت پس فقط از فایل استفاده کن
$ranges_arr[0] = 0;
$ranges_arr[1] = $data_size - 1;
}
//الآن زمان دانلود فایل است
$file = fopen($data_file, 'rb');
$start = $stop = 0;
if ($ranges_arr[0] === "") { //رنج اولی در آرایه قرار ندارد
//آخرین n1 بایت
$stop = $data_size - 1;
$start = $data_size - intval($ranges_arr[1]);
} elseif ($ranges_arr[1] === "") { //No last
//اولین n0 بایت
$start = intval($ranges_arr[0]);
$stop = $data_size - 1;
} else {
// n0 به n1
$stop = intval($ranges_arr[1]);
$start = intval($ranges_arr[0]);
}
//مطمئن شویم که رنج صحیح است با چک کردن فایل
fseek($file, $start, SEEK_SET);
$start = ftell($file);
fseek($file, $stop, SEEK_SET);
$stop = ftell($file);
$data_len = $stop - $start;
//استفاده از تابع header
if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE'])) {
header('HTTP/1.0 206 Partial Content');
header('Status: 206 Partial Content');
}
header('Accept-Ranges: bytes');
header('Content-type: ' . $mime);
header('Content-Disposition: attachment; filename="' . $filename . '"');
header("Content-Range: bytes $start-$stop/" . $data_size );
header("Content-Length: " . ($data_len + 1));
//و در آخر دیتا را دانلود کنیم و تمام!
fseek($file, $start, SEEK_SET);
$bufsize = 2048000;
ignore_user_abort(true);
@set_time_limit(0);
while (!(connection_aborted() || connection_status() == 1) && $data_len > 0) {
echo fread($file, $bufsize);
$data_len -= $bufsize;
flush();
}
fclose($file);
exit;
}else{
echo "فایل مورد نظر پیدا نشد.";}
?>
سلام. ممنون ولی کاش یه آموزش ویدویی قرار میداید من برای وردپرسم میخواستم درست کنم راستش جلوتر نرفتم . ممنون میشم راهنمایی بفرمایید
این کد برای وردپرس هم قابل استفاده هست
میتونید توی functions اونو فراخونی کنید و استفاده کنید.