PHP တွင်အချိန်နှင့်တပြေးညီဖိုင်များ streaming ကိုရှာဖွေခြင်းသည်အထူးသဖြင့်ဖိုင်ကြီးများသို့မဟုတ်ဗွီဒီယိုများနှင့်အသံလွှင့်စက်များကူးယူချိန်တွင်ဘုံလိုအပ်ချက်ဖြစ်သည်။ FPASSTHRU function သည်အလွန်အဆင်ပြေသောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းသည် Contents ၏လက်ရှိဖိုင်ကိုဖိုင်၏အဆုံးမှဖိုင်၏အဆုံးမှဖိုင်၏အဆုံးမှဖိုင်အဆုံးမှတိုက်ရိုက်ထွက်ပေါ်လာခြင်း, ထိရောက်သောဖိုင်လွှဲပြောင်းမှုကိုရရှိစေသည်။
ဤဆောင်းပါးသည် FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. FPASSTHRU ကို အသုံးပြု. Teal-time file streaming များအတွက်လက်တွေ့ကျသောနည်းစနစ်များကိုအသေးစိတ်မိတ်ဆက်ပေးလိမ့်မည်။
FPASSTHRU (အရင်းအမြစ် $ လက်ကိုင်): Int | Int | Int | File Pointer ၏လက်ရှိအနေအထားမှဒေတာအားလုံးကိုဖိုင်၏အဆုံးအထိအချက်အလက်အားလုံးကိုထုတ်ဖော်ပြောဆိုပြီး output ကို bytes အရေအတွက်ကိုပြန်ပို့ပါလိမ့်မည်။ အကယ်. မအောင်မြင်ပါက မှားယွင်းစွာ ပြန်လာသည်။ ၎င်းသည် File streaming output ကို file streaming output ကိုကိုင်တွယ်ရန်, ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့စာဖတ်ခြင်းကိုရှောင်ရှားရန်အကောင်းဆုံးဖြစ်သည်။
ပထမ ဦး စွာပစ်မှတ်ထားဖိုင်ကို 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 ဖြင့်အစားထိုးပါ။
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 ကိုပြသနိုင်ပြီး,
header သတင်းအချက်အလက်ကိုပို့ပြီး FPASSTHRU ကို တိုက်ရိုက်ခေါ်ဆိုပါ။
fpassthru($handle);
fclose($handle);
exit;
ဤအဆင့်သည်ဖိုင်၏လက်ရှိ pointer အနေအထားမှ စတင်. ဖိုင်အကြောင်းအရာကို client သို့တိုက်ရိုက်လွှဲပြောင်းပါလိမ့်မည်။
File Streams များကိုအနှောင့်အယှက်မပေးမီ PHP ၏ output buffer ကိုသန့်ရှင်းရေးလုပ်ရန်နှင့်ပိတ်ထားရန်အကြံပြုသည်။
if (ob_get_level()) {
ob_end_clean();
}
FPASSTHRU သည် စီးဆင်းမှုကိုတိုက်ရိုက်လွှဲပြောင်း။ ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မထည့်သွင်းဘဲဖိုင်ကြီးအမြောက်အများအတွက်သင့်လျော်သည်။ script လုပ်ဆောင်မှုအချိန်သည်လုံလောက်ကြောင်းနှင့်လိုအပ်ပါကသတ်မှတ်နိုင်ကြောင်းသေချာပါစေ။
set_time_limit(0);
အကယ်. ဖိုင်သည်ကြီးမားပြီး breakpoint စဉ်ဆက်မပြတ်ထုတ်လွှင့်မှုကိုအထောက်အကူပြုရန်လိုအပ်ပါက http_range header နှင့်အတူတစ်စိတ်တစ်ပိုင်းကိုဖြန့်ဖြူးနိုင်သော်လည်း FPASSTHRU ထက်ပိုမိုရှုပ်ထွေးသောထုတ်လုပ်မှုလိုအပ်သည်။ FPASSTHRU ကို ရိုးရှင်းစွာအသုံးပြုသောအခါ breakpoint စဉ်ဆက်မပြတ်ထုတ်လွှင့်ခြင်းကိုမထောက်ပံ့ပါ။
<?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 ဖိုင်များစီးဆင်းမှုကိုအလွယ်တကူနားလည်နိုင်ပြီးမှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချပြီးဖိုင်ကြီးများကိုဒေါင်းလုတ်လုပ်ခြင်းကိုတိုးတက်စေသည်။ အဓိကအဆင့်များမှာဖိုင်အရင်းအမြစ်များကိုမှန်ကန်စွာဖွင့်လှစ်ခြင်း, တုန့်ပြန်မှုခေါင်းကြီးများကို သန့် ရှင်းရေးလုပ်ခြင်း, ဤအကြံပြုချက်များကိုပေါင်းစပ်ပြီးသင်ထိရောက်သောဖိုင်ကိုအလွယ်တကူတည်ဆောက်နိုင်သည်။