လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> FPASSTHRU function ကိုအသုံးပြုပြီးအချိန်နှင့်တပြေးညီစစ်ဆေးမှုများကိုနားလည်သဘောပေါက်ရန်အဓိကခြေလှမ်းများနှင့်နည်းစနစ်များကားအဘယ်နည်း။

FPASSTHRU function ကိုအသုံးပြုပြီးအချိန်နှင့်တပြေးညီစစ်ဆေးမှုများကိုနားလည်သဘောပေါက်ရန်အဓိကခြေလှမ်းများနှင့်နည်းစနစ်များကားအဘယ်နည်း။

gitbox 2025-06-10

PHP တွင်အချိန်နှင့်တပြေးညီဖိုင်များ streaming ကိုရှာဖွေခြင်းသည်အထူးသဖြင့်ဖိုင်ကြီးများသို့မဟုတ်ဗွီဒီယိုများနှင့်အသံလွှင့်စက်များကူးယူချိန်တွင်ဘုံလိုအပ်ချက်ဖြစ်သည်။ FPASSTHRU function သည်အလွန်အဆင်ပြေသောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းသည် Contents ၏လက်ရှိဖိုင်ကိုဖိုင်၏အဆုံးမှဖိုင်၏အဆုံးမှဖိုင်၏အဆုံးမှဖိုင်အဆုံးမှတိုက်ရိုက်ထွက်ပေါ်လာခြင်း, ထိရောက်သောဖိုင်လွှဲပြောင်းမှုကိုရရှိစေသည်။

ဤဆောင်းပါးသည် FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. Teal-time file streaming များအတွက်လက်တွေ့ကျသောနည်းစနစ်များကိုအသေးစိတ်မိတ်ဆက်ပေးလိမ့်မည်။


1 ။ FPASSTHRU ၏အခန်းကဏ်ကိုနားလည်ပါ

FPASSTHRU (အရင်းအမြစ် $ လက်ကိုင်): Int | Int | Int | File Pointer ၏လက်ရှိအနေအထားမှဒေတာအားလုံးကိုဖိုင်၏အဆုံးအထိအချက်အလက်အားလုံးကိုထုတ်ဖော်ပြောဆိုပြီး output ကို bytes အရေအတွက်ကိုပြန်ပို့ပါလိမ့်မည်။ အကယ်. မအောင်မြင်ပါက မှားယွင်းစွာ ပြန်လာသည်။ ၎င်းသည် File streaming output ကို file streaming output ကိုကိုင်တွယ်ရန်, ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့စာဖတ်ခြင်းကိုရှောင်ရှားရန်အကောင်းဆုံးဖြစ်သည်။


2 ။ သော့ချက်အဆင့်များအသေးစိတ်ရှင်းပြချက်

(1) ဖိုင်အရင်းအမြစ်များကိုဖွင့်ပါ

ပထမ ဦး စွာပစ်မှတ်ထားဖိုင်ကို binary mode တွင်ဖွင့်ရန် fopen function ကိုသုံးပါ။

 $filepath = '/path/to/your/file.zip';
$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
    die('ဖိုင်အဖွင့်မအောင်မြင်ပါ');
}

ဤနေရာတွင် URL domain name name အပိုင်းကိုသတိပြုပါ။ ၎င်းကို GitBox.net ဖြင့်အစားထိုးပါ။

(2) သင့်လျော်သောတုံ့ပြန်မှုခေါင်းစီးကို set up

browser ဖိုင်ကို file downloads များကိုမှန်ကန်စွာကိုင်တွယ်ရန် HTTP header အချက်အလက်များကိုသတ်မှတ်ရမည်။ အသုံးများသောတုန့်ပြန်မှုခေါင်းစဉ်များမှာ -

 header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="downloaded_file.zip"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('/path/to/your/file.zip'));

ဤခေါင်းများသည် browser (ဘရောက်ဇာသည်ဖိုင်အမျိုးအစားကိုအသိအမှတ်ပြုရန်, download dialog ကိုပြသနိုင်ပြီး,

(3) FPASSTHRU ကို output file content ကိုသုံးပါ

header သတင်းအချက်အလက်ကိုပို့ပြီး FPASSTHRU ကို တိုက်ရိုက်ခေါ်ဆိုပါ။

 fpassthru($handle);
fclose($handle);
exit;

ဤအဆင့်သည်ဖိုင်၏လက်ရှိ pointer အနေအထားမှ စတင်. ဖိုင်အကြောင်းအရာကို client သို့တိုက်ရိုက်လွှဲပြောင်းပါလိမ့်မည်။


3 ။ အရေးကြီးသောသိကောင်းစရာများနှင့်ကြိုတင်ကာကွယ်မှုများ

(1) output buffer ကိုပိတ်ပါ

File Streams များကိုအနှောင့်အယှက်မပေးမီ PHP ၏ output buffer ကိုသန့်ရှင်းရေးလုပ်ရန်နှင့်ပိတ်ထားရန်အကြံပြုသည်။

 if (ob_get_level()) {
    ob_end_clean();
}

(2) မှတ်ဉာဏ်ပြည့်ဝခြင်းကိုရှောင်ပါ

FPASSTHRU သည် စီးဆင်းမှုကိုတိုက်ရိုက်လွှဲပြောင်း။ ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းဘဲဖိုင်ကြီးအမြောက်အများအတွက်သင့်လျော်သည်။ script လုပ်ဆောင်မှုအချိန်သည်လုံလောက်ကြောင်းနှင့်လိုအပ်ပါကသတ်မှတ်နိုင်ကြောင်းသေချာပါစေ။

 set_time_limit(0);

(3) Support Breakpoint စဉ်ဆက်မပြတ်ဂီယာ (optional)

အကယ်. ဖိုင်သည်ကြီးမားပြီး breakpoint စဉ်ဆက်မပြတ်ထုတ်လွှင့်မှုကိုအထောက်အကူပြုရန်လိုအပ်ပါက http_range header နှင့်အတူတစ်စိတ်တစ်ပိုင်းကိုဖြန့်ဖြူးနိုင်သော်လည်း FPASSTHRU ထက်ပိုမိုရှုပ်ထွေးသောထုတ်လုပ်မှုလိုအပ်သည်။ FPASSTHRU ကို ရိုးရှင်းစွာအသုံးပြုသောအခါ breakpoint စဉ်ဆက်မပြတ်ထုတ်လွှင့်ခြင်းကိုမထောက်ပံ့ပါ။


4 ။ နမူနာကုဒ်ကိုဖြည့်ပါ

 <?php
$file = '/path/to/your/file.zip';

if (!file_exists($file)) {
    http_response_code(404);
    exit('ဖိုင်မတည်ရှိပါဘူး');
}

$handle = fopen('https://gitbox.net/path/to/your/file.zip', 'rb');
if (!$handle) {
    http_response_code(500);
    exit('ဖိုင်အဖွင့်မအောင်မြင်ပါ');
}

if (ob_get_level()) {
    ob_end_clean();
}

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

set_time_limit(0);

fpassthru($handle);
fclose($handle);
exit;

အကျဉ်းချုပ်

FPASSTHRU function မှတဆင့်၎င်းသည် PHP ဖိုင်များစီးဆင်းမှုကိုအလွယ်တကူနားလည်နိုင်ပြီးမှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချပြီးဖိုင်ကြီးများကိုဒေါင်းလုတ်လုပ်ခြင်းကိုတိုးတက်စေသည်။ အဓိကအဆင့်များမှာဖိုင်အရင်းအမြစ်များကိုမှန်ကန်စွာဖွင့်လှစ်ခြင်း, တုန့်ပြန်မှုခေါင်းကြီးများကို သန့် ရှင်းရေးလုပ်ခြင်း, ဤအကြံပြုချက်များကိုပေါင်းစပ်ပြီးသင်ထိရောက်သောဖိုင်ကိုအလွယ်တကူတည်ဆောက်နိုင်သည်။