လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသောဖိုင်များနှင့်အတူ PHP ၏အနှောင့်အယှက်များကိုဒေါင်းလုပ်လုပ်ခြင်းကိုပြီးပြည့်စုံသောသင်ခန်းစာ

ကြီးမားသောဖိုင်များနှင့်အတူ PHP ၏အနှောင့်အယှက်များကိုဒေါင်းလုပ်လုပ်ခြင်းကိုပြီးပြည့်စုံသောသင်ခန်းစာ

gitbox 2025-07-15

PHP Super Super File ကိုဒေါင်းလုပ်ဆွဲရန်စိန်ခေါ်မှု

ဖွံ့ဖြိုးမှုဖြစ်စဉ်တွင်ကြီးမားသောဖိုင်များ download လုပ်ရန်လိုအပ်သည့်အခါ PHP ၏ Readfile () function ကိုအသုံးပြုခြင်းသည်ရိုးရှင်းစွာမှတ်တမ်းများကိုတိုက်ရိုက်ဖတ်ရှုခြင်းသို့မဟုတ်လုံးလုံးလျားလျားစာဖတ်ခြင်းကိုတိုက်ရိုက်ဖတ်ရှုပါလိမ့်မည်။ ထို့ကြောင့်ပရိုဂရမ်တည်ငြိမ်မှုနှင့်အသုံးပြုသူအတွေ့အကြုံများကိုသေချာစေရန်ပိုမိုထိရောက်သော download ဖြေရှင်းချက်ကိုလက်ခံရန်လိုအပ်သည်။

Breakpoint စဉ်ဆက်မပြတ်ဂီယာ၏ download

Breakpoint ဆက်လက်ဆက်လက်လုပ်ဆောင်နေသောအစိတ်အပိုင်းများကိုအကြိမ်ကြိမ်ဒေါင်းလုတ်လုပ်ခြင်းမရှိဘဲဒေါင်းလုပ်အနှောင့်အယှက်ဖြစ်သည့်နောက်, ၎င်းသည် bandwidth ကိုကယ်တင်ရုံသာမကအထူးသဖြင့်ကွန်ယက်ပတ် 0 န်းကျင်သည်မတည်ငြိမ်သောအခါယုံကြည်စိတ်ချရမှုနှင့်သုံးစွဲသူစိတ်ကျေနပ်မှုကိုပြုလုပ်သည်။

breakpoint စဉ်ဆက်မပြတ်ဂီယာကိုအကောင်အထည်ဖော်ရန်ခြေလှမ်းများ

ဖိုင်လမ်းကြောင်းနှင့်အမည်ကိုရယူပါ

ပထမ ဦး စွာ, 0 န်ဆောင်မှုခံယူသူမှဖြတ်သန်းသောဖိုင် parameters များကိုရယူရန်အတွက် $ _get ကို သုံး. basename () function ကို သုံး. basename () function ကိုသုံးပါ။

 $file = $_GET['file'];
$filename = basename($file);

Breakpoint စဉ်ဆက်မပြတ်ဂီယာကိုပံ့ပိုးရန် HTTP တုံ့ပြန်မှုခေါင်းစီးကိုသတ်မှတ်ပါ

Application / Octet-Stream သို့ အကြောင်းအရာအမျိုးအစားကို သတ်မှတ်ခြင်းဖြင့်ဤသည် browser ကို browser ကိုပြောပါ။ ပူးတွဲဖိုင်ကိုဒေါင်းလုပ်ဆွဲခြင်းနှင့်ဖိုင်အမည်ကိုညွှန်ပြရန် အကြောင်းအရာ - သဘောထား - သဘောထား ခေါင်းစီးကိုသတ်မှတ်ပါ။

Http_range ၏အဆိုအရ Download Start Leader တွင် Download Start တည်နေရာကိုခွဲခြမ်းစိတ်ဖြာခြင်းကိုခွဲခြမ်းစိတ်ဖြာခြင်းနှင့် Breakpoint စဉ်ဆက်မပြတ်ထုတ်လွှင့်မှုကိုရရှိရန် FESEEK () ကို အသုံးပြု. ချိန်ညှိထားသည်။

 header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
if (isset($_SERVER['HTTP_RANGE'])) {
    $range = $_SERVER['HTTP_RANGE'];
    preg_match('/bytes=(\d+)-/', $range, $matches);
    $start = intval($matches[1]);
    fseek($file, $start);
}

ဖိုင်နှင့် output ဒေတာ looping

ဖိုင်အမျိုးအစားမှတစ်ဆင့် Looping လုပ်ခြင်းဖြင့်အရွယ်အစားတစ်ခုစီ၏ကြားခံ (ဥပမာ 4096 Bytes) ကြားခံတစ်ခုကိုဖတ်ပါ။ ဒေတာများကိုအချိန်မီထုတ်လွှင့်ရန်သေချာစေရန်နှင့် output buffer ကိုဖတ်ပါ။

 $buffer_size = 4096;
while (!feof($file)) {
    echo fread($file, $buffer_size);
    ob_flush();
    flush();
}

အကျဉ်းချုပ်

အထက်ပါနည်းလမ်းများမှတစ်ဆင့် PHP သည်ကြီးမားသောဖိုင်များ၏ breakpoints များ၏ပြတ်တောက်မှုများကိုထိရောက်စွာထောက်ခံနိုင်ပြီးရိုးရာ တဖြည်းဖြည်းဖတ်ခြင်း () function ကိုကြီးမားသောဖိုင်အမျိုးအစားများဖြင့်ဖြေရှင်းနိုင်သည်။ developer များသည်လည်း download တိုးတက်မှုပြသခြင်း, အမြန်နှုန်းကန့်သတ်ထိန်းချုပ်မှုနှင့်အခြားလုပ်ဆောင်မှုများကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။

အကွာအဝေး header နှင့် php file operty functions ကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်း HTTP protocol ၏လုပ်ဆောင်ချက်များသည် download 0 န်ဆောင်မှုကိုပိုမိုတည်ငြိမ်ပြီးပြောင်းလွယ်ပြင်လွယ်ဖြစ်စေနိုင်သည်။